/* (c) 2014 - 2016 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.inspire.wms;
import static org.geoserver.inspire.InspireMetadata.CREATE_EXTENDED_CAPABILITIES;
import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_TYPE;
import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_URL;
import static org.geoserver.inspire.InspireMetadata.LANGUAGE;
import static org.geoserver.inspire.InspireSchema.VS_NAMESPACE;
import static org.geoserver.inspire.InspireSchema.VS_SCHEMA;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.PublishedInfo;
import org.geoserver.inspire.ViewServicesUtils;
import org.geoserver.wms.ExtendedCapabilitiesProvider;
import org.geoserver.wms.GetCapabilitiesRequest;
import org.geoserver.wms.WMS;
import org.geoserver.wms.WMSInfo;
import org.geotools.util.NumberRange;
import org.geotools.util.Version;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.NamespaceSupport;
public class WMSExtendedCapabilitiesProvider implements ExtendedCapabilitiesProvider {
@Override
public String[] getSchemaLocations(String schemaBaseURL) {
return new String[]{VS_NAMESPACE, VS_SCHEMA};
}
/**
* @return empty list, INSPIRE profile for WMS 1.1.1 not supported.
* @see
* org.geoserver.wms.ExtendedCapabilitiesProvider#getVendorSpecificCapabilitiesRoots()
*/
@Override
public List<String> getVendorSpecificCapabilitiesRoots(GetCapabilitiesRequest request) {
return Collections.emptyList();
}
/**
* @return empty list, INSPIRE profile for WMS 1.1.1 not supported.
* @see
* org.geoserver.wms.ExtendedCapabilitiesProvider#getVendorSpecificCapabilitiesChildDecls()
*/
@Override
public List<String> getVendorSpecificCapabilitiesChildDecls(GetCapabilitiesRequest request) {
return Collections.emptyList();
}
@Override
public void registerNamespaces(NamespaceSupport namespaces) {
ViewServicesUtils.registerNameSpaces(namespaces);
}
@Override
public void encode(Translator tx, WMSInfo wms, GetCapabilitiesRequest request)
throws IOException {
Version requestVersion = WMS.version(request.getVersion());
// if this is not a wms 1.3.0 request
if (!WMS.VERSION_1_3_0.equals(requestVersion)) {
return;
}
MetadataMap serviceMetadata = wms.getMetadata();
Boolean createExtendedCapabilities = serviceMetadata.get(CREATE_EXTENDED_CAPABILITIES.key, Boolean.class);
String metadataURL = (String) serviceMetadata.get(SERVICE_METADATA_URL.key);
//Don't create extended capabilities element if mandatory content not present
//or turned off
if (metadataURL == null
|| createExtendedCapabilities != null
&& !createExtendedCapabilities) {
return;
}
String mediaType = (String) serviceMetadata.get(SERVICE_METADATA_TYPE.key);
String language = (String) serviceMetadata.get(LANGUAGE.key);
// IGN : INSPIRE SCENARIO 1
ViewServicesUtils.addScenario1Elements(tx, metadataURL, mediaType, language);
}
Attributes atts(String... atts) {
AttributesImpl attributes = new AttributesImpl();
for (int i = 0; i < atts.length; i += 2) {
attributes.addAttribute(null, atts[i], atts[i], null, atts[i + 1]);
}
return attributes;
}
@Override
public void customizeRootCrsList(Set<String> srs) {
// nothing to do
}
@Override
public NumberRange<Double> overrideScaleDenominators(PublishedInfo layer,
NumberRange<Double> scaleDenominators) {
return scaleDenominators;
}
}