/** * Test simple Record Marshalling. * * @throws java.lang.Exception */ @Test public void inpsireExtensionUnmarshallingTest() throws Exception { String xml = "<wms:Capability xmlns:wms=\"http://www.opengis.net/wms\" xmlns:gml=\"http://www.opengis.net/gml/3.2\" xmlns:gmd=\"http://www.isotc211.org/2005/gmd\" xmlns:srv=\"http://www.isotc211.org/2005/srv\" xmlns:gco=\"http://www.isotc211.org/2005/gco\" xmlns:sld=\"http://www.opengis.net/sld\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:inspire_vs=\"http://inspira.europa.eu/networkservice/view/1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + '\n' + " <inspire_vs:ExtendedCapabilities>" + '\n' + " <inspire_vs:Resourcelocator>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://javacestpasdlamenthealeau.com</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " </inspire_vs:Resourcelocator>" + '\n' + " <inspire_vs:MetadataUrl>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://javacestdurocknroll.com</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " </inspire_vs:MetadataUrl>" + '\n' + " <inspire_vs:ResourceType>" + '\n' + " <gmd:MD_ScopeCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#MD_ScopeCode\" codeListValue=\"service\"/>" + '\n' + " </inspire_vs:ResourceType>" + '\n' + " <inspire_vs:TemporalRefererence>" + '\n' + " <gmd:EX_Extent>" + '\n' + " <gmd:temporalElement>" + '\n' + " <gmd:EX_TemporalExtent>" + '\n' + " <gmd:extent>" + '\n' + " <gml:TimePeriod>" + '\n' + " <gml:beginPosition>1970-01-02T10:20:00+01:00</gml:beginPosition>" + '\n' + " <gml:endPosition>1970-01-02T10:20:01.000+01:00</gml:endPosition>" + '\n' + " </gml:TimePeriod>" + '\n' + " </gmd:extent>" + '\n' + " </gmd:EX_TemporalExtent>" + '\n' + " </gmd:temporalElement>" + '\n' + " </gmd:EX_Extent>" + '\n' + " </inspire_vs:TemporalRefererence>" + '\n' + " <inspire_vs:Conformity>" + '\n' + " <gmd:DQ_ConformanceResult>" + '\n' + " <gmd:specification>" + '\n' + " <gmd:CI_Citation>" + '\n' + " <gmd:title>" + '\n' + " <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>" + '\n' + " </gmd:title>" + '\n' + " <gmd:alternateTitle>" + '\n' + " <gco:CharacterString>EPSG</gco:CharacterString>" + '\n' + " </gmd:alternateTitle>" + '\n' + " <gmd:identifier>" + '\n' + " <gmd:MD_Identifier>" + '\n' + " <gmd:code>" + '\n' + " <gco:CharacterString>EPSG</gco:CharacterString>" + '\n' + " </gmd:code>" + '\n' + " </gmd:MD_Identifier>" + '\n' + " </gmd:identifier>" + '\n' + " <gmd:citedResponsibleParty>" + '\n' + " <gmd:CI_ResponsibleParty>" + '\n' + " <gmd:organisationName>" + '\n' + " <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>" + '\n' + " </gmd:organisationName>" + '\n' + " <gmd:contactInfo>" + '\n' + " <gmd:CI_Contact>" + '\n' + " <gmd:onlineResource>" + '\n' + " <gmd:CI_OnlineResource>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://www.epsg.org</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " <gmd:function>" + '\n' + " <gmd:CI_OnLineFunctionCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode\" codeListValue=\"information\"/>" + '\n' + " </gmd:function>" + '\n' + " </gmd:CI_OnlineResource>" + '\n' + " </gmd:onlineResource>" + '\n' + " </gmd:CI_Contact>" + '\n' + " </gmd:contactInfo>" + '\n' + " <gmd:role>" + '\n' + " <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\"/>" + '\n' + " </gmd:role>" + '\n' + " </gmd:CI_ResponsibleParty>" + '\n' + " </gmd:citedResponsibleParty>" + '\n' + " <gmd:presentationForm>" + '\n' + " <gmd:CI_PresentationFormCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode\" codeListValue=\"tableDigital\"/>" + '\n' + " </gmd:presentationForm>" + '\n' + " </gmd:CI_Citation>" + '\n' + " </gmd:specification>" + '\n' + " <gmd:explanation>" + '\n' + " <gco:CharacterString>see the referenced specification</gco:CharacterString>" + '\n' + " </gmd:explanation>" + '\n' + " <gmd:pass>" + '\n' + " <gco:Boolean>true</gco:Boolean>" + '\n' + " </gmd:pass>" + '\n' + " </gmd:DQ_ConformanceResult>" + '\n' + " </inspire_vs:Conformity>" + '\n' + " <inspire_vs:MetadataPointOfContact>" + '\n' + " <gmd:CI_ResponsibleParty>" + '\n' + " <gmd:organisationName>" + '\n' + " <gco:CharacterString>European Petroleum Survey Group</gco:CharacterString>" + '\n' + " </gmd:organisationName>" + '\n' + " <gmd:contactInfo>" + '\n' + " <gmd:CI_Contact>" + '\n' + " <gmd:onlineResource>" + '\n' + " <gmd:CI_OnlineResource>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://www.epsg.org</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " <gmd:function>" + '\n' + " <gmd:CI_OnLineFunctionCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode\" codeListValue=\"information\"/>" + '\n' + " </gmd:function>" + '\n' + " </gmd:CI_OnlineResource>" + '\n' + " </gmd:onlineResource>" + '\n' + " </gmd:CI_Contact>" + '\n' + " </gmd:contactInfo>" + '\n' + " <gmd:role>" + '\n' + " <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\"/>" + '\n' + " </gmd:role>" + '\n' + " </gmd:CI_ResponsibleParty>" + '\n' + " </inspire_vs:MetadataPointOfContact>" + '\n' + " <inspire_vs:MetadataDate>" + '\n' + " <gco:Date>1970-01-02</gco:Date>" + '\n' + " </inspire_vs:MetadataDate>" + '\n' + " <inspire_vs:SpatialDataService>" + '\n' + " <srv:serviceType>" + '\n' + " <gco:LocalName>view</gco:LocalName>" + '\n' + " </srv:serviceType>" + '\n' + " </inspire_vs:SpatialDataService>" + '\n' + " <inspire_vs:InpireKeywords>" + '\n' + " <gmd:keyword>" + '\n' + " <gco:CharacterString>something</gco:CharacterString>" + '\n' + " </gmd:keyword>" + '\n' + " </inspire_vs:InpireKeywords>" + '\n' + " <inspire_vs:Languages>" + '\n' + " <inspire_vs:Language>FR</inspire_vs:Language>" + '\n' + " <inspire_vs:Language default=\"true\">EN</inspire_vs:Language>" + '\n' + " </inspire_vs:Languages>" + '\n' + " <inspire_vs:currentLanguage>FR</inspire_vs:currentLanguage>" + '\n' + " </inspire_vs:ExtendedCapabilities>" + '\n' + "</wms:Capability>" + '\n'; ExtendedCapabilitiesType ext = new ExtendedCapabilitiesType(); NameFactory nameFactory = new DefaultNameFactory(); ObjectFactory factory = new ObjectFactory(); ext.setResourceType(ScopeCode.SERVICE); ext.setSpatialDataService(new ServiceType(nameFactory.createLocalName(null, "view"))); ext.setResourcelocator( new DefaultOnlineResource(URI.create("http://javacestpasdlamenthealeau.com"))); ext.setMetadataUrl(new DefaultOnlineResource(URI.create("http://javacestdurocknroll.com"))); DefaultExtent extent = new DefaultExtent(); DefaultTemporalExtent tempExt = new DefaultTemporalExtent(); NamedIdentifier periodName = new NamedIdentifier(Citations.CRS, "period"); final Map<String, Object> periodProp = new HashMap<>(); periodProp.put(IdentifiedObject.NAME_KEY, periodName); NamedIdentifier instantName = new NamedIdentifier(Citations.CRS, "period instant"); final Map<String, Object> properties = new HashMap<>(); properties.put(IdentifiedObject.NAME_KEY, instantName); DefaultPeriod period = new DefaultPeriod( periodProp, new DefaultInstant(properties, new Date(120000000)), new DefaultInstant(properties, new Date(120001000))); tempExt.setExtent(period); extent.setTemporalElements(Arrays.asList(tempExt)); ext.setTemporalRefererence(extent); DefaultResponsibleParty rp = new DefaultResponsibleParty(Role.PRINCIPAL_INVESTIGATOR); rp.setOrganisationName(new SimpleInternationalString("European Petroleum Survey Group")); DefaultOnlineResource or = new DefaultOnlineResource(URI.create("http://www.epsg.org")); or.setFunction(OnLineFunction.INFORMATION); DefaultContact ct = new DefaultContact(or); rp.setContactInfo(ct); DefaultCitation citation = new DefaultCitation(); citation.setCitedResponsibleParties(Arrays.asList(rp)); citation.setTitle(rp.getOrganisationName()); citation.setAlternateTitles(Arrays.asList(new SimpleInternationalString("EPSG"))); citation.setIdentifiers(Arrays.asList(new DefaultIdentifier("EPSG"))); citation.setPresentationForms(Arrays.asList(PresentationForm.TABLE_DIGITAL)); DefaultConformanceResult cresult = new DefaultConformanceResult( citation, new DefaultInternationalString("see the referenced specification"), true); ext.setConformity(cresult); ResponsibleParty party = DefaultResponsibleParty.castOrCopy( Citations.EPSG.getCitedResponsibleParties().iterator().next()); ext.setMetadataPointOfContact(party); ext.setMetadataDate(new Date(82800000)); DefaultKeywords key = new DefaultKeywords(new SimpleInternationalString("something")); ext.setInpireKeywords(key); List<LanguageType> langs = new ArrayList<>(); langs.add(new LanguageType("FR")); langs.add(new LanguageType("EN", true)); LanguagesType languages = new LanguagesType(langs); ext.setLanguages(languages); ext.setCurrentLanguage("FR"); JAXBElement<ExtendedCapabilitiesType> jbExtendedCap = factory.createExtendedCapabilities(ext); Capability expResult = new Capability(null, null, null, jbExtendedCap); final Object unmarshalled = unmarshaller.unmarshal(new StringReader(xml)); assertNotNull(unmarshalled); assertTrue(unmarshalled instanceof Capability); Capability result = (Capability) unmarshalled; // The Unmarshaller replaced automatically the DefaultInternationalString by a // SimpleInternationalString because it detected that there is only one locale. // Perform the same change in our expected result in order to allow comparison. cresult.setExplanation(new SimpleInternationalString(cresult.getExplanation().toString())); final ExtendedCapabilitiesType expCapabilities = expResult.getInspireExtendedCapabilities(); final ExtendedCapabilitiesType capabilities = result.getInspireExtendedCapabilities(); final ConformanceResult expConformity = expCapabilities.getConformity(); final ConformanceResult conformity = capabilities.getConformity(); final Citation expSpecification = expConformity.getSpecification(); final Citation specification = conformity.getSpecification(); final Extent expTemporal = expCapabilities.getTemporalRefererence(); final Extent temporal = capabilities.getTemporalRefererence(); final TemporalExtent expTemporalExtent = getSingleton(expTemporal.getTemporalElements()); final TemporalExtent temporalExtent = getSingleton(temporal.getTemporalElements()); final Period expExtentPeriod = (Period) expTemporalExtent.getExtent(); final Period extentPeriod = (Period) temporalExtent.getExtent(); assertEquals(expConformity.getExplanation().toString(), conformity.getExplanation().toString()); assertEquals(expSpecification.getCollectiveTitle(), specification.getCollectiveTitle()); assertEquals( expSpecification.getCitedResponsibleParties(), specification.getCitedResponsibleParties()); assertEquals(expSpecification.getAlternateTitles(), specification.getAlternateTitles()); assertEquals(expSpecification, specification); assertEquals(expConformity, conformity); assertEquals(expCapabilities.getResourceType(), capabilities.getResourceType()); assertEquals(expTemporal.getDescription(), temporal.getDescription()); assertEquals(expExtentPeriod.getBeginning().getDate(), extentPeriod.getBeginning().getDate()); assertEquals(expExtentPeriod.getEnding().getDate(), extentPeriod.getEnding().getDate()); if (expExtentPeriod.getClass() == extentPeriod.getClass()) { /* * The time period created by this test case is an instance of org.geotoolkit.temporal.object.DefaultPeriod * while the unmarshalled period is an instance of org.geotoolkit.gml.xml.v311.TimePeriodType. This is okay * since DefaultPeriod does not have JAXB annotation. But it prevents us to compare the objects further. */ assertEquals(expExtentPeriod, extentPeriod); assertEquals(expTemporalExtent, temporalExtent); assertEquals(expTemporal, temporal); assertEquals(expCapabilities, capabilities); assertEquals(expResult, result); } }
/** * Test simple Record Marshalling. * * @throws java.lang.Exception */ @Test public void inpsireExtensionmarshallingTest() throws Exception { ExtendedCapabilitiesType ext = new ExtendedCapabilitiesType(); NameFactory nameFactory = new DefaultNameFactory(); ObjectFactory factory = new ObjectFactory(); ext.setResourceType(ScopeCode.SERVICE); ext.setSpatialDataService(new ServiceType(nameFactory.createLocalName(null, "view"))); ext.setResourcelocator( new DefaultOnlineResource(URI.create("http://javacestpasdlamenthealeau.com"))); ext.setMetadataUrl(new DefaultOnlineResource(URI.create("http://javacestdurocknroll.com"))); DefaultExtent extent = new DefaultExtent(); DefaultTemporalExtent tempExt = new DefaultTemporalExtent(); NamedIdentifier periodName = new NamedIdentifier(Citations.CRS, "period"); final Map<String, Object> periodProp = new HashMap<>(); periodProp.put(IdentifiedObject.NAME_KEY, periodName); NamedIdentifier name = new NamedIdentifier(Citations.CRS, "period instant"); final Map<String, Object> properties = new HashMap<>(); properties.put(IdentifiedObject.NAME_KEY, name); DefaultPeriod period = new DefaultPeriod( periodProp, new DefaultInstant(properties, new Date(120000000)), new DefaultInstant(properties, new Date(120000001))); // period.setBegining(new DefaultInstant(properties, new DefaultPosition(new // Date(120000000)))); // period.setEnding(new DefaultInstant(properties, new DefaultPosition(new // Date(120000001)))); // org.apache.sis.internal.jaxb.gml.GMLAdapter.IDs.setUUID(period, "extent"); tempExt.setExtent(period); extent.setTemporalElements(Arrays.asList(tempExt)); ext.setTemporalRefererence(extent); DefaultConformanceResult cresult = new DefaultConformanceResult( Citations.EPSG, new DefaultInternationalString("see the referenced specification"), true); ext.setConformity(cresult); ResponsibleParty party = DefaultResponsibleParty.castOrCopy( Citations.EPSG.getCitedResponsibleParties().iterator().next()); ext.setMetadataPointOfContact(party); ext.setMetadataDate(new Date(82800000)); DefaultKeywords key = new DefaultKeywords(new SimpleInternationalString("something")); ext.setInpireKeywords(key); List<LanguageType> langs = new ArrayList<>(); langs.add(new LanguageType("FR")); langs.add(new LanguageType("EN", true)); LanguagesType languages = new LanguagesType(langs); ext.setLanguages(languages); ext.setCurrentLanguage("FR"); JAXBElement<ExtendedCapabilitiesType> jbExtendedCap = factory.createExtendedCapabilities(ext); Capability capability = new Capability(null, null, null, jbExtendedCap); StringWriter sw = new StringWriter(); marshaller.marshal(capability, sw); String result = sw.toString(); String expResult = "<wms:Capability xmlns:wms=\"http://www.opengis.net/wms\"" + " xmlns:gmd=\"http://www.isotc211.org/2005/gmd\"" + " xmlns:gco=\"http://www.isotc211.org/2005/gco\"" + " xmlns:srv=\"http://www.isotc211.org/2005/srv\"" + " xmlns:inspire_vs=\"http://inspira.europa.eu/networkservice/view/1.0\"" + " xmlns:gml=\"http://www.opengis.net/gml/3.2\">" + '\n' + " <inspire_vs:ExtendedCapabilities>" + '\n' + " <inspire_vs:Resourcelocator>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://javacestpasdlamenthealeau.com</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " </inspire_vs:Resourcelocator>" + '\n' + " <inspire_vs:MetadataUrl>" + '\n' + " <gmd:linkage>" + '\n' + " <gmd:URL>http://javacestdurocknroll.com</gmd:URL>" + '\n' + " </gmd:linkage>" + '\n' + " </inspire_vs:MetadataUrl>" + '\n' + " <inspire_vs:ResourceType>" + '\n' + " <gmd:MD_ScopeCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#MD_ScopeCode\" codeListValue=\"service\">Service</gmd:MD_ScopeCode>" + '\n' + " </inspire_vs:ResourceType>" + '\n' + " <inspire_vs:TemporalRefererence>" + '\n' + " <gmd:EX_Extent>" + '\n' + " <gmd:temporalElement>" + '\n' + " <gmd:EX_TemporalExtent>" + '\n' + " <gmd:extent>" + '\n' + " <gml:TimePeriod>" + '\n' + " <gml:beginPosition>1970-01-02T10:20:00+01:00</gml:beginPosition>" + '\n' + " <gml:endPosition>1970-01-02T10:20:00.001+01:00</gml:endPosition>" + '\n' + " </gml:TimePeriod>" + '\n' + " </gmd:extent>" + '\n' + " </gmd:EX_TemporalExtent>" + '\n' + " </gmd:temporalElement>" + '\n' + " </gmd:EX_Extent>" + '\n' + " </inspire_vs:TemporalRefererence>" + '\n' + " <inspire_vs:Conformity>" + '\n' + " <gmd:DQ_ConformanceResult>" + '\n' + " <gmd:specification>" + '\n' + " <gmd:CI_Citation>" + '\n' + " <gmd:title>" + '\n' + " <gco:CharacterString>EPSG Geodetic Parameter Dataset</gco:CharacterString>" + '\n' + " </gmd:title>" + '\n' + " <gmd:identifier>" + '\n' + " <gmd:RS_Identifier>" + '\n' + " <gmd:code>" + '\n' + " <gco:CharacterString>EPSG</gco:CharacterString>" + '\n' + " </gmd:code>" + '\n' + " <gmd:codeSpace>" + '\n' + " <gco:CharacterString>IOGP</gco:CharacterString>" + '\n' + " </gmd:codeSpace>" + '\n' + " </gmd:RS_Identifier>" + '\n' + " </gmd:identifier>" + '\n' + " <gmd:citedResponsibleParty>" + '\n' + " <gmd:CI_ResponsibleParty>" + '\n' + " <gmd:organisationName>" + '\n' + " <gco:CharacterString>International Association of Oil & Gas producers</gco:CharacterString>" + '\n' + " </gmd:organisationName>" + '\n' + " <gmd:role>" + '\n' + " <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\">Principal investigator</gmd:CI_RoleCode>" + '\n' + " </gmd:role>" + '\n' + " </gmd:CI_ResponsibleParty>" + '\n' + " </gmd:citedResponsibleParty>" + '\n' + " <gmd:presentationForm>" + '\n' + " <gmd:CI_PresentationFormCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode\" codeListValue=\"tableDigital\">Table digital</gmd:CI_PresentationFormCode>" + '\n' + " </gmd:presentationForm>" + '\n' + " </gmd:CI_Citation>" + '\n' + " </gmd:specification>" + '\n' + " <gmd:explanation>" + '\n' + " <gco:CharacterString>see the referenced specification</gco:CharacterString>" + '\n' + " </gmd:explanation>" + '\n' + " <gmd:pass>" + '\n' + " <gco:Boolean>true</gco:Boolean>" + '\n' + " </gmd:pass>" + '\n' + " </gmd:DQ_ConformanceResult>" + '\n' + " </inspire_vs:Conformity>" + '\n' + " <inspire_vs:MetadataPointOfContact>" + '\n' + " <gmd:CI_ResponsibleParty>" + '\n' + " <gmd:organisationName>" + '\n' + " <gco:CharacterString>International Association of Oil & Gas producers</gco:CharacterString>" + '\n' + " </gmd:organisationName>" + '\n' + " <gmd:role>" + '\n' + " <gmd:CI_RoleCode codeList=\"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_RoleCode\" codeListValue=\"principalInvestigator\">Principal investigator</gmd:CI_RoleCode>" + '\n' + " </gmd:role>" + '\n' + " </gmd:CI_ResponsibleParty>" + '\n' + " </inspire_vs:MetadataPointOfContact>" + '\n' + " <inspire_vs:MetadataDate>" + '\n' + " <gco:Date>1970-01-02</gco:Date>" + '\n' + " </inspire_vs:MetadataDate>" + '\n' + " <inspire_vs:SpatialDataService>" + '\n' + " <srv:serviceType>" + '\n' + " <gco:LocalName>view</gco:LocalName>" + '\n' + " </srv:serviceType>" + '\n' + " </inspire_vs:SpatialDataService>" + '\n' + " <inspire_vs:InpireKeywords>" + '\n' + " <gmd:keyword>" + '\n' + " <gco:CharacterString>something</gco:CharacterString>" + '\n' + " </gmd:keyword>" + '\n' + " </inspire_vs:InpireKeywords>" + '\n' + " <inspire_vs:Languages>" + '\n' + " <inspire_vs:Language>FR</inspire_vs:Language>" + '\n' + " <inspire_vs:Language default=\"true\">EN</inspire_vs:Language>" + '\n' + " </inspire_vs:Languages>" + '\n' + " <inspire_vs:currentLanguage>FR</inspire_vs:currentLanguage>" + '\n' + " </inspire_vs:ExtendedCapabilities>" + '\n' + "</wms:Capability>" + '\n'; // org.apache.sis.internal.jaxb.gml.GMLAdapter.IDs.removeUUID(period); assertXmlEquals(expResult, result, "http://www.w3.org/2000/xmlns:*"); }