/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wcs2_0; import java.nio.charset.Charset; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Logger; import net.opengis.wcs20.GetCapabilitiesType; import org.geoserver.platform.OWS20Exception; import org.geoserver.wcs.WCSInfo; import org.geoserver.wcs.response.WCSCapsTransformer; import org.geoserver.wcs.responses.CoverageResponseDelegateFinder; import org.geoserver.wcs2_0.exception.WCS20Exception; import org.geoserver.wcs2_0.response.WCS20GetCapabilitiesTransformer; import org.geoserver.wcs2_0.util.RequestUtils; import org.geotools.util.logging.Logging; import org.geotools.xml.transform.TransformerBase; /** * * @author Emanuele Tajariol (etj) - GeoSolutions */ public class GetCapabilities { protected Logger LOGGER = Logging.getLogger(DefaultWebCoverageService20.class); private WCSInfo wcs; private CoverageResponseDelegateFinder responseFactory; public static final List<String> PROVIDED_VERSIONS = Collections.unmodifiableList(Arrays.asList( WCS20Const.V201, WCS20Const.V20, WCS20Const.V111, WCS20Const.V110)); public GetCapabilities(WCSInfo wcs, CoverageResponseDelegateFinder responseFactory) { this.wcs = wcs; this.responseFactory = responseFactory; } TransformerBase run(GetCapabilitiesType request) throws WCS20Exception { List<String> acceptedVersions = request.getAcceptVersions() == null ? null : request.getAcceptVersions().getVersion(); String negotiatedVersion = RequestUtils.getVersionOws20(PROVIDED_VERSIONS, acceptedVersions); if (WCS20Const.V110.equals(negotiatedVersion) || WCS20Const.V111.equals(negotiatedVersion)) { LOGGER.warning("GetCapa2.0 Dispatching to 1.1"); // next code should be tested a bit WCSCapsTransformer capsTransformer = new WCSCapsTransformer(wcs.getGeoServer()); capsTransformer.setEncoding(Charset.forName((wcs.getGeoServer().getSettings().getCharset()))); return capsTransformer; } else if (WCS20Const.V20.equals(negotiatedVersion) || WCS20Const.V201.equals(negotiatedVersion)) { WCS20GetCapabilitiesTransformer capsTransformer = new WCS20GetCapabilitiesTransformer(wcs.getGeoServer(), responseFactory); capsTransformer.setEncoding(Charset.forName((wcs.getGeoServer().getSettings().getCharset()))); return capsTransformer; } else { throw new WCS20Exception("Internal error: Could not understand version:" + negotiatedVersion, OWS20Exception.OWSExceptionCode.VersionNegotiationFailed, negotiatedVersion); } } }