/* (c) 2014 - 2015 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; import java.util.HashMap; import java.util.Map; import org.geoserver.catalog.MetadataMap; import org.geoserver.config.ServiceInfo; import static org.geoserver.inspire.InspireSchema.COMMON_NAMESPACE; import static org.geoserver.inspire.InspireSchema.DLS_NAMESPACE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class InspireTestSupport { public static void clearInspireMetadata(MetadataMap metadata) { for (InspireMetadata item : InspireMetadata.values()) { metadata.remove(item.key); } } public static void assertSchemaLocationContains(String schemaLocation, String namespace, String url) { assertTrue(schemaLocation.contains(namespace)); String[] schemaLocationParts = schemaLocation.split("\\s+"); for (int i = 0; i < schemaLocationParts.length; i++) { if (schemaLocationParts[i].equals(namespace)) { assertTrue(schemaLocationParts[i + 1].equals(url)); } } } public static void assertInspireCommonScenario1Response(final Element extendedCapabilities, final String metadataUrl, final String mediaType, final String language) { NodeList nodeList = extendedCapabilities.getElementsByTagNameNS(COMMON_NAMESPACE, "MetadataUrl"); assertEquals("Number of MetadataUrl elements", 1, nodeList.getLength()); final Element mdUrl = (Element) nodeList.item(0); assertInspireMetadataUrlResponse(mdUrl, metadataUrl, mediaType); nodeList = extendedCapabilities.getElementsByTagNameNS(COMMON_NAMESPACE, "SupportedLanguages"); assertEquals("Number of SupportedLanguages elements", 1, nodeList.getLength()); final Element suppLangs = (Element) nodeList.item(0); nodeList = suppLangs.getElementsByTagNameNS(COMMON_NAMESPACE, "DefaultLanguage"); assertEquals("Number of DefaultLanguage elements", 1, nodeList.getLength()); final Element defLang = (Element) nodeList.item(0); nodeList = defLang.getElementsByTagNameNS(COMMON_NAMESPACE, "Language"); assertEquals("Number of DefaultLanguage/Language elements", 1, nodeList.getLength()); final Element defLangVal = (Element) nodeList.item(0); assertEquals("DefaultLanguage/Language", language, defLangVal.getFirstChild().getNodeValue()); nodeList = extendedCapabilities.getElementsByTagNameNS(COMMON_NAMESPACE, "ResponseLanguage"); assertEquals("Number of ResponseLanguage elements", 1, nodeList.getLength()); final Element respLang = (Element) nodeList.item(0); nodeList = respLang.getElementsByTagNameNS(COMMON_NAMESPACE, "Language"); assertEquals("Number of ResponseLanguage/Language elements", 1, nodeList.getLength()); final Element respLangVal = (Element) nodeList.item(0); assertEquals("ResponseLanguage/Language", language, respLangVal.getFirstChild().getNodeValue()); } public static void assertInspireMetadataUrlResponse(final Element mdUrl, final String metadataUrl, final String mediaType) { NodeList nodeList = mdUrl.getElementsByTagNameNS(COMMON_NAMESPACE, "URL"); assertEquals("Number of URL elements", 1, nodeList.getLength()); final Element url = (Element) nodeList.item(0); assertEquals("MetadataUrl/URL", metadataUrl, url.getFirstChild().getNodeValue()); nodeList = mdUrl.getElementsByTagNameNS(COMMON_NAMESPACE, "MediaType"); if (mediaType == null) { assertEquals("Number of MediaType elements", 0, nodeList.getLength()); } else { assertEquals("Number of MediaType elements", 1, nodeList.getLength()); assertEquals("MediaType", mediaType, ((Element) nodeList.item(0)).getFirstChild().getNodeValue()); } } public static void assertInspireDownloadSpatialDataSetIdentifierResponse( final Element extendedCapabilities, final UniqueResourceIdentifiers ids) { final NodeList spatialDataSetIdentifiers = extendedCapabilities.getElementsByTagNameNS(DLS_NAMESPACE, "SpatialDataSetIdentifier"); assertEquals("Number of SpatialDataSetIdentifer elements", ids.size(), spatialDataSetIdentifiers.getLength()); final Map<String, UniqueResourceIdentifier> idMap = new HashMap<String, UniqueResourceIdentifier>(); for (UniqueResourceIdentifier id : ids) { idMap.put(id.getCode(), id); } for (int i = 0; i < spatialDataSetIdentifiers.getLength(); i++) { Element sdi = (Element) spatialDataSetIdentifiers.item(i); NodeList nodeList = sdi.getElementsByTagNameNS(COMMON_NAMESPACE, "Code"); assertEquals("Number of Code elements", 1, nodeList.getLength()); String code = ((Element) nodeList.item(0)).getFirstChild().getNodeValue(); assertTrue("Should be an identifier with code " + code, idMap.containsKey(code)); nodeList = sdi.getElementsByTagNameNS(COMMON_NAMESPACE, "Namespace"); String expectedNamespace = idMap.get(code).getNamespace(); if (expectedNamespace == null) { assertEquals("Number of Namespace elements for identifier with code " + code, 0, nodeList.getLength()); } else { assertEquals("Number of Namespace elements for identifier with code " + code, 1, nodeList.getLength()); String actualNamespace = ((Element) nodeList.item(0)).getFirstChild().getNodeValue(); assertEquals("Namespace for identifier with code " + code, expectedNamespace, actualNamespace); } String expectedMetadataUrl = idMap.get(code).getMetadataURL(); String actualMetadataUrl = sdi.getAttribute("metadataURL"); if (expectedMetadataUrl == null) { expectedMetadataUrl = ""; } assertEquals("metadataURL attribute for identifer with code" + code, expectedMetadataUrl, actualMetadataUrl); } } }