Skip to content

Commit

Permalink
[GEOS-8392] WMTS service configured metdata will only appear in the c…
Browse files Browse the repository at this point in the history
…apabilities document if INSPIRE extension is installed
  • Loading branch information
Nuno Oliveira committed Nov 15, 2017
1 parent f9d6800 commit 4dd7c9a
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 75 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,35 +6,22 @@


import org.geoserver.ExtendedCapabilitiesProvider; import org.geoserver.ExtendedCapabilitiesProvider;
import org.geoserver.catalog.MetadataMap; import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.config.ContactInfo;
import org.geoserver.config.GeoServer; import org.geoserver.config.GeoServer;
import org.geoserver.gwc.wmts.WMTSInfo; import org.geoserver.gwc.wmts.WMTSInfo;
import org.geoserver.inspire.ViewServicesUtils; import org.geoserver.inspire.ViewServicesUtils;
import org.geowebcache.GeoWebCacheException;
import org.geowebcache.config.meta.ServiceContact;
import org.geowebcache.config.meta.ServiceInformation;
import org.geowebcache.config.meta.ServiceProvider;
import org.geowebcache.conveyor.Conveyor;
import org.geowebcache.io.XMLBuilder; import org.geowebcache.io.XMLBuilder;
import org.geowebcache.layer.TileLayer; import org.geowebcache.service.wmts.WMTSExtensionImpl;
import org.geowebcache.service.OWSException;
import org.geowebcache.service.wmts.WMTSExtension;
import org.geowebcache.storage.StorageBroker;
import org.xml.sax.Attributes; import org.xml.sax.Attributes;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List;


import static org.geoserver.inspire.InspireMetadata.CREATE_EXTENDED_CAPABILITIES; import static org.geoserver.inspire.InspireMetadata.CREATE_EXTENDED_CAPABILITIES;
import static org.geoserver.inspire.InspireMetadata.LANGUAGE; import static org.geoserver.inspire.InspireMetadata.LANGUAGE;
import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_TYPE; import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_TYPE;
import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_URL; import static org.geoserver.inspire.InspireMetadata.SERVICE_METADATA_URL;
import static org.geoserver.inspire.InspireSchema.COMMON_NAMESPACE; import static org.geoserver.inspire.InspireSchema.COMMON_NAMESPACE;


public class WMTSExtendedCapabilitiesProvider implements WMTSExtension { public class WMTSExtendedCapabilitiesProvider extends WMTSExtensionImpl {


public final static String VS_VS_OWS_NAMESPACE = "http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0"; public final static String VS_VS_OWS_NAMESPACE = "http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0";
public final static String VS_VS_OWS_SCHEMA = "http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0/inspire_vs_ows_11.xsd"; public final static String VS_VS_OWS_SCHEMA = "http://inspire.ec.europa.eu/schemas/inspire_vs_ows11/1.0/inspire_vs_ows_11.xsd";
Expand Down Expand Up @@ -113,61 +100,4 @@ public void end(String element) {
String language = (String) serviceMetadata.get(LANGUAGE.key); String language = (String) serviceMetadata.get(LANGUAGE.key);
ViewServicesUtils.addScenario1Elements(translator, metadataURL, mediaType, language); ViewServicesUtils.addScenario1Elements(translator, metadataURL, mediaType, language);
} }

@Override
public ServiceInformation getServiceInformation() {
WMTSInfo gsInfo = geoserver.getService(WMTSInfo.class);
ServiceInformation gwcInfo = new ServiceInformation();
// add service information
gwcInfo.setTitle(gsInfo.getTitle());
gwcInfo.setTitle(gsInfo.getTitle());
gwcInfo.setDescription(gsInfo.getAbstract());
gwcInfo.getKeywords().addAll(gsInfo.keywordValues());
gwcInfo.setFees(gsInfo.getFees());
gwcInfo.setAccessConstraints(gsInfo.getAccessConstraints());
// add provider information
ServiceProvider serviceProvider = new ServiceProvider();
serviceProvider.setProviderName(gsInfo.getMaintainer());
serviceProvider.setProviderName(gsInfo.getOnlineResource());
// add contact information
ContactInfo gsContactInfo = geoserver.getSettings().getContact();
if (gsContactInfo != null) {
ServiceContact gwcContactInfo = new ServiceContact();
gwcContactInfo.setIndividualName(gsContactInfo.getContactPerson());
gwcContactInfo.setPositionName(gsContactInfo.getContactPosition());
gwcContactInfo.setAddressType(gsContactInfo.getAddressType());
gwcContactInfo.setAddressStreet(gsContactInfo.getAddress());
gwcContactInfo.setAddressCity(gsContactInfo.getAddressCity());
gwcContactInfo.setAddressPostalCode(gsContactInfo.getAddressPostalCode());
gwcContactInfo.setAddressCountry(gsContactInfo.getAddressCountry());
gwcContactInfo.setPhoneNumber(gsContactInfo.getContactVoice());
gwcContactInfo.setFaxNumber(gsContactInfo.getContactFacsimile());
gwcContactInfo.setAddressEmail(gsContactInfo.getAddressElectronicMailAddress());
serviceProvider.setServiceContact(gwcContactInfo);
}
gwcInfo.setServiceProvider(serviceProvider);
return gwcInfo;
}

@Override
public List<OperationMetadata> getExtraOperationsMetadata() throws IOException {
return null;
}

@Override
public Conveyor getConveyor(HttpServletRequest request, HttpServletResponse response, StorageBroker storageBroker) throws GeoWebCacheException, OWSException {
return null;
}

@Override
public boolean handleRequest(Conveyor conveyor) throws OWSException {
return false;
}

@Override
public void encodeLayer(XMLBuilder xmlBuilder, TileLayer tileLayer) throws IOException {

}


} }
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,60 @@
/* (c) 2016 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.gwc.wmts;

import org.geoserver.config.ContactInfo;
import org.geoserver.config.GeoServer;
import org.geowebcache.config.meta.ServiceContact;
import org.geowebcache.config.meta.ServiceInformation;
import org.geowebcache.config.meta.ServiceProvider;
import org.geowebcache.service.wmts.WMTSExtensionImpl;

/**
* Makes WMTS service metadata configured in GeoServer available to GWC
*/
public class WMTSCapabilitiesProvider extends WMTSExtensionImpl {

private final GeoServer geoserver;

public WMTSCapabilitiesProvider(GeoServer geoserver) {
this.geoserver = geoserver;
}

@Override
public ServiceInformation getServiceInformation() {
// make WMTS service metadata configured in GeoServer available to GWC
WMTSInfo gsInfo = geoserver.getService(WMTSInfo.class);
ServiceInformation gwcInfo = new ServiceInformation();
// add service information
gwcInfo.setTitle(gsInfo.getTitle());
gwcInfo.setTitle(gsInfo.getTitle());
gwcInfo.setDescription(gsInfo.getAbstract());
gwcInfo.getKeywords().addAll(gsInfo.keywordValues());
gwcInfo.setFees(gsInfo.getFees());
gwcInfo.setAccessConstraints(gsInfo.getAccessConstraints());
// add provider information
ServiceProvider serviceProvider = new ServiceProvider();
serviceProvider.setProviderName(gsInfo.getMaintainer());
serviceProvider.setProviderName(gsInfo.getOnlineResource());
// add contact information
ContactInfo gsContactInfo = geoserver.getSettings().getContact();
if (gsContactInfo != null) {
ServiceContact gwcContactInfo = new ServiceContact();
gwcContactInfo.setIndividualName(gsContactInfo.getContactPerson());
gwcContactInfo.setPositionName(gsContactInfo.getContactPosition());
gwcContactInfo.setAddressType(gsContactInfo.getAddressType());
gwcContactInfo.setAddressStreet(gsContactInfo.getAddress());
gwcContactInfo.setAddressCity(gsContactInfo.getAddressCity());
gwcContactInfo.setAddressPostalCode(gsContactInfo.getAddressPostalCode());
gwcContactInfo.setAddressCountry(gsContactInfo.getAddressCountry());
gwcContactInfo.setPhoneNumber(gsContactInfo.getContactVoice());
gwcContactInfo.setFaxNumber(gsContactInfo.getContactFacsimile());
gwcContactInfo.setAddressEmail(gsContactInfo.getAddressElectronicMailAddress());
serviceProvider.setServiceContact(gwcContactInfo);
}
gwcInfo.setServiceProvider(serviceProvider);
return gwcInfo;
}
}
5 changes: 5 additions & 0 deletions src/gwc/src/main/resources/applicationContext.xml
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
--> -->
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> <beans>

<bean id="wmtsCapabilitiesProvider" class="org.geoserver.gwc.wmts.WMTSCapabilitiesProvider">
<constructor-arg ref="geoServer"/>
</bean>

<bean class="org.geoserver.platform.ModuleStatusImpl"> <bean class="org.geoserver.platform.ModuleStatusImpl">
<constructor-arg index="0" value="gs-gwc"/> <constructor-arg index="0" value="gs-gwc"/>
<constructor-arg index="1" value="GeoWeb Cache"/> <constructor-arg index="1" value="GeoWeb Cache"/>
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -1072,9 +1072,12 @@ public void testWmtsGetCapabilitiesRequest() throws Exception {
// parse XML response content // parse XML response content
Document document = dom(response, false); Document document = dom(response, false);
// check that default styles are advertised // check that default styles are advertised
WMTS_XPATH_10.evaluate("count(//wmts:Contents/wmts:Layer/wmts:Style[@isDefault='true']" + String result = WMTS_XPATH_10.evaluate("count(//wmts:Contents/wmts:Layer/wmts:Style[@isDefault='true']" +
"/ows:Identifier[text()=Default])", document); "/ows:Identifier[text()='Default'])", document);

assertThat(Integer.parseInt(result), greaterThan(0));
// check that GeoServer service metadata is available
result = WMTS_XPATH_10.evaluate("count(//ows:ServiceProvider/ows:ProviderName[text()='http://geoserver.org'])", document);
assertThat(Integer.parseInt(result), is(1));
} }


@Test @Test
Expand Down

0 comments on commit 4dd7c9a

Please sign in to comment.