Package org.geoserver.wcs2_0.eo

Source Code of org.geoserver.wcs2_0.eo.DescribeEOCoverageSetInterceptor

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wcs2_0.eo;

import static org.geoserver.wcs2_0.util.RequestUtils.checkService;
import static org.geoserver.wcs2_0.util.RequestUtils.checkVersion;

import java.util.ArrayList;
import java.util.List;

import net.opengis.wcs20.DescribeEOCoverageSetType;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.config.GeoServer;
import org.geoserver.platform.OWS20Exception;
import org.geoserver.platform.OWS20Exception.OWSExceptionCode;
import org.geoserver.platform.ServiceException;
import org.geoserver.wcs.WCSInfo;
import org.geoserver.wcs.responses.CoverageResponseDelegateFinder;
import org.geoserver.wcs2_0.eo.response.DescribeEOCoverageSetTransformer;
import org.geoserver.wcs2_0.exception.WCS20Exception;
import org.geoserver.wcs2_0.response.MIMETypeMapper;
import org.geoserver.wcs2_0.response.WCS20DescribeCoverageTransformer;
import org.geoserver.wcs2_0.util.EnvelopeAxesLabelsMapper;
import org.geoserver.wcs2_0.util.StringUtils;

/**
* AOP interceptor running DescribeEOCoverageSet for WCS 2.O EO
*
* @author Andrea Aime - GeoSolutions
*/
public class DescribeEOCoverageSetInterceptor implements MethodInterceptor {

    EOCoverageResourceCodec resourceCodec;

    private GeoServer geoServer;

    private Catalog catalog;

    private CoverageResponseDelegateFinder responseFactory;

    private EnvelopeAxesLabelsMapper envelopeAxesMapper;

    private MIMETypeMapper mimemapper;

    public DescribeEOCoverageSetInterceptor(GeoServer geoServer,
            CoverageResponseDelegateFinder responseFactory,
            EnvelopeAxesLabelsMapper envelopeDimensionsMapper, MIMETypeMapper mimemappe,
            EOCoverageResourceCodec resourceCodec) {
        this.geoServer = geoServer;
        this.catalog = geoServer.getCatalog();
        this.responseFactory = responseFactory;
        this.envelopeAxesMapper = envelopeDimensionsMapper;
        this.mimemapper = mimemappe;
        this.resourceCodec = resourceCodec;
    }

    public WCSInfo getServiceInfo() {
        return geoServer.getService(WCSInfo.class);
    }
   
    private boolean isEarthObservationEnabled() {
        WCSInfo wcs = getServiceInfo();
        Boolean enabled = wcs.getMetadata().get(WCSEOMetadata.ENABLED.key, Boolean.class);
        return Boolean.TRUE.equals(enabled);
    }

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        if (invocation.getMethod().getName().equals("describeEOCoverageSet") && isEarthObservationEnabled()) {
            try {
                DescribeEOCoverageSetType dcs = (DescribeEOCoverageSetType) invocation
                        .getArguments()[0];
                return describeEOCoverageSet(dcs);
            } catch (Exception e) {
                if (e instanceof ServiceException) {
                    throw e;
                } else {
                    throw new ServiceException(e);
                }
            }
        } else {
            return invocation.proceed();
        }
    }

    private Object describeEOCoverageSet(DescribeEOCoverageSetType dcs) {
        checkService(dcs.getService());
        checkVersion(dcs.getVersion());

        if (dcs.getEoId() == null || dcs.getEoId().isEmpty()) {
            throw new OWS20Exception("Required parameter eoID missing", new OWSExceptionCode(
                    "emptyEoIdList", 404), "eoid");
        }

        // check coverages are legit
        List<String> badCoverageIds = new ArrayList<String>();

        for (String datasetId : (List<String>) dcs.getEoId()) {
            CoverageInfo layer = resourceCodec.getDatasetCoverage(datasetId);
            if (layer == null) {
                badCoverageIds.add(datasetId);
            }
        }
        if (!badCoverageIds.isEmpty()) {
            String mergedIds = StringUtils.merge(badCoverageIds);
            throw new WCS20Exception("Could not find the requested coverage(s): " + mergedIds,
                    new OWSExceptionCode("noSuchEODataset", 404), "eoid");
        }

        WCS20DescribeCoverageTransformer tx = new WCS20DescribeCoverageTransformer(
                getServiceInfo(), catalog, responseFactory, envelopeAxesMapper, mimemapper);
        return new DescribeEOCoverageSetTransformer(getServiceInfo(), resourceCodec, envelopeAxesMapper, tx);
    }

}
TOP

Related Classes of org.geoserver.wcs2_0.eo.DescribeEOCoverageSetInterceptor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.