Author: desruisseaux Date: Sun Dec 31 05:21:35 2017 New Revision: 1819717 URL: http://svn.apache.org/viewvc?rev=1819717&view=rev Log: Add a partial test case (not yet fully enabled). This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
The project at this revision can be built but is known to have test failure. Tests will pass only after we completed the port of all ISO 19115-3 work. Added: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java (with props) Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultConstraints.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/package-info.java Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultConstraints.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultConstraints.java?rev=1819717&r1=1819716&r2=1819717&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultConstraints.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/constraint/DefaultConstraints.java [UTF-8] Sun Dec 31 05:21:35 2017 @@ -61,7 +61,7 @@ import org.apache.sis.util.iso.Types; */ @SuppressWarnings("CloneableClassWithoutClone") // ModifiableMetadata needs shallow clones. @XmlType(name = "MD_Constraints_Type", propOrder = { - "useLimitation", + "useLimitations", "constraintApplicationScope", "graphic", "reference", Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java?rev=1819717&r1=1819716&r2=1819717&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java [UTF-8] Sun Dec 31 05:21:35 2017 @@ -76,7 +76,7 @@ import org.apache.sis.internal.util.Coll "language", // Legacy ISO 19115:2003 "characterSets", // Legacy ISO 19115:2003 "defaultLocale", // New in ISO 19115:2014 - "otherLocale", // New in ISO 19115:2014 + "otherLocales", // New in ISO 19115:2014 "topicCategory", "environmentDescription", "extent", Modified: sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/package-info.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/package-info.java?rev=1819717&r1=1819716&r2=1819717&view=diff ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/package-info.java [UTF-8] (original) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/package-info.java [UTF-8] Sun Dec 31 05:21:35 2017 @@ -120,6 +120,7 @@ @XmlJavaTypeAdapter(DS_InitiativeTypeCode.class), @XmlJavaTypeAdapter(EX_Extent.class), @XmlJavaTypeAdapter(MD_AggregateInformation.class), + @XmlJavaTypeAdapter(MD_AssociatedResource.class), @XmlJavaTypeAdapter(MD_BrowseGraphic.class), @XmlJavaTypeAdapter(MD_CharacterSetCode.class), @XmlJavaTypeAdapter(MD_Constraints.class), Added: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java URL: http://svn.apache.org/viewvc/sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java?rev=1819717&view=auto ============================================================================== --- sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java (added) +++ sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java [UTF-8] Sun Dec 31 05:21:35 2017 @@ -0,0 +1,510 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sis.metadata.iso; + +import java.util.Date; +import java.util.Locale; +import java.util.Arrays; +import java.util.Map; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.logging.LogRecord; +import java.net.URI; +import java.net.URISyntaxException; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import javax.xml.bind.Marshaller; +import javax.xml.bind.JAXBException; +import org.opengis.annotation.Obligation; +import org.opengis.util.RecordType; +import org.opengis.metadata.Datatype; +import org.opengis.metadata.citation.*; +import org.opengis.metadata.constraint.*; +import org.opengis.metadata.content.*; +import org.opengis.metadata.extent.*; +import org.opengis.metadata.identification.*; +import org.opengis.metadata.maintenance.*; +import org.opengis.metadata.spatial.*; +import org.apache.sis.metadata.iso.citation.*; +import org.apache.sis.metadata.iso.constraint.*; +import org.apache.sis.metadata.iso.content.*; +import org.apache.sis.metadata.iso.distribution.*; +import org.apache.sis.metadata.iso.extent.*; +import org.apache.sis.metadata.iso.identification.*; +import org.apache.sis.metadata.iso.maintenance.*; +import org.apache.sis.metadata.iso.spatial.*; +import org.apache.sis.util.iso.DefaultRecordSchema; +import org.apache.sis.util.iso.SimpleInternationalString; +import org.apache.sis.util.logging.WarningListener; +import org.apache.sis.measure.Units; +import org.apache.sis.xml.XML; +import org.apache.sis.xml.MarshallerPool; +import org.apache.sis.internal.jaxb.gmx.Anchor; +import org.apache.sis.internal.jaxb.LegacyNamespaces; +import org.apache.sis.internal.jaxb.metadata.replace.ReferenceSystemMetadata; +import org.apache.sis.test.XMLTestCase; +import org.junit.Test; + +import static org.junit.Assert.*; + + +/** + * Simple test cases for marshalling a {@link DefaultMetadata} object to an XML file. + * This class is used to test the ISO 19115-3 metadata standard implementation. + * + * @author Cullen Rombach (Image Matters) + * @version 1.0 + * @since 1.0 + * @module + */ +public final class MarshallingTest extends XMLTestCase implements WarningListener<Object> { + /** + * The marshaller used to handle marshalling the created DefaultMetadata object. + */ + private final Marshaller marshaller; + + /** + * The pool from which the marshaller is pulled. + */ + private final MarshallerPool pool; + + /** + * The output to which the metadata object will be marshaled. + */ + private final StringWriter output; + + /** + * Initializes a new test case. + * + * @throws JAXBException if an error occurred while preparing the marshaller. + */ + @SuppressWarnings("ThisEscapedInObjectConstruction") + public MarshallingTest() throws JAXBException { + output = new StringWriter(); + pool = getMarshallerPool(); + marshaller = pool.acquireMarshaller(); + marshaller.setProperty(XML.WARNING_LISTENER, this); + } + + /** + * Creates a metadata object to marshal. + */ + @SuppressWarnings("deprecation") + private DefaultMetadata metadata() throws URISyntaxException { + /* + * Some code are indented for readability and more local variable scopes. + */ + final DefaultMetadata md = new DefaultMetadata(); + { + // Metadata identifier + final DefaultIdentifier id = new DefaultIdentifier("fileIdentifier"); + id.setCodeSpace("fileIdentifierNamespace"); + md.setMetadataIdentifier(id); + } + // Languages + final Collection<Locale> languages = Arrays.asList(Locale.US, Locale.GERMANY); + md.setLanguages(languages); + + // Character Sets (character encoding) + final Collection<Charset> charSets = Collections.singleton(StandardCharsets.UTF_8); + md.setCharacterSets(charSets); + { + // Parent metadata + final DefaultCitation parent = new DefaultCitation("parentMetadata"); + final DefaultIdentifier parentId = new DefaultIdentifier("parentMetadata"); + parentId.setCodeSpace("parentMetadataCodeSpace"); + parent.getIdentifiers().add(parentId); + md.setParentMetadata(parent); + } + // mdb:metadataScope (hierarchyLevel and hierarchyLevelName in ISO 19139) + md.getMetadataScopes().add(new DefaultMetadataScope(ScopeCode.DATASET, "hierarchyLevelName")); + final DefaultOnlineResource onlineResource; + { + // Contact information for the parties. + final DefaultContact contact = new DefaultContact(); + contact.setPhones(Arrays.asList(new DefaultTelephone("555-867-5309", TelephoneType.VOICE), + new DefaultTelephone("555-555-5555", TelephoneType.FACSIMILE))); + { + { + // Address information + final DefaultAddress address = new DefaultAddress(); + address.setDeliveryPoints(Collections.singleton(new SimpleInternationalString("deliveryPoint"))); + address.getElectronicMailAddresses().add("t...@example.com"); + address.setCity(new SimpleInternationalString("city")); + address.setAdministrativeArea(new SimpleInternationalString("administrativeArea")); + address.setPostalCode("postalCode"); + address.setCountry(new SimpleInternationalString("country")); + contact.getAddresses().add(address); + } + // Online resources + onlineResource = new DefaultOnlineResource(); + onlineResource.setLinkage(new URI("http://example.com")); + onlineResource.setProtocol("protocol"); + onlineResource.setApplicationProfile("applicationProfile"); + onlineResource.setName(new SimpleInternationalString("name")); + onlineResource.setDescription(new SimpleInternationalString("description")); + onlineResource.setFunction(OnLineFunction.DOWNLOAD); + contact.getOnlineResources().add(onlineResource); + contact.setHoursOfService(Collections.singleton(new SimpleInternationalString("Weekdays 9:00 AM - 5:00 PM"))); + contact.setContactInstructions(new SimpleInternationalString("contactInstructions")); + contact.setContactType(new SimpleInternationalString("contactType")); + } + // Create some DefaultIndividuals + final DefaultIndividual individual = new DefaultIndividual("individualName", "positionName", null); + final DefaultIndividual individual2 = new DefaultIndividual("individualName2", "positionName2", contact); + final DefaultOrganisation org = new DefaultOrganisation("organisationName", null, individual, contact); + md.setContacts(Arrays.asList(new DefaultResponsibility(Role.POINT_OF_CONTACT, null, org), + new DefaultResponsibility(Role.POINT_OF_CONTACT, null, individual2))); + } + // Date info (date stamp in ISO 19139) + final Collection<CitationDate> dateInfo = Collections.singleton(new DefaultCitationDate(new Date(), DateType.CREATION)); + md.setDateInfo(dateInfo); + { + // Metadata standard + final DefaultCitation standard = new DefaultCitation("metadataStandardName"); + standard.setEdition(new SimpleInternationalString("metadataStandardVersion")); + md.getMetadataStandards().add(standard); + } + { + // Spatial Representation Info + final DefaultGeorectified georectified = new DefaultGeorectified(); + georectified.setNumberOfDimensions(2); + final DefaultDimension dim1 = new DefaultDimension(DimensionNameType.ROW, 7777); + final DefaultDimension dim2 = new DefaultDimension(DimensionNameType.COLUMN, 2233); + dim1.setResolution(10.0); + dim2.setResolution( 5.0); + georectified.setAxisDimensionProperties(Arrays.asList(dim1, dim2)); + georectified.setCellGeometry(CellGeometry.AREA); + georectified.setPointInPixel(PixelOrientation.UPPER_RIGHT); + md.getSpatialRepresentationInfo().add(georectified); + } + { + // Reference System Information + final ReferenceSystemMetadata refSystem = new ReferenceSystemMetadata(); + final DefaultCitation cit = new DefaultCitation("refSystemCitationTitle"); + cit.setDates(dateInfo); + { + // Responsibilities + final DefaultOrganisation org = new DefaultOrganisation(); + org.setName(new SimpleInternationalString("orgName")); + cit.getCitedResponsibleParties().add(new DefaultResponsibility(Role.PUBLISHER, null, org)); + } + // Identifier + final DefaultIdentifier id = new DefaultIdentifier("refSystemCode"); + id.setAuthority(cit); + id.setCodeSpace("refSystemCodeSpace"); + id.setVersion("1.0"); + id.setDescription(new SimpleInternationalString("refSystemDescription")); + refSystem.setName(id); + md.getReferenceSystemInfo().add(refSystem); + } + { + // Metadata extension information. + final DefaultMetadataExtensionInformation extension = new DefaultMetadataExtensionInformation(); + extension.setExtensionOnLineResource(onlineResource); + final DefaultExtendedElementInformation elementInfo = new DefaultExtendedElementInformation(); + elementInfo.setName("extendedElementInfoName"); + elementInfo.setDefinition(new SimpleInternationalString("definition")); + elementInfo.setObligation(Obligation.MANDATORY); + elementInfo.setCondition(new SimpleInternationalString("condition")); + elementInfo.setDataType(Datatype.META_CLASS); + elementInfo.setMaximumOccurrence(1); + elementInfo.setDomainValue(new SimpleInternationalString("domainValue")); + elementInfo.setShortName("shortName"); + elementInfo.setDomainCode(1234); + elementInfo.setParentEntity(Collections.singleton("parentEntity")); + elementInfo.setRule(new SimpleInternationalString("rule")); + elementInfo.setRationale(new SimpleInternationalString("rationale")); + extension.getExtendedElementInformation().add(elementInfo); + md.getMetadataExtensionInfo().add(extension); + } + // Data identification info + final DefaultDataIdentification dataId = new DefaultDataIdentification(); + dataId.setAbstract(new SimpleInternationalString("abstract")); + dataId.setPurpose(new SimpleInternationalString("purpose")); + final Collection<Extent> extents; + { + // Extents + final DefaultExtent extent = new DefaultExtent(); + extent.setDescription(new SimpleInternationalString("description")); + { + // Bounding box + final DefaultGeographicBoundingBox boundingBox = new DefaultGeographicBoundingBox(); + boundingBox.setInclusion(true); + boundingBox.setNorthBoundLatitude(11.11); + boundingBox.setEastBoundLongitude(11.11); + boundingBox.setSouthBoundLatitude(11.11); + boundingBox.setWestBoundLongitude(11.11); + extent.getGeographicElements().add(boundingBox); + } + final DefaultTemporalExtent tempExtent = new DefaultTemporalExtent(); + extent.getTemporalElements().add(tempExtent); + extents = Collections.singleton(extent); + dataId.setExtents(extents); + } + // Resource constraints + final Collection<Constraints> resourceConstraints; + final Collection<Citation> emptyCitations = Collections.singleton(new DefaultCitation()); + { + DefaultConstraints constraint = new DefaultConstraints(); + constraint.getResponsibleParties().add(new DefaultResponsibility()); + constraint.setReferences(emptyCitations); + final DefaultBrowseGraphic graphic = new DefaultBrowseGraphic(new URI("filename.png")); + graphic.setFileDescription(new SimpleInternationalString("description")); + graphic.setFileType("fileType"); + graphic.getImageConstraints().add(new DefaultConstraints()); + graphic.getLinkages().add(new DefaultOnlineResource()); + constraint.getGraphics().add(graphic); + constraint.setUseLimitations(Collections.singleton(new SimpleInternationalString("useLimitation"))); + + // Releasability + final DefaultReleasability releasability = new DefaultReleasability(); + releasability.setStatement(new SimpleInternationalString("statement")); + constraint.setReleasability(releasability); + constraint.setConstraintApplicationScope(new DefaultScope(ScopeCode.APPLICATION)); + resourceConstraints = Collections.singleton(constraint); + dataId.setResourceConstraints(resourceConstraints); + } + // Points of contact + final Collection<Responsibility> pocs = Collections.singleton(new DefaultResponsibility()); + dataId.setPointOfContacts(pocs); + dataId.getSpatialRepresentationTypes().add(SpatialRepresentationType.GRID); + { + // Spatial resolution + final DefaultResolution resolution = new DefaultResolution(); + resolution.setDistance(56777.0); + dataId.getSpatialResolutions().add(resolution); + } + dataId.setTopicCategories(Arrays.asList(TopicCategory.OCEANS, TopicCategory.FARMING)); + dataId.getStatus().add(Progress.ACCEPTED); + + // Citation + final DefaultCitation cit = new DefaultCitation(); + cit.setTitle(new SimpleInternationalString("citationTitle")); + cit.setEdition(new SimpleInternationalString("edition")); + cit.setEditionDate(new Date()); + cit.setCollectiveTitle(new SimpleInternationalString("collectiveTitle")); + cit.setAlternateTitles(Arrays.asList(new SimpleInternationalString("alternateTitle"), + new Anchor(new URI("http://example.com"), "alternateTitle"))); + cit.getDates().add(new DefaultCitationDate(new Date(), DateType.CREATION)); + dataId.setCitation(cit); + dataId.setTemporalResolutions(Collections.emptySet()); // TODO + final Collection<MaintenanceInformation> resourceMaintenances; + { + // Resource maintenance + DefaultMaintenanceInformation maintenanceInfo = new DefaultMaintenanceInformation(); + maintenanceInfo.setMaintenanceAndUpdateFrequency(MaintenanceFrequency.ANNUALLY); + maintenanceInfo.getMaintenanceDates().add(new DefaultCitationDate(new Date(), DateType.NEXT_UPDATE)); + final DefaultScope maintenanceScope = new DefaultScope(); + maintenanceScope.setLevel(ScopeCode.APPLICATION); + { + // Scope level descriptions + final DefaultScopeDescription scopeDescription = new DefaultScopeDescription(); + scopeDescription.setDataset("dataset"); + maintenanceScope.getLevelDescription().add(scopeDescription); + } + maintenanceInfo.getMaintenanceScopes().add(maintenanceScope); + resourceMaintenances = Collections.singleton(maintenanceInfo); + dataId.setResourceMaintenances(resourceMaintenances); + } + { + // Resource format (MD_Format) + final DefaultFormat resourceFormat = new DefaultFormat(); + resourceFormat.setName(new SimpleInternationalString("name")); + resourceFormat.setAmendmentNumber(new SimpleInternationalString("amendmentNumber")); + resourceFormat.setVersion(new SimpleInternationalString("version")); + resourceFormat.setSpecification(new SimpleInternationalString("specification")); + resourceFormat.setFileDecompressionTechnique(new SimpleInternationalString("decompressionTechnique")); + dataId.getResourceFormats().add(resourceFormat); + } + final Collection<Keywords> descriptiveKeywords; + { + // Descriptive keywords (MD_Keywords) + final DefaultKeywords keywords = new DefaultKeywords(); + keywords.setType(KeywordType.THEME); + keywords.setThesaurusName(new DefaultCitation()); + final DefaultKeywordClass keywordClass = new DefaultKeywordClass(); + keywordClass.setClassName(new SimpleInternationalString("name")); + keywords.setKeywordClass(keywordClass); + keywords.setKeywords(Arrays.asList(new SimpleInternationalString("keyword1"), + new SimpleInternationalString("keyword2"))); + descriptiveKeywords = Collections.singleton(keywords); + dataId.setDescriptiveKeywords(descriptiveKeywords); + } + { + // Resource specific usage + final DefaultUsage usage = new DefaultUsage(); + usage.setSpecificUsage(new SimpleInternationalString("specificUsage")); + usage.setUsageDate(new Date()); + usage.setResponses(Collections.singleton(new SimpleInternationalString("response"))); + usage.setAdditionalDocumentation(emptyCitations); + usage.setIdentifiedIssues(emptyCitations); + usage.setUserDeterminedLimitations(new SimpleInternationalString("userDeterminedLimitations")); + final DefaultResponsibility resp = new DefaultResponsibility(); + usage.getUserContactInfo().add(resp); + dataId.getResourceSpecificUsages().add(usage); + } + final Collection<AssociatedResource> associatedResources; + { + // Associated resources (AggregationInfo in 19139) + final DefaultAssociatedResource associatedResource = new DefaultAssociatedResource(); + DefaultCitation associatedResourceCitation = new DefaultCitation(); + associatedResource.setName(associatedResourceCitation); + associatedResource.setAssociationType(AssociationType.DEPENDENCY); + associatedResource.setInitiativeType(InitiativeType.EXPERIMENT); + associatedResources = Collections.singleton(associatedResource); + dataId.setAssociatedResources(associatedResources); + } + dataId.setLanguages(languages); // Locales (ISO 19115-3) a.k.a Languages and CharacterSets (ISO 19139) + dataId.setCharacterSets(charSets); + dataId.setEnvironmentDescription (new SimpleInternationalString("environmentDescription")); + dataId.setSupplementalInformation(new SimpleInternationalString("supplementalInformation")); + { + // Service identification info + final DefaultServiceIdentification serviceId = new DefaultServiceIdentification(); + serviceId.setCitation(cit); + serviceId.setAbstract(new SimpleInternationalString("abstract")); + serviceId.setPointOfContacts(pocs); + serviceId.setExtents(extents); + serviceId.setResourceMaintenances(resourceMaintenances); + serviceId.setDescriptiveKeywords(descriptiveKeywords); + serviceId.setResourceConstraints(resourceConstraints); + serviceId.setAssociatedResources(associatedResources); + serviceId.setServiceTypeVersions(Collections.singleton("serviceTypeVersion")); + // TODO: Coupled resources + final DefaultCoupledResource coupledResource = new DefaultCoupledResource(); + serviceId.getCoupledResources().add(coupledResource); + serviceId.setCouplingType(CouplingType.TIGHT); + final DefaultOperationMetadata operationMetadata = new DefaultOperationMetadata(); + { + operationMetadata.setOperationName("operationName"); + operationMetadata.setOperationDescription(new SimpleInternationalString("operationDescription")); + operationMetadata.setInvocationName(new SimpleInternationalString("invocationName")); + operationMetadata.getDistributedComputingPlatforms().add(DistributedComputingPlatform.JAVA); + operationMetadata.getConnectPoints().add(new DefaultOnlineResource()); + // Parameters are unchanged according to crosswalk. Don't need to do this one. + } + serviceId.getContainsOperations().add(operationMetadata); + serviceId.getOperatesOn().add(dataId); + md.setIdentificationInfo(Arrays.asList(dataId, serviceId)); + } + { + // Content info + final DefaultCoverageDescription coverageDescription; + { + coverageDescription = new DefaultCoverageDescription(); + // Attribute description TODO: this doesn't work properly. + final DefaultRecordSchema schema = new DefaultRecordSchema(null, null, "MySchema"); + final Map<CharSequence,Class<?>> members = new LinkedHashMap<>(); + members.put("city", String.class); + members.put("latitude", Double.class); + members.put("longitude", Double.class); + final RecordType recordType = schema.createRecordType("MyRecordType", members); + coverageDescription.setAttributeDescription(recordType); + { + // Attribute group + final DefaultAttributeGroup attributeGroup = new DefaultAttributeGroup(); + attributeGroup.getContentTypes().add(CoverageContentType.AUXILLARY_INFORMATION); + // Attributes + final DefaultRangeDimension rangeDimension = new DefaultRangeDimension(); + rangeDimension.setDescription(new SimpleInternationalString("descriptor")); + // TODO: Sequence identifier + /*DefaultMemberName memberName = DefaultNameFactory.createMemberName(NameSpace, CharSequence, TypeName); + rangeDimension.setSequenceIdentifier(memberName);*/ + // Names + rangeDimension.getNames().add(new DefaultIdentifier()); + final DefaultSampleDimension sampleDimension = new DefaultSampleDimension(); + sampleDimension.setDescription(new SimpleInternationalString("descriptor")); + sampleDimension.setMinValue(11.11); + sampleDimension.setMaxValue(22.22); + sampleDimension.setUnits(Units.FAHRENHEIT); + sampleDimension.setScaleFactor(1.0); + final Collection<RangeDimension> rangeDimensions = Arrays.asList(rangeDimension, sampleDimension); + attributeGroup.setAttributes(rangeDimensions); + coverageDescription.setDimensions(rangeDimensions); + // coverageDescription.getAttributeGroups().add(attributeGroup); + } + } + // Feature Catalogue Description + final DefaultFeatureCatalogueDescription featureCatalogueDescription = new DefaultFeatureCatalogueDescription(); + md.setContentInfo(Arrays.asList(coverageDescription, featureCatalogueDescription)); + } + return md; + } + + /** + * Tests marshalling of an ISO 19139:2007 document (based on ISO 19115:2003 model). + * + * @throws URISyntaxException if an error occurred while creating the metadata object. + * @throws JAXBException if an error occurred while marshalling the document. + */ + @Test + public void testLegacySchema() throws URISyntaxException, JAXBException { + final DefaultMetadata md = metadata(); + marshaller.setProperty(XML.METADATA_VERSION, LegacyNamespaces.ISO_19139); + marshaller.marshal(md, output); + recycle(); + } + + /** + * Tests marshalling of a document based on ISO 19115:2014 model. + * + * @throws URISyntaxException if an error occurred while creating the metadata object. + * @throws JAXBException if an error occurred while marshalling the document. + */ + @Test + public void testCurrentSchema() throws JAXBException, URISyntaxException { + final DefaultMetadata md = metadata(); + marshaller.setProperty(XML.METADATA_VERSION, LegacyNamespaces.ISO_19115_3); + marshaller.marshal(md, output); + recycle(); + } + + /** + * Invoked only on success, for recycling the marshaller. + */ + private void recycle() { + pool.recycle(marshaller); + } + + /** + * For internal {@code DefaultMetadata} usage. + * + * @return {@code Object.class}. + */ + @Override + public Class<Object> getSourceClass() { + return Object.class; + } + + /** + * Invoked when a warning occurred while marshalling a test XML fragment. + * The only expected warning message is "Can't find resource for bundle + * {@code java.util.PropertyResourceBundle}, key {@code MD_DimensionNameTypeCode.row}". + * + * @param source ignored. + * @param warning the warning. + */ + @Override + public void warningOccured(final Object source, final LogRecord warning) { + final String message = warning.getMessage(); + assertNotNull(message, message.contains("MD_DimensionNameTypeCode.row")); + assertNull("Expected a warning message without parameters.", warning.getParameters()); + } +} Propchange: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sis/branches/ISO-19115-3/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain;charset=UTF-8