⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addtomapactionhandler.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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 + -