📄 addtomapactionhandler.java
字号:
package com.esri.solutions.jitk.web.tasks.search.csw.actions;
import com.esri.adf.web.ags.data.AGSMapResource;
import com.esri.adf.web.aims.data.AIMSMapResource;
import com.esri.adf.web.data.GISResource;
import com.esri.adf.web.data.WebApplication;
import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.geometry.WebGeometry;
import com.esri.adf.web.wms.data.WMSMapResource;
import com.esri.solutions.jitk.common.enums.ServiceType;
import com.esri.solutions.jitk.common.metadata.AbstractMapServiceMetadataExporter;
import com.esri.solutions.jitk.common.metadata.BasicMetadataExporter;
import com.esri.solutions.jitk.common.metadata.IMetadataCatalog;
import com.esri.solutions.jitk.common.metadata.IMetadataDocument;
import com.esri.solutions.jitk.common.metadata.IMetadataExporter;
import com.esri.solutions.jitk.common.metadata.InvalidMetadataOperationException;
import com.esri.solutions.jitk.web.data.IGISResourceFactory;
import com.esri.solutions.jitk.web.tasks.resources.ResourceAdder;
import org.apache.log4j.Logger;
import java.util.Map;
import java.util.UUID;
public class AddToMapActionHandler implements IMetadataAwareActionHandler {
private static final Logger _logger = Logger.getLogger(AddToMapActionHandler.class);
private String _name = null;
/**
* Reference to the configured GIS resource factories that will
* be used to create {@link GISResource}.
*/
private Map<String, IGISResourceFactory<GISResource>> _factories = null;
private IMetadataCatalog _catalog = null;
private IMetadataDocument _document = null;
private WebContext _context = null;
/**
* This method is responsible for adding a map service associated with
* a CS/W search result to the map. It will first create a {@link GISResource}
* by using one of the configured {@link IGISResourceFactory} and then add the
* return {@link GISResource} to the map via
* {@link com.esri.solutions.jitk.web.data.WebContext#addResource(String, GISResource)}.
*
* @throws IllegalStateException Thrown if the GIS resource factories have not been set
* via the {@link #setResourceFactories(Map)} method.
*/
public void execute() {
IMetadataDocument fullDoc = null;
AbstractMapServiceMetadataExporter exporter = null;
String serviceUrl = null;
String serviceName = null;
ServiceType serviceType = null;
IGISResourceFactory<GISResource> factory = null;
GISResource resource = null;
if (_factories == null) {
throw new IllegalStateException(
"GIS resource factories cannot be null - unable to add service to map");
}
for (IMetadataExporter e : _catalog.getMetadataProfile().getExporters()
.values()) {
if (e instanceof AbstractMapServiceMetadataExporter) {
exporter = (AbstractMapServiceMetadataExporter) e;
break;
}
}
if (exporter == null) {
_logger.warn(
"No exporter configured to export critical map service connection information - cannot add service to the map.");
return;
}
// first attempt to get the metadata document via the GetRepositoryItem
// request. If that is not supported an InvalidMetadataOperationException
// will be thrown. Catch that exception and then do a GetRecordById request.
try {
fullDoc = _catalog.lookupRepositoryItem(_document.getMetadataID());
} catch (InvalidMetadataOperationException ex) {
_logger.warn(
"An operation exception has occurred looking up repository item with ID: [" +
_document.getMetadataID().getId() + "]", ex);
_logger.warn(
"Attempting to retrieve metadata via another lookup by ID method.");
fullDoc = _catalog.lookup(_document.getMetadataID());
}
if (fullDoc == null) {
_logger.warn(
"Unable to retrieve CS/W metadata document - unable to add service to the map");
return;
}
fullDoc.export(exporter);
serviceUrl = exporter.getServiceUrl();
serviceName = exporter.getServiceName();
serviceType = exporter.getServiceType();
if (serviceUrl == null) {
_logger.warn("No service URL - unable to add service to the map");
return;
}
if (serviceType == null) {
_logger.warn("No service Type - unable to add service to the map");
return;
}
if (serviceType.getServiceType().equals(ServiceType.WMS.getServiceType())) {
factory = _factories.get(WMSMapResource.class.getName());
resource = factory.createResource();
WMSMapResource wmsResource = (WMSMapResource) resource;
wmsResource.setWmsURL(serviceUrl);
wmsResource.setAlias(serviceName);
_context.addResource("wmsJITK" + UUID.randomUUID().toString(),
resource);
} else if (serviceType.getServiceType()
.equals(ServiceType.ArcIMS.getServiceType())) {
factory = _factories.get(AIMSMapResource.class.getName());
resource = factory.createResource();
AIMSMapResource aimsResource = (AIMSMapResource) resource;
aimsResource.setHostName(serviceUrl);
aimsResource.setServiceName(serviceName);
aimsResource.setAlias(serviceName);
_context.addResource("aimsJITK" + UUID.randomUUID().toString(),
resource);
} else if (serviceType.getServiceType()
.equals(ServiceType.AGSWeb.getServiceType())) {
factory = _factories.get(AGSMapResource.class.getName());
resource = factory.createResource();
AGSMapResource agsResource = (AGSMapResource) resource;
agsResource.setEndPointURL(serviceUrl);
agsResource.setAlias(serviceName);
_context.addResource("agsWebJITK" + UUID.randomUUID().toString(),
resource);
} else if (serviceType.getServiceType()
.equals(ServiceType.WCS.getServiceType())) {
// use the resource adder to add a WCS resource. It will do a
// getCapabilities request to get the WCS's coverage name which is required
// to add the service.
ResourceAdder adder = new ResourceAdder();
adder.setWebContext(_context);
adder.addWCSSource(serviceUrl, false, true, true);
} else if (serviceType.getServiceType()
.equals(ServiceType.WFS.getServiceType())) {
ResourceAdder adder = new ResourceAdder();
adder.setWebContext(_context);
adder.addWFSSource(serviceUrl, serviceName, true, true);
}
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#setName(java.lang.String)
*/
public void setName(String name) {
_name = name;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#getName()
*/
public String getName() {
return _name;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IMetadataAwareActionHandler#setMetadataCatalog(com.esri.solutions.jitk.common.metadata.IMetadataCatalog)
*/
public void setMetadataCatalog(IMetadataCatalog catalog) {
_catalog = catalog;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IMetadataAwareActionHandler#setMetadataDocument(com.esri.solutions.jitk.common.metadata.IMetadataDocument)
*/
public void setMetadataDocument(IMetadataDocument document) {
_document = document;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#setWebContext(com.esri.adf.web.data.WebContext)
*/
public void setWebContext(WebContext webContext) {
_context = webContext;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#setWebGeometry(com.esri.adf.web.data.geometry.WebGeometry)
*/
public void setWebGeometry(WebGeometry geometry) {
// no need for WebGeometry in this action handler
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#shouldDisplay(com.esri.solutions.jitk.common.metadata.BasicMetadataExporter)
*/
public boolean shouldDisplay(BasicMetadataExporter exporter) {
if (exporter == null) {
throw new NullPointerException("CswRecord cannot be null");
}
if (exporter.isLiveDataOrMap()) {
return true;
} else {
return false;
}
}
/**
* Sets the {@link Map} of {@link IGISResourceFactory} used to create
* {@link GISResource}.
*
* @param factories {@link Map} of {@link IGISResourceFactory}.
*/
public void setResourceFactories(
Map<String, IGISResourceFactory<GISResource>> factories) {
_factories = factories;
}
/*
* (non-Javadoc)
* @see com.esri.solutions.jitk.web.tasks.search.csw.actions.IActionHandler#getActionKey()
*/
public String getActionKey() {
return WebApplication.getResourceString(
"SearchAttributesTask.SearchResultContextMenuAddToMap");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -