Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultBand.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultBand.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultBand.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultBand.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -22,17 +22,19 @@ import javax.xml.bind.annotation.XmlElem
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.metadata.content.Band;
 import org.opengis.metadata.content.BandDefinition;
 import org.opengis.metadata.content.PolarizationOrientation;
 import org.opengis.metadata.content.TransferFunctionType;
-import org.apache.sis.xml.Namespaces;
 import org.apache.sis.measure.ValueRange;
+import org.apache.sis.internal.jaxb.gco.GO_Real;
+import org.apache.sis.internal.jaxb.gco.UnitAdapter;
 
 import static 
org.apache.sis.internal.metadata.MetadataUtilities.ensurePositive;
 
 // Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -58,17 +60,18 @@ import static org.opengis.annotation.Spe
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @author  Rémi Maréchal (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "MD_Band_Type", propOrder = {
+    "boundMax",
+    "boundMin",
+    "boundUnits",
     "peakResponse",
-    "bitsPerValue",
     "toneGradation",
-    "scaleFactor",
-    "offset",
     "bandBoundaryDefinition",
     "nominalSpatialResolution",
     "transferFunctionType",
@@ -197,7 +200,8 @@ public class DefaultBand extends Default
      * @since 0.5
      */
     @ValueRange(minimum = 0)
-/// @XmlElement(name = "boundMin")
+    @XmlElement(name = "boundMin")
+    @XmlJavaTypeAdapter(GO_Real.Since2014.class)
     @UML(identifier="boundMin", obligation=OPTIONAL, specification=ISO_19115)
     public Double getBoundMin() {
         return boundMin;
@@ -228,7 +232,8 @@ public class DefaultBand extends Default
      * @since 0.5
      */
     @ValueRange(minimum = 0)
-/// @XmlElement(name = "boundMax")
+    @XmlElement(name = "boundMax")
+    @XmlJavaTypeAdapter(GO_Real.Since2014.class)
     @UML(identifier="boundMax", obligation=OPTIONAL, specification=ISO_19115)
     public Double getBoundMax() {
         return boundMax;
@@ -258,7 +263,8 @@ public class DefaultBand extends Default
      *
      * @see org.apache.sis.measure.Units#NANOMETRE
      */
-/// @XmlElement(name = "boundUnits")
+    @XmlElement(name = "boundUnits")
+    @XmlJavaTypeAdapter(UnitAdapter.Since2014.class)
     @UML(identifier="boundUnits", obligation=OPTIONAL, specification=ISO_19115)
     public Unit<Length> getBoundUnits() {
         return boundUnits;
@@ -282,7 +288,7 @@ public class DefaultBand extends Default
      * @return criterion for defining maximum and minimum wavelengths, or 
{@code null}.
      */
     @Override
-    @XmlElement(name = "bandBoundaryDefinition", namespace = Namespaces.GMI)
+    @XmlElement(name = "bandBoundaryDefinition")
     public BandDefinition getBandBoundaryDefinition() {
         return bandBoundaryDefinition;
     }
@@ -357,24 +363,6 @@ public class DefaultBand extends Default
     }
 
     /**
-     * {@inheritDoc}
-     */
-    @Override
-    @ValueRange(minimum = 1)
-    @XmlElement(name = "bitsPerValue")
-    public Integer getBitsPerValue() {
-        return super.getBitsPerValue();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setBitsPerValue(final Integer newValue) {
-        super.setBitsPerValue(newValue);
-    }
-
-    /**
      * Returns the number of discrete numerical values in the grid data.
      *
      * @return number of discrete numerical values in the grid data, or {@code 
null} if none.
@@ -399,45 +387,14 @@ public class DefaultBand extends Default
     }
 
     /**
-     * {@inheritDoc}
-     */
-    @Override
-    @XmlElement(name = "scaleFactor")
-    public Double getScaleFactor() {
-        return super.getScaleFactor();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setScaleFactor(final Double newValue) {
-        super.setScaleFactor(newValue);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    @XmlElement(name = "offset")
-    public Double getOffset() {
-        return super.getOffset();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setOffset(final Double newValue) {
-        super.setOffset(newValue);
-    }
-
-    /**
-     * {@inheritDoc}
+     * Returns the smallest distance between which separate points can be 
distinguished,
+     * as specified in instrument design.
+     *
+     * @return {@inheritDoc}
      */
     @Override
     @ValueRange(minimum = 0, isMinIncluded = false)
-    @XmlElement(name = "nominalSpatialResolution", namespace = Namespaces.GMI)
+    @XmlElement(name = "nominalSpatialResolution")
     public Double getNominalSpatialResolution() {
         return super.getNominalSpatialResolution();
     }
@@ -451,10 +408,12 @@ public class DefaultBand extends Default
     }
 
     /**
-     * {@inheritDoc}
+     * Returns type of transfer function to be used when scaling a physical 
value for a given element.
+     *
+     * @return {@inheritDoc}
      */
     @Override
-    @XmlElement(name = "transferFunctionType", namespace = Namespaces.GMI)
+    @XmlElement(name = "transferFunctionType")
     public TransferFunctionType getTransferFunctionType() {
         return super.getTransferFunctionType();
     }
@@ -473,7 +432,7 @@ public class DefaultBand extends Default
      * @return polarization of the radiation transmitted, or {@code null}.
      */
     @Override
-    @XmlElement(name = "transmittedPolarization", namespace = Namespaces.GMI)
+    @XmlElement(name = "transmittedPolarisation")
     public PolarizationOrientation getTransmittedPolarization() {
         return transmittedPolarization;
     }
@@ -494,7 +453,7 @@ public class DefaultBand extends Default
      * @return polarization of the radiation detected, or {@code null}.
      */
     @Override
-    @XmlElement(name = "detectedPolarization", namespace = Namespaces.GMI)
+    @XmlElement(name = "detectedPolarisation")
     public PolarizationOrientation getDetectedPolarization() {
         return detectedPolarization;
     }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultCoverageDescription.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultCoverageDescription.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultCoverageDescription.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultCoverageDescription.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -22,7 +22,7 @@ import javax.xml.bind.annotation.XmlType
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.metadata.Identifier;
 import org.opengis.metadata.content.CoverageContentType;
 import org.opengis.metadata.content.CoverageDescription;
@@ -30,9 +30,14 @@ import org.opengis.metadata.content.Imag
 import org.opengis.metadata.content.RangeDimension;
 import org.opengis.metadata.content.RangeElementDescription;
 import org.opengis.util.RecordType;
-import org.apache.sis.xml.Namespaces;
 import org.apache.sis.internal.metadata.Dependencies;
 import org.apache.sis.internal.metadata.LegacyPropertyAdapter;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.metadata.MD_Identifier;
+
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -56,15 +61,18 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "MD_CoverageDescription_Type", propOrder = {
     "attributeDescription",
-    "contentType",
-    "dimensions",
+    "processingLevelCode",          // New in ISO 19115:2014
+    "attributeGroup",               // Ibid.
+    "contentType",                  // Legacy ISO 19115:2003
+    "dimensions",                   // Ibid.
     "rangeElementDescriptions"
 })
 @XmlRootElement(name = "MD_CoverageDescription")
@@ -179,12 +187,15 @@ public class DefaultCoverageDescription
 
     /**
      * Returns an identifier for the level of processing that has been applied 
to the resource, or {@code null} if none.
+     * For {@linkplain DefaultImageDescription image descriptions}, this is 
the image distributor's code that identifies
+     * the level of radiometric and geometric processing that has been applied.
      *
      * @return identifier for the level of processing that has been applied to 
the resource, or {@code null} if none.
      *
      * @since 0.5
      */
-/// @XmlElement(name = "processingLevelCode")
+    @XmlElement(name = "processingLevelCode")
+    @XmlJavaTypeAdapter(MD_Identifier.Since2014.class)
     @UML(identifier="processingLevelCode", obligation=OPTIONAL, 
specification=ISO_19115)
     public Identifier getProcessingLevelCode() {
         return processingLevelCode;
@@ -214,7 +225,7 @@ public class DefaultCoverageDescription
      *
      * @since 0.5
      */
-/// @XmlElement(name = "attributeGroup")
+    // @XmlElement at the end of this class.
     @UML(identifier="attributeGroup", obligation=OPTIONAL, 
specification=ISO_19115)
     public Collection<DefaultAttributeGroup> getAttributeGroups() {
         return attributeGroups = nonNullCollection(attributeGroups, 
DefaultAttributeGroup.class);
@@ -246,22 +257,24 @@ public class DefaultCoverageDescription
      */
     @Override
     @Deprecated
-    @XmlElement(name = "contentType", required = true)
     @Dependencies("getAttributeGroups")
+    @XmlElement(name = "contentType", namespace = LegacyNamespaces.GMD)
     public CoverageContentType getContentType() {
         CoverageContentType type = null;
-        final Collection<DefaultAttributeGroup> groups = getAttributeGroups();
-        if (groups != null) {                                               // 
May be null on marshalling.
-            for (final DefaultAttributeGroup g : groups) {
-                final Collection<? extends CoverageContentType> contentTypes = 
g.getContentTypes();
-                if (contentTypes != null) {                                 // 
May be null on marshalling.
-                    for (final CoverageContentType t : contentTypes) {
-                        if (type == null) {
-                            type = t;
-                        } else {
-                            
LegacyPropertyAdapter.warnIgnoredExtraneous(CoverageContentType.class,
-                                    DefaultCoverageDescription.class, 
"getContentType");
-                            break;
+        if (FilterByVersion.LEGACY_METADATA.accept()) {
+            final Collection<DefaultAttributeGroup> groups = 
getAttributeGroups();
+            if (groups != null) {                                              
 // May be null on marshalling.
+                for (final DefaultAttributeGroup g : groups) {
+                    final Collection<? extends CoverageContentType> 
contentTypes = g.getContentTypes();
+                    if (contentTypes != null) {                                
 // May be null on marshalling.
+                        for (final CoverageContentType t : contentTypes) {
+                            if (type == null) {
+                                type = t;
+                            } else {
+                                
LegacyPropertyAdapter.warnIgnoredExtraneous(CoverageContentType.class,
+                                        DefaultCoverageDescription.class, 
"getContentType");
+                                break;
+                            }
                         }
                     }
                 }
@@ -309,9 +322,10 @@ public class DefaultCoverageDescription
      */
     @Override
     @Deprecated
-    @XmlElement(name = "dimension")
     @Dependencies("getAttributeGroups")
+    @XmlElement(name = "dimension", namespace = LegacyNamespaces.GMD)
     public final Collection<RangeDimension> getDimensions() {
+        if (!FilterByVersion.LEGACY_METADATA.accept()) return null;
         return new 
LegacyPropertyAdapter<RangeDimension,DefaultAttributeGroup>(getAttributeGroups())
 {
             /** Stores a legacy value into the new kind of value. */
             @Override protected DefaultAttributeGroup wrap(final 
RangeDimension value) {
@@ -357,7 +371,7 @@ public class DefaultCoverageDescription
      * @return description of the specific range elements of a coverage.
      */
     @Override
-    @XmlElement(name = "rangeElementDescription", namespace = Namespaces.GMI)
+    @XmlElement(name = "rangeElementDescription")
     public Collection<RangeElementDescription> getRangeElementDescriptions() {
         return rangeElementDescriptions = 
nonNullCollection(rangeElementDescriptions, RangeElementDescription.class);
     }
@@ -370,4 +384,28 @@ public class DefaultCoverageDescription
     public void setRangeElementDescriptions(final Collection<? extends 
RangeElementDescription> newValues) {
         rangeElementDescriptions = writeCollection(newValues, 
rangeElementDescriptions, RangeElementDescription.class);
     }
+
+
+
+
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////                                                                   
               ////////
+    ////////                               XML support with JAXB               
               ////////
+    ////////                                                                   
               ////////
+    ////////        The following methods are invoked by JAXB using reflection 
(even if       ////////
+    ////////        they are private) or are helpers for other methods invoked 
by JAXB.       ////////
+    ////////        Those methods can be safely removed if Geographic Markup 
Language         ////////
+    ////////        (GML) support is not needed.                               
               ////////
+    ////////                                                                   
               ////////
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Invoked by JAXB at both marshalling and unmarshalling time.
+     * This attribute has been added by ISO 19115:2014 standard.
+     * If (and only if) marshalling an older standard version, we omit this 
attribute.
+     */
+    @XmlElement(name = "attributeGroup")
+    private Collection<DefaultAttributeGroup> getAttributeGroup() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? 
getAttributeGroups() : null;
+    }
 }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureCatalogueDescription.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -21,13 +21,18 @@ import java.util.Collection;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.GenericName;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.content.FeatureCatalogueDescription;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.gmd.LocaleAdapter;
 import org.apache.sis.internal.metadata.Dependencies;
 import org.apache.sis.internal.metadata.LegacyPropertyAdapter;
 
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -54,16 +59,19 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "MD_FeatureCatalogueDescription_Type", propOrder = {
     "compliant",
-    "languages",
+    "locale",                       // New in ISO 19115:2014
+    "language",                     // Legacy ISO 19115:2003
     "includedWithDataset",
-    "featureTypes",
+    "featureTypesInfo",             // New in ISO 19115:2014. Actual name is 
"featureTypeInfo"
+    "featureTypes",                 // Legacy ISO 19115:2003
     "featureCatalogueCitations"
 })
 @XmlRootElement(name = "MD_FeatureCatalogueDescription")
@@ -186,7 +194,7 @@ public class DefaultFeatureCatalogueDesc
      * @return language(s) used within the catalogue.
      */
     @Override
-    @XmlElement(name = "language")
+    // @XmlElement at the end of this class.
     public Collection<Locale> getLanguages() {
         return languages = nonNullCollection(languages, Locale.class);
     }
@@ -206,7 +214,7 @@ public class DefaultFeatureCatalogueDesc
      * @return whether or not the feature catalogue is included with the 
resource.
      */
     @Override
-    @XmlElement(name = "includedWithDataset", required = true)
+    @XmlElement(name = "includedWithDataset")
     public boolean isIncludedWithDataset() {
         return includedWithDataset;
     }
@@ -233,6 +241,7 @@ public class DefaultFeatureCatalogueDesc
      *
      * @since 0.5
      */
+    // @XmlElement at the end of this class.
     @UML(identifier="featureTypes", obligation=OPTIONAL, 
specification=ISO_19115)
     public Collection<DefaultFeatureTypeInfo> getFeatureTypeInfo() {
         return featureTypes = nonNullCollection(featureTypes, 
DefaultFeatureTypeInfo.class);
@@ -263,9 +272,10 @@ public class DefaultFeatureCatalogueDesc
      */
     @Override
     @Deprecated
-    @XmlElement(name = "featureTypes")
     @Dependencies("getFeatureTypeInfo")
+    @XmlElement(name = "featureTypes", namespace = LegacyNamespaces.GMD)
     public final Collection<GenericName> getFeatureTypes() {
+        if (!FilterByVersion.LEGACY_METADATA.accept()) return null;
         return new 
LegacyPropertyAdapter<GenericName,DefaultFeatureTypeInfo>(getFeatureTypeInfo()) 
{
             /** Stores a legacy value into the new kind of value. */
             @Override protected DefaultFeatureTypeInfo wrap(final GenericName 
value) {
@@ -307,7 +317,7 @@ public class DefaultFeatureCatalogueDesc
      * @return bibliographic reference to one or more external feature 
catalogues.
      */
     @Override
-    @XmlElement(name = "featureCatalogueCitation", required = true)
+    @XmlElement(name = "featureCatalogueCitation")
     public Collection<Citation> getFeatureCatalogueCitations() {
         return featureCatalogueCitations = 
nonNullCollection(featureCatalogueCitations, Citation.class);
     }
@@ -320,4 +330,47 @@ public class DefaultFeatureCatalogueDesc
     public void setFeatureCatalogueCitations(final Collection<? extends 
Citation> newValues) {
         featureCatalogueCitations = writeCollection(newValues, 
featureCatalogueCitations, Citation.class);
     }
+
+
+
+
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////                                                                   
               ////////
+    ////////                               XML support with JAXB               
               ////////
+    ////////                                                                   
               ////////
+    ////////        The following methods are invoked by JAXB using reflection 
(even if       ////////
+    ////////        they are private) or are helpers for other methods invoked 
by JAXB.       ////////
+    ////////        Those methods can be safely removed if Geographic Markup 
Language         ////////
+    ////////        (GML) support is not needed.                               
               ////////
+    ////////                                                                   
               ////////
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Invoked by JAXB at both marshalling and unmarshalling time.
+     * This attribute has been added by ISO 19115:2014 standard.
+     * If (and only if) marshalling an older standard version, we omit this 
attribute.
+     */
+    @XmlElement(name = "featureTypes")
+    private Collection<DefaultFeatureTypeInfo> getFeatureTypesInfo() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? 
getFeatureTypeInfo() : null;
+    }
+
+    /**
+     * Returns the locale to marshal if the XML document is to be written
+     * according the new ISO 19115:2014 model.
+     */
+    @XmlElement(name = "locale")
+    private Collection<Locale> getLocale() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? getLanguages() : 
null;
+    }
+
+    /**
+     * Returns the locale to marshal if the XML document is to be written
+     * according the legacy ISO 19115:2003 model.
+     */
+    @XmlElement(name = "language", namespace = LegacyNamespaces.GMD)
+    @XmlJavaTypeAdapter(LocaleAdapter.class)
+    private Collection<Locale> getLanguage() {
+        return FilterByVersion.LEGACY_METADATA.accept() ? getLanguages() : 
null;
+    }
 }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureTypeInfo.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureTypeInfo.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureTypeInfo.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultFeatureTypeInfo.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -55,7 +55,7 @@ import static org.opengis.annotation.Spe
  *
  * @author  Rémi Maréchal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @version 1.0
  *
  * @see org.apache.sis.storage.FeatureNaming
  * @see org.apache.sis.feature.DefaultFeatureType
@@ -65,7 +65,7 @@ import static org.opengis.annotation.Spe
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @TitleProperty(name = "featureTypeName")
-@XmlType(name = "MD_FeatureTypeInfo", propOrder = {
+@XmlType(name = "MD_FeatureTypeInfo_Type", propOrder = {
     "featureTypeName",
     "featureInstanceCount"
 })

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultImageDescription.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultImageDescription.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultImageDescription.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultImageDescription.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -23,6 +23,8 @@ import javax.xml.bind.annotation.XmlRoot
 import org.opengis.metadata.Identifier;
 import org.opengis.metadata.content.ImageDescription;
 import org.opengis.metadata.content.ImagingCondition;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.measure.ValueRange;
 
 import static org.apache.sis.internal.metadata.MetadataUtilities.ensureInRange;
@@ -48,7 +50,7 @@ import static org.apache.sis.internal.me
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -59,7 +61,7 @@ import static org.apache.sis.internal.me
     "imagingCondition",
     "imageQualityCode",
     "cloudCoverPercentage",
-    "processingLevelCode",
+    "processingLevel",
     "compressionGenerationQuantity",
     "triangulationIndicator",
     "radiometricCalibrationDataAvailable",
@@ -328,29 +330,6 @@ public class DefaultImageDescription ext
     }
 
     /**
-     * Returns the image distributor's code that identifies the level of 
radiometric and geometric
-     * processing that has been applied.
-     *
-     * @return the level of radiometric and geometric processing that has been 
applied, or {@code null} if unspecified.
-     */
-    @Override
-    @XmlElement(name = "processingLevelCode")
-    public Identifier getProcessingLevelCode() {
-        return super.getProcessingLevelCode();
-    }
-
-    /**
-     * Sets the image distributor's code that identifies the level of 
radiometric and geometric
-     * processing that has been applied.
-     *
-     * @param  newValue  the new processing level code.
-     */
-    @Override
-    public void setProcessingLevelCode(final Identifier newValue) {
-        super.setProcessingLevelCode(newValue);
-    }
-
-    /**
      * Returns the count of the number of lossy compression cycles performed 
on the image.
      *
      * @return the number of lossy compression cycles performed on the image, 
or {@code null} if unspecified.
@@ -481,4 +460,37 @@ public class DefaultImageDescription ext
         checkWritePermission();
         lensDistortionInformationAvailable = newValue;
     }
+
+
+
+
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////                                                                   
               ////////
+    ////////                               XML support with JAXB               
               ////////
+    ////////                                                                   
               ////////
+    ////////        The following methods are invoked by JAXB using reflection 
(even if       ////////
+    ////////        they are private) or are helpers for other methods invoked 
by JAXB.       ////////
+    ////////        Those methods can be safely removed if Geographic Markup 
Language         ////////
+    ////////        (GML) support is not needed.                               
               ////////
+    ////////                                                                   
               ////////
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * An attribute which was defined in {@code ImageDescription} by ISO 
19115:2003,
+     * and which moved to the parent class in ISO 19115:2014 revision. We 
handle the
+     * two versions separately for proper attribute ordering, and for avoiding 
this
+     * attribute to be written for subtypes other than {@code 
ImageDescription}.
+     */
+    @XmlElement(name = "processingLevelCode", namespace = LegacyNamespaces.GMD)
+    private Identifier getProcessingLevel() {
+        return FilterByVersion.LEGACY_METADATA.accept() ? 
getProcessingLevelCode() : null;
+    }
+
+    /**
+     * Invoked by JAXB at unmarshalling time.
+     */
+    @SuppressWarnings("unused")
+    private void setProcessingLevel(final Identifier newValue) {
+        setProcessingLevelCode(newValue);
+    }
 }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeDimension.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeDimension.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeDimension.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeDimension.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -21,7 +21,7 @@ import javax.xml.bind.annotation.XmlType
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.MemberName;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.Identifier;
@@ -30,7 +30,12 @@ import org.opengis.metadata.content.Band
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.metadata.TitleProperty;
 import org.apache.sis.internal.metadata.Dependencies;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.gco.InternationalStringAdapter;
 
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -51,7 +56,8 @@ import static org.opengis.annotation.Spe
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @author  Rémi Maréchal (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -59,8 +65,9 @@ import static org.opengis.annotation.Spe
 @TitleProperty(name = "sequenceIdentifier")
 @XmlType(name = "MD_RangeDimension_Type", propOrder = {
     "sequenceIdentifier",
-    "descriptor",
-/// "names"
+    "description",          // New in ISO 19115:2014
+    "descriptor",           // Legacy ISO 19115:2003
+    "name"                  // New in ISO 19115:2014
 })
 @XmlRootElement(name = "MD_RangeDimension")
 @XmlSeeAlso(DefaultBand.class)
@@ -171,7 +178,8 @@ public class DefaultRangeDimension exten
      *
      * @since 0.5
      */
-/// @XmlElement(name = "description")
+    @XmlElement(name = "description")
+    @XmlJavaTypeAdapter(InternationalStringAdapter.Since2014.class)
     @UML(identifier="description", obligation=OPTIONAL, 
specification=ISO_19115)
     public InternationalString getDescription() {
         return description;
@@ -199,10 +207,10 @@ public class DefaultRangeDimension exten
      */
     @Override
     @Deprecated
-    @XmlElement(name = "descriptor")
     @Dependencies("getDescription")
+    @XmlElement(name = "descriptor", namespace = LegacyNamespaces.GMD)
     public InternationalString getDescriptor() {
-        return getDescription();
+        return FilterByVersion.LEGACY_METADATA.accept() ? getDescription() : 
null;
     }
 
     /**
@@ -226,7 +234,7 @@ public class DefaultRangeDimension exten
      *
      * @since 0.5
      */
-/// @XmlElement(name = "name")
+    // @XmlElement at the end of this class.
     @UML(identifier="name", obligation=OPTIONAL, specification=ISO_19115)
     public Collection<Identifier> getNames() {
         return names = nonNullCollection(names, Identifier.class);
@@ -242,4 +250,28 @@ public class DefaultRangeDimension exten
     public void setNames(final Collection<? extends Identifier> newValues) {
         names = writeCollection(newValues, names, Identifier.class);
     }
+
+
+
+
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////                                                                   
               ////////
+    ////////                               XML support with JAXB               
               ////////
+    ////////                                                                   
               ////////
+    ////////        The following methods are invoked by JAXB using reflection 
(even if       ////////
+    ////////        they are private) or are helpers for other methods invoked 
by JAXB.       ////////
+    ////////        Those methods can be safely removed if Geographic Markup 
Language         ////////
+    ////////        (GML) support is not needed.                               
               ////////
+    ////////                                                                   
               ////////
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Invoked by JAXB at both marshalling and unmarshalling time.
+     * This attribute has been added by ISO 19115:2014 standard.
+     * If (and only if) marshalling an older standard version, we omit this 
attribute.
+     */
+    @XmlElement(name = "name")
+    private Collection<Identifier> getName() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? getNames() : null;
+    }
 }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeElementDescription.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeElementDescription.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeElementDescription.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultRangeElementDescription.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -25,7 +25,6 @@ import org.opengis.util.InternationalStr
 import org.opengis.metadata.content.RangeElementDescription;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.metadata.TitleProperty;
-import org.apache.sis.xml.Namespaces;
 
 
 /**
@@ -48,7 +47,7 @@ import org.apache.sis.xml.Namespaces;
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -56,10 +55,10 @@ import org.apache.sis.xml.Namespaces;
 @TitleProperty(name = "name")
 @XmlType(name = "MI_RangeElementDescription_Type", propOrder = {
     "name",
-    "definition"/*,
-    "rangeElements"*/ // TODO: not yet supported.
+    "definition",
+    "rangeElements"
 })
-@XmlRootElement(name = "MI_RangeElementDescription", namespace = 
Namespaces.GMI)
+@XmlRootElement(name = "MI_RangeElementDescription")
 public class DefaultRangeElementDescription extends ISOMetadata implements 
RangeElementDescription {
     /**
      * Serial number for inter-operability with different versions.
@@ -136,7 +135,7 @@ public class DefaultRangeElementDescript
      * @return designation associated with a set of range elements, or {@code 
null}.
      */
     @Override
-    @XmlElement(name = "name", namespace = Namespaces.GMI, required = true)
+    @XmlElement(name = "name", required = true)
     public InternationalString getName() {
         return name;
     }
@@ -157,7 +156,7 @@ public class DefaultRangeElementDescript
      * @return description of a set of specific range elements, or {@code 
null}.
      */
     @Override
-    @XmlElement(name = "definition", namespace = Namespaces.GMI, required = 
true)
+    @XmlElement(name = "definition", required = true)
     public InternationalString getDefinition() {
         return definition;
     }
@@ -181,7 +180,7 @@ public class DefaultRangeElementDescript
      * @todo implements {@link Record} in order to use the annotation.
      */
     @Override
-    //@XmlElement(name = "rangeElement", namespace = Namespaces.GMI, required 
= true)
+    @XmlElement(name = "rangeElement", required = true)
     public Collection<Record> getRangeElements() {
         return rangeElements = nonNullCollection(rangeElements, Record.class);
     }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultSampleDimension.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultSampleDimension.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultSampleDimension.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/DefaultSampleDimension.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -21,12 +21,17 @@ import javax.xml.bind.annotation.XmlElem
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.opengis.metadata.content.Band;
 import org.opengis.metadata.content.CoverageContentType;
 import org.opengis.metadata.content.TransferFunctionType;
 import org.opengis.util.Record;
 import org.opengis.util.RecordType;
-import org.opengis.metadata.content.Band;
 import org.apache.sis.measure.ValueRange;
+import org.apache.sis.internal.jaxb.gco.GO_Real;
+import org.apache.sis.internal.jaxb.gco.GO_Integer;
+import org.apache.sis.internal.jaxb.gco.GO_Record;
+import org.apache.sis.internal.jaxb.gco.GO_RecordType;
 
 import static 
org.apache.sis.internal.metadata.MetadataUtilities.ensurePositive;
 
@@ -64,7 +69,8 @@ import static org.opengis.annotation.Spe
  *
  * @author  Rémi Maréchal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.5
  * @module
  */
@@ -73,14 +79,16 @@ import static org.opengis.annotation.Spe
     "maxValue",
     "minValue",
     "units",
-/// "scaleFactor",
-/// "offset",
-/// "meanValue",
-/// "numberOfValues",
-/// "standardDeviation",
-/// "otherPropertyType",
-/// "otherProperty",
-/// "bitsPerValue"
+
+    // New in ISO 19115-3
+    "scaleFactor",
+    "offset",
+    "meanValue",
+    "numberOfValues",
+    "standardDeviation",
+    "otherPropertyType",
+    "otherProperty",
+    "bitsPerValue"
 })
 @XmlRootElement(name = "MD_SampleDimension")
 @XmlSeeAlso({DefaultBand.class, DefaultRangeDimension.class})
@@ -230,7 +238,8 @@ public class DefaultSampleDimension exte
      * @return the number of values used in a thematic classification 
resource, or {@code null} if none.
      */
     @ValueRange(minimum = 0)
-/// @XmlElement(name = "numberOfValues")
+    @XmlElement(name = "numberOfValues")
+    @XmlJavaTypeAdapter(GO_Integer.Since2014.class)
     @UML(identifier="numberOfValues", obligation=OPTIONAL, 
specification=ISO_19115)
     public Integer getNumberOfValues() {
         return numberOfValues;
@@ -296,7 +305,8 @@ public class DefaultSampleDimension exte
      *
      * @return the mean value of data values in each dimension included in the 
resource, or {@code null} if none.
      */
-/// @XmlElement(name = "meanValue")
+    @XmlElement(name = "meanValue")
+    @XmlJavaTypeAdapter(GO_Real.Since2014.class)
     @UML(identifier="meanValue", obligation=OPTIONAL, specification=ISO_19115)
     public Double getMeanValue() {
         return meanValue;
@@ -317,7 +327,8 @@ public class DefaultSampleDimension exte
      *
      * @return standard deviation of data values in each dimension included in 
the resource, or {@code null} if none.
      */
-/// @XmlElement(name = "standardDeviation")
+    @XmlElement(name = "standardDeviation")
+    @XmlJavaTypeAdapter(GO_Real.Since2014.class)
     @UML(identifier="standardDeviation", obligation=OPTIONAL, 
specification=ISO_19115)
     public Double getStandardDeviation() {
         return standardDeviation;
@@ -359,7 +370,7 @@ public class DefaultSampleDimension exte
      *
      * @return scale factor which has been applied to the cell value, or 
{@code null} if none.
      */
-/// @XmlElement(name = "scaleFactor")
+    @XmlElement(name = "scaleFactor")
     @UML(identifier="scaleFactor", obligation=OPTIONAL, 
specification=ISO_19115)
     public Double getScaleFactor() {
         return scaleFactor;
@@ -380,7 +391,7 @@ public class DefaultSampleDimension exte
      *
      * @return the physical value corresponding to a cell value of zero, or 
{@code null} if none.
      */
-/// @XmlElement(name = "offset")
+    @XmlElement(name = "offset")
     @UML(identifier="offset", obligation=OPTIONAL, specification=ISO_19115)
     public Double getOffset() {
         return offset;
@@ -399,6 +410,12 @@ public class DefaultSampleDimension exte
     /**
      * Returns type of transfer function to be used when scaling a physical 
value for a given element.
      *
+     * <div class="note"><b>Note on XML marshalling:</b>
+     * ISO 19115-2 defines this property in {@linkplain DefaultBand a subtype} 
for historical reasons.
+     * Apache SIS moves this property up in the hierarchy since this property 
can apply to any sample dimension,
+     * not only the measurements in the electromagnetic spectrum. However this 
property will not appear in XML
+     * documents unless this {@code SampleDimension} is actually a {@code 
Band}.</div>
+     *
      * @return type of transfer function, or {@code null}.
      */
     public TransferFunctionType getTransferFunctionType() {
@@ -423,7 +440,7 @@ public class DefaultSampleDimension exte
      *         for the value in each band of each pixel, or {@code null} if 
none.
      */
     @ValueRange(minimum = 1)
-/// @XmlElement(name = "bitsPerValues")
+    @XmlElement(name = "bitsPerValue")
     @UML(identifier="bitsPerValue", obligation=OPTIONAL, 
specification=ISO_19115)
     public Integer getBitsPerValue() {
         return bitsPerValue;
@@ -447,6 +464,12 @@ public class DefaultSampleDimension exte
      * Returns the smallest distance between which separate points can be 
distinguished,
      * as specified in instrument design.
      *
+     * <div class="note"><b>Note on XML marshalling:</b>
+     * ISO 19115-2 defines this property in {@linkplain DefaultBand a subtype} 
for historical reasons.
+     * Apache SIS moves this property up in the hierarchy since this property 
can apply to any sample dimension,
+     * not only the measurements in the electromagnetic spectrum. However this 
property will not appear in XML
+     * documents unless this {@code SampleDimension} is actually a {@code 
Band}.</div>
+     *
      * @return smallest distance between which separate points can be 
distinguished, or {@code null}.
      */
     @ValueRange(minimum = 0, isMinIncluded = false)
@@ -473,7 +496,8 @@ public class DefaultSampleDimension exte
      *
      * @return type of other attribute description, or {@code null} if none.
      */
-/// @XmlElement(name = "otherPropertyType")
+    @XmlElement(name = "otherPropertyType")
+    @XmlJavaTypeAdapter(GO_RecordType.Since2014.class)
     @UML(identifier="otherPropertyType", obligation=OPTIONAL, 
specification=ISO_19115)
     public RecordType getOtherPropertyType() {
         return otherPropertyType;
@@ -495,7 +519,8 @@ public class DefaultSampleDimension exte
      *
      * @return instance of other/attributeType that defines attributes, or 
{@code null} if none.
      */
-/// @XmlElement(name = "otherProperty")
+    @XmlElement(name = "otherProperty")
+    @XmlJavaTypeAdapter(GO_Record.Since2014.class)
     @UML(identifier="otherProperty", obligation=OPTIONAL, 
specification=ISO_19115)
     public Record getOtherProperty() {
         return otherProperty;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/package-info.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/package-info.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/package-info.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/content/package-info.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -80,20 +80,31 @@
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
-@XmlSchema(location=Schemas.METADATA_XSD, 
elementFormDefault=XmlNsForm.QUALIFIED, namespace=Namespaces.GMD, xmlns = {
-    @XmlNs(prefix = "gmi", namespaceURI = Namespaces.GMI),
-    @XmlNs(prefix = "gmd", namespaceURI = Namespaces.GMD),
-    @XmlNs(prefix = "gco", namespaceURI = Namespaces.GCO),
-    @XmlNs(prefix = "xsi", namespaceURI = Namespaces.XSI)
+@XmlSchema(location="http://standards.iso.org/iso/19115/-3/mrc/1.0/mrc.xsd";,
+           elementFormDefault=XmlNsForm.QUALIFIED, namespace=Namespaces.MRC,
+           xmlns = {
+                @XmlNs(prefix = "mrc", namespaceURI = Namespaces.MRC),      // 
Metadata for Resource Content
+                @XmlNs(prefix = "lan", namespaceURI = Namespaces.LAN),      // 
Language localization
+                @XmlNs(prefix = "mcc", namespaceURI = Namespaces.MCC),      // 
Metadata Common Classes
+                @XmlNs(prefix = "gmd", namespaceURI = LegacyNamespaces.GMD)
 })
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlJavaTypeAdapters({
     @XmlJavaTypeAdapter(CI_Citation.class),
+    @XmlJavaTypeAdapter(GO_Boolean.class),
+    @XmlJavaTypeAdapter(GO_GenericName.class),
+    @XmlJavaTypeAdapter(GO_Integer.class),
+    @XmlJavaTypeAdapter(GO_Real.class),
+    @XmlJavaTypeAdapter(GO_Record.class),
+    @XmlJavaTypeAdapter(GO_RecordType.class),
+    @XmlJavaTypeAdapter(MD_AttributeGroup.class),
     @XmlJavaTypeAdapter(MD_CoverageContentTypeCode.class),
+    @XmlJavaTypeAdapter(MD_FeatureTypeInfo.class),
     @XmlJavaTypeAdapter(MD_Identifier.class),
     @XmlJavaTypeAdapter(MD_ImagingConditionCode.class),
     @XmlJavaTypeAdapter(MD_RangeDimension.class),
@@ -101,16 +112,12 @@
     @XmlJavaTypeAdapter(MI_PolarizationOrientationCode.class),
     @XmlJavaTypeAdapter(MI_RangeElementDescription.class),
     @XmlJavaTypeAdapter(MI_TransferFunctionTypeCode.class),
+    @XmlJavaTypeAdapter(PT_Locale.class),
 
     // Java types, primitive types and basic OGC types handling
     @XmlJavaTypeAdapter(UnitAdapter.class),
-    @XmlJavaTypeAdapter(LocaleAdapter.class),
     @XmlJavaTypeAdapter(InternationalStringAdapter.class),
-    @XmlJavaTypeAdapter(GO_GenericName.class),
-    @XmlJavaTypeAdapter(GO_RecordType.class),
-    @XmlJavaTypeAdapter(GO_Boolean.class), 
@XmlJavaTypeAdapter(type=boolean.class, value=GO_Boolean.class),
-    @XmlJavaTypeAdapter(GO_Integer.class), @XmlJavaTypeAdapter(type=int.class, 
    value=GO_Integer.class),
-    @XmlJavaTypeAdapter(GO_Real.class),    
@XmlJavaTypeAdapter(type=double.class,  value=GO_Real.class)
+    @XmlJavaTypeAdapter(value=GO_Boolean.class, type=boolean.class)
 })
 package org.apache.sis.metadata.iso.content;
 
@@ -122,8 +129,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.sis.xml.Namespaces;
-import org.apache.sis.internal.jaxb.Schemas;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 import org.apache.sis.internal.jaxb.gco.*;
-import org.apache.sis.internal.jaxb.gmd.*;
 import org.apache.sis.internal.jaxb.code.*;
 import org.apache.sis.internal.jaxb.metadata.*;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDataFile.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -16,15 +16,21 @@
  */
 package org.apache.sis.metadata.iso.distribution;
 
+import java.net.URI;
 import java.util.Collection;
+import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.opengis.util.LocalName;
 import org.opengis.metadata.distribution.Format;
 import org.opengis.metadata.distribution.DataFile;
-import org.opengis.util.LocalName;
 import org.apache.sis.xml.Namespaces;
 import org.apache.sis.metadata.iso.ISOMetadata;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.gmx.MimeFileTypeAdapter;
+import org.opengis.util.InternationalString;
 
 
 /**
@@ -48,16 +54,20 @@ import org.apache.sis.metadata.iso.ISOMe
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
-@XmlType(name = "MX_DataFile_Type", propOrder = {
+@XmlType(name = "MX_DataFile_Type", namespace = Namespaces.MDT, propOrder = {
+    "fileName",
+    "fileDescription",
+    "fileType",
     "featureTypes",
     "fileFormat"
 })
-@XmlRootElement(name = "MX_DataFile", namespace = Namespaces.GMX)
+@XmlRootElement(name = "MX_DataFile", namespace = Namespaces.MDT)
 public class DefaultDataFile extends ISOMetadata implements DataFile {
     /**
      * Serial number for inter-operability with different versions.
@@ -65,6 +75,27 @@ public class DefaultDataFile extends ISO
     private static final long serialVersionUID = -4556006719009557349L;
 
     /**
+     * Name or path of the file.
+     *
+     * @since 1.0
+     */
+    private URI fileName;
+
+    /**
+     * Text description of the file.
+     *
+     * @since 1.0
+     */
+    private InternationalString fileDescription;
+
+    /**
+     * Format in which the file is encoded.
+     *
+     * @since 1.0
+     */
+    private String fileType;
+
+    /**
      * Provides the list of feature types concerned by the transfer data file. 
Depending on
      * the transfer choices, a data file may contain data related to one or 
many feature types.
      * This attribute may be omitted when the dataset is composed of a single 
file and/or the
@@ -74,7 +105,10 @@ public class DefaultDataFile extends ISO
 
     /**
      * Defines the format of the transfer data file.
+     *
+     * @deprecated Removed in latest XSD schemas.
      */
+    @Deprecated
     private Format fileFormat;
 
     /**
@@ -97,6 +131,7 @@ public class DefaultDataFile extends ISO
         if (object != null) {
             featureTypes = copyCollection(object.getFeatureTypes(), 
LocalName.class);
             fileFormat   = object.getFileFormat();
+            // TODO: copy other properties.
         }
     }
 
@@ -126,6 +161,82 @@ public class DefaultDataFile extends ISO
     }
 
     /**
+     * Returns the name or path of the file.
+     *
+     * @return file name, or {@code null}.
+     *
+     * @see 
org.apache.sis.metadata.iso.identification.DefaultBrowseGraphic#getFileName()
+     * @since 1.0
+     */
+    @XmlElement(name = "fileName", required = true)
+    public URI getFileName() {
+        return fileName;
+    }
+
+    /**
+     * Sets the name or path of the file.
+     *
+     * @param  newValue  the new filename or path.
+     *
+     * @since 1.0
+     */
+    public void setFileName(final URI newValue) {
+        checkWritePermission();
+        fileName = newValue;
+    }
+
+    /**
+     * Returns the text description of the file.
+     *
+     * @return text description of the file, or {@code null}.
+     *
+     * @see 
org.apache.sis.metadata.iso.identification.DefaultBrowseGraphic#getFileDescription()
+     * @since 1.0
+     */
+    @XmlElement(name = "fileDescription", required = true)
+    public InternationalString getFileDescription() {
+        return fileDescription;
+    }
+
+    /**
+     * Sets the text description of the file.
+     *
+     * @param  newValue  the new file description.
+     *
+     * @since 1.0
+     */
+    public void setFileDescription(final InternationalString newValue)  {
+        checkWritePermission();
+        fileDescription = newValue;
+    }
+
+    /**
+     * Format in which the file is encoded.
+     *
+     * @return format in which the file is encoded, or {@code null}.
+     *
+     * @see 
org.apache.sis.metadata.iso.identification.DefaultBrowseGraphic#getFileType()
+     * @since 1.0
+     */
+    @XmlElement(name = "fileType", required = true)
+    @XmlJavaTypeAdapter(MimeFileTypeAdapter.class)
+    public String getFileType() {
+        return fileType;
+    }
+
+    /**
+     * Sets the format in which the illustration is encoded.
+     * Raster formats are encouraged to use one of the names returned by
+     * {@link javax.imageio.ImageIO#getReaderFormatNames()}.
+     *
+     * @param  newValue  the new file type.
+     */
+    public void setFileType(final String newValue)  {
+        checkWritePermission();
+        fileType = newValue;
+    }
+
+    /**
      * Returns the list of feature types concerned by the transfer data file. 
Depending on
      * the transfer choices, a data file may contain data related to one or 
many feature types.
      * This attribute may be omitted when the dataset is composed of a single 
file and/or the
@@ -134,7 +245,7 @@ public class DefaultDataFile extends ISO
      * @return list of features types concerned by the transfer data file.
      */
     @Override
-    @XmlElement(name = "featureType", namespace = Namespaces.GMX)
+    @XmlElement(name = "featureTypes")
     public Collection<LocalName> getFeatureTypes() {
         return featureTypes = nonNullCollection(featureTypes, LocalName.class);
     }
@@ -152,18 +263,24 @@ public class DefaultDataFile extends ISO
      * Returns the format of the transfer data file.
      *
      * @return format of the transfer data file, or {@code null}.
+     *
+     * @deprecated Removed in latest XSD schemas.
      */
     @Override
-    @XmlElement(name = "fileFormat", namespace = Namespaces.GMX, required = 
true)
+    @Deprecated
+    @XmlElement(name = "fileFormat", namespace = LegacyNamespaces.GMX)
     public Format getFileFormat() {
-        return fileFormat;
+        return FilterByVersion.LEGACY_METADATA.accept() ? fileFormat : null;
     }
 
     /**
      * Sets the format of the transfer data file.
      *
      * @param newValue  the new file format value.
+     *
+     * @deprecated Removed in latest XSD schemas.
      */
+    @Deprecated
     public void setFileFormat(final Format newValue) {
         checkWritePermission();
         fileFormat = newValue;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDigitalTransferOptions.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDigitalTransferOptions.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDigitalTransferOptions.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDigitalTransferOptions.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -20,7 +20,7 @@ import java.util.Collection;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.InternationalString;
 import org.opengis.temporal.PeriodDuration;
 import org.opengis.metadata.citation.OnlineResource;
@@ -31,10 +31,14 @@ import org.apache.sis.internal.metadata.
 import org.apache.sis.measure.ValueRange;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.internal.metadata.Dependencies;
+import org.apache.sis.internal.jaxb.gts.TM_PeriodDuration;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.util.CollectionsExt;
 
 import static 
org.apache.sis.internal.metadata.MetadataUtilities.ensurePositive;
 
 // Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -54,16 +58,19 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "MD_DigitalTransferOptions_Type", propOrder = {
     "unitsOfDistribution",
+    "distributionFormat",
     "transferSize",
+    "transferFrequency",
     "onLines",
-    "offLine"
+    "offLines"
 })
 @XmlRootElement(name = "MD_DigitalTransferOptions")
 public class DefaultDigitalTransferOptions extends ISOMetadata implements 
DigitalTransferOptions {
@@ -242,9 +249,15 @@ public class DefaultDigitalTransferOptio
      *
      * @since 0.5
      */
+    @XmlElement(name = "offLine")
     @UML(identifier="offLine", obligation=OPTIONAL, specification=ISO_19115)
     public Collection<Medium> getOffLines() {
-        return offLines = nonNullCollection(offLines, Medium.class);
+        Collection<Medium> c = offLines = nonNullCollection(offLines, 
Medium.class);
+        if (c != null && c.size() > 1 && 
FilterByVersion.LEGACY_METADATA.accept()) {
+            c = 
CollectionsExt.singletonOrEmpty(LegacyPropertyAdapter.getSingleton(c,
+                    Medium.class, null, DefaultDigitalTransferOptions.class, 
"getOffLines"));
+        }
+        return c;
     }
 
     /**
@@ -267,7 +280,6 @@ public class DefaultDigitalTransferOptio
      */
     @Override
     @Deprecated
-    @XmlElement(name = "offLine")
     @Dependencies("getOffLines")
     public Medium getOffLine() {
         return LegacyPropertyAdapter.getSingleton(getOffLines(), Medium.class, 
null, DefaultDigitalTransferOptions.class, "getOffLine");
@@ -292,6 +304,8 @@ public class DefaultDigitalTransferOptio
      *
      * @since 0.5
      */
+    @XmlElement(name = "transferFrequency")
+    @XmlJavaTypeAdapter(TM_PeriodDuration.Since2014.class)
     @UML(identifier="transferFrequency", obligation=OPTIONAL, 
specification=ISO_19115)
     public PeriodDuration getTransferFrequency() {
         return transferFrequency;
@@ -316,6 +330,7 @@ public class DefaultDigitalTransferOptio
      *
      * @since 0.5
      */
+    // @XmlElement at the end of this class.
     @UML(identifier="distributionFormat", obligation=OPTIONAL, 
specification=ISO_19115)
     public Collection<Format> getDistributionFormats() {
         return distributionFormats = nonNullCollection(distributionFormats, 
Format.class);
@@ -331,4 +346,28 @@ public class DefaultDigitalTransferOptio
     public void setDistributionFormats(final Collection<? extends Format> 
newValues) {
         distributionFormats = writeCollection(newValues, distributionFormats, 
Format.class);
     }
+
+
+
+
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////                                                                   
               ////////
+    ////////                               XML support with JAXB               
               ////////
+    ////////                                                                   
               ////////
+    ////////        The following methods are invoked by JAXB using reflection 
(even if       ////////
+    ////////        they are private) or are helpers for other methods invoked 
by JAXB.       ////////
+    ////////        Those methods can be safely removed if Geographic Markup 
Language         ////////
+    ////////        (GML) support is not needed.                               
               ////////
+    ////////                                                                   
               ////////
+    
//////////////////////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Invoked by JAXB at both marshalling and unmarshalling time.
+     * This attribute has been added by ISO 19115:2014 standard.
+     * If (and only if) marshalling an older standard version, we omit this 
attribute.
+     */
+    @XmlElement(name = "distributionFormat")
+    private Collection<Format> getDistributionFormat() {
+        return FilterByVersion.CURRENT_METADATA.accept() ? 
getDistributionFormats() : null;
+    }
 }

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistribution.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistribution.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistribution.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistribution.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -20,7 +20,7 @@ import java.util.Collection;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.distribution.DigitalTransferOptions;
 import org.opengis.metadata.distribution.Distribution;
@@ -28,7 +28,10 @@ import org.opengis.metadata.distribution
 import org.opengis.metadata.distribution.Format;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.metadata.TitleProperty;
+import org.apache.sis.internal.jaxb.gco.InternationalStringAdapter;
 
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -56,13 +59,15 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @TitleProperty(name = "description")
 @XmlType(name = "MD_Distribution_Type", propOrder = {
+    "description",              // New in ISO 19115-3
     "distributionFormats",
     "distributors",
     "transferOptions"
@@ -154,6 +159,8 @@ public class DefaultDistribution extends
      *
      * @since 0.5
      */
+    @XmlElement(name = "description")
+    @XmlJavaTypeAdapter(InternationalStringAdapter.Since2014.class)
     @UML(identifier="description", obligation=OPTIONAL, 
specification=ISO_19115)
     public InternationalString getDescription() {
         return description;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultDistributor.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -55,7 +55,7 @@ import org.apache.sis.metadata.iso.ISOMe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @version 1.0
  * @since   0.3
  * @module
  */

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultFormat.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultFormat.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultFormat.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultFormat.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -21,7 +21,7 @@ import java.util.function.BiConsumer;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.distribution.Format;
@@ -29,10 +29,15 @@ import org.opengis.metadata.distribution
 import org.opengis.metadata.distribution.Distributor;
 import org.apache.sis.internal.metadata.Dependencies;
 import org.apache.sis.internal.metadata.LegacyPropertyAdapter;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
+import org.apache.sis.internal.jaxb.metadata.MD_Medium;
+import org.apache.sis.internal.jaxb.metadata.CI_Citation;
 import org.apache.sis.metadata.iso.citation.DefaultCitation;
 import org.apache.sis.metadata.iso.ISOMetadata;
 
-// Branch-dependent imports
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Obligation.MANDATORY;
 import static org.opengis.annotation.Specification.ISO_19115;
@@ -81,17 +86,23 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.8
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "MD_Format_Type", propOrder = {
+    // ISO 19115:2003 (legacy)
     "name",
     "version",
     "amendmentNumber",
     "specification",
+
+    // ISO 19115:2014
+    "formatSpecificationCitation",
     "fileDecompressionTechnique",
+    "media",
     "formatDistributors"
 })
 @XmlRootElement(name = "MD_Format")
@@ -191,7 +202,8 @@ public class DefaultFormat extends ISOMe
      *
      * @since 0.5
      */
-/// @XmlElement(name = "formatSpecificationCitation", required = true)
+    @XmlElement(name = "formatSpecificationCitation", required = true)
+    @XmlJavaTypeAdapter(CI_Citation.Since2014.class)
     @UML(identifier="formatSpecificationCitation", obligation=MANDATORY, 
specification=ISO_19115)
     public Citation getFormatSpecificationCitation() {
         return formatSpecificationCitation;
@@ -240,11 +252,16 @@ public class DefaultFormat extends ISOMe
      */
     @Override
     @Deprecated
-    @XmlElement(name = "specification")
     @Dependencies("getFormatSpecificationCitation")
+    @XmlElement(name = "specification", namespace = LegacyNamespaces.GMD)
     public InternationalString getSpecification() {
-        final Citation citation = getFormatSpecificationCitation();
-        return (citation != null) ? citation.getTitle() : null;
+        if (FilterByVersion.LEGACY_METADATA.accept()) {
+            final Citation citation = getFormatSpecificationCitation();
+            if (citation != null) {
+                return citation.getTitle();
+            }
+        }
+        return null;
     }
 
     /**
@@ -273,13 +290,15 @@ public class DefaultFormat extends ISOMe
      */
     @Override
     @Deprecated
-    @XmlElement(name = "name", required = true)
     @Dependencies("getFormatSpecificationCitation")
+    @XmlElement(name = "name", namespace = LegacyNamespaces.GMD)
     public InternationalString getName() {
-        final Citation citation = getFormatSpecificationCitation();
-        if (citation != null) {
-            return 
LegacyPropertyAdapter.getSingleton(citation.getAlternateTitles(),
-                    InternationalString.class, null, DefaultFormat.class, 
"getName");
+        if (FilterByVersion.LEGACY_METADATA.accept()) {
+            final Citation citation = getFormatSpecificationCitation();
+            if (citation != null) {
+                return 
LegacyPropertyAdapter.getSingleton(citation.getAlternateTitles(),
+                        InternationalString.class, null, DefaultFormat.class, 
"getName");
+            }
         }
         return null;
     }
@@ -311,11 +330,16 @@ public class DefaultFormat extends ISOMe
      */
     @Override
     @Deprecated
-    @XmlElement(name = "version", required = true)
     @Dependencies("getFormatSpecificationCitation")
+    @XmlElement(name = "version", namespace = LegacyNamespaces.GMD)
     public InternationalString getVersion() {
-        final Citation citation = getFormatSpecificationCitation();
-        return (citation != null) ? citation.getEdition() : null;
+        if (FilterByVersion.LEGACY_METADATA.accept()) {
+            final Citation citation = getFormatSpecificationCitation();
+            if (citation != null) {
+                return citation.getEdition();
+            }
+        }
+        return null;
     }
 
     /**
@@ -385,7 +409,8 @@ public class DefaultFormat extends ISOMe
      *
      * @since 0.5
      */
-/// @XmlElement(name = "medium")
+    @XmlElement(name = "medium")
+    @XmlJavaTypeAdapter(MD_Medium.Since2014.class)
     @UML(identifier="medium", obligation=OPTIONAL, specification=ISO_19115)
     public Collection<Medium> getMedia() {
         return media = nonNullCollection(media, Medium.class);

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultMedium.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -21,7 +21,7 @@ import javax.measure.Unit;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.Identifier;
 import org.opengis.metadata.distribution.Medium;
@@ -30,13 +30,18 @@ import org.opengis.metadata.distribution
 import org.apache.sis.measure.ValueRange;
 import org.apache.sis.metadata.TitleProperty;
 import org.apache.sis.metadata.iso.ISOMetadata;
+import org.apache.sis.internal.jaxb.gco.GO_Real;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 import org.apache.sis.internal.jaxb.NonMarshalledAuthority;
+import org.apache.sis.internal.jaxb.metadata.MD_Identifier;
 import org.apache.sis.internal.metadata.Dependencies;
 import org.apache.sis.internal.metadata.LegacyPropertyAdapter;
 
 import static 
org.apache.sis.internal.metadata.MetadataUtilities.ensurePositive;
 
 // Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 
@@ -61,14 +66,17 @@ import static org.opengis.annotation.Spe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @TitleProperty(name = "name")
 @XmlType(name = "MD_Medium_Type", propOrder = {
+    "identifier",           // New in ISO 19115-3
     "name",
+    "density",
     "densities",
     "densityUnits",
     "volumes",
@@ -179,6 +187,9 @@ public class DefaultMedium extends ISOMe
      * Returns the name of the medium on which the resource can be received.
      *
      * @return name of the medium, or {@code null}.
+     *
+     * @see <a href="https://issues.apache.org/jira/browse/SIS-389";>SIS-389</a>
+     *
      */
     @Override
     @XmlElement(name = "name")
@@ -204,6 +215,8 @@ public class DefaultMedium extends ISOMe
      *
      * @since 0.5
      */
+    @XmlElement(name = "density")
+    @XmlJavaTypeAdapter(GO_Real.Since2014.class)
     @ValueRange(minimum = 0, isMinIncluded = false)
     @UML(identifier="density", obligation=OPTIONAL, specification=ISO_19115)
     public Double getDensity() {
@@ -233,9 +246,10 @@ public class DefaultMedium extends ISOMe
      */
     @Override
     @Deprecated
-    @XmlElement(name = "density")
     @Dependencies("getDensity")
+    @XmlElement(name = "density", namespace = LegacyNamespaces.GMD)
     public Collection<Double> getDensities() {
+        if (!FilterByVersion.LEGACY_METADATA.accept()) return null;
         return densities = nonNullCollection(densities, Double.class);
     }
 
@@ -343,7 +357,8 @@ public class DefaultMedium extends ISOMe
      *
      * @since 0.5
      */
-/// @XmlElement(name = "identifier")
+    @XmlElement(name = "identifier")
+    @XmlJavaTypeAdapter(MD_Identifier.Since2014.class)
     @UML(identifier="identifier", obligation=OPTIONAL, specification=ISO_19115)
     public Identifier getIdentifier() {
         return NonMarshalledAuthority.getMarshallable(identifiers);

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultStandardOrderProcess.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultStandardOrderProcess.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultStandardOrderProcess.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/DefaultStandardOrderProcess.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -16,18 +16,22 @@
  */
 package org.apache.sis.metadata.iso.distribution;
 
-import java.util.Currency;
 import java.util.Date;
+import java.util.Currency;
+import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-import org.opengis.annotation.UML;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.Record;
 import org.opengis.util.RecordType;
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.distribution.StandardOrderProcess;
+import org.apache.sis.internal.jaxb.gco.GO_RecordType;
+import org.apache.sis.internal.jaxb.gco.GO_Record;
 import org.apache.sis.metadata.iso.ISOMetadata;
 
+// Branch-specific imports
+import org.opengis.annotation.UML;
 import static org.opengis.annotation.Obligation.OPTIONAL;
 import static org.opengis.annotation.Specification.ISO_19115;
 import static org.apache.sis.internal.metadata.MetadataUtilities.toDate;
@@ -50,7 +54,8 @@ import static org.apache.sis.internal.me
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -59,7 +64,9 @@ import static org.apache.sis.internal.me
     "fees",
     "plannedAvailableDateTime",
     "orderingInstructions",
-    "turnaround"
+    "turnaround",
+    "orderOptionType",              // New in ISO 19115-3
+    "orderOptions"                  // New in ISO 19115-3
 })
 @XmlRootElement(name = "MD_StandardOrderProcess")
 public class DefaultStandardOrderProcess extends ISOMetadata implements 
StandardOrderProcess {
@@ -294,7 +301,8 @@ public class DefaultStandardOrderProcess
      *
      * @see org.apache.sis.util.iso.DefaultRecord#getRecordType()
      */
-/// @XmlElement(name = "orderOptionType")
+    @XmlElement(name = "orderOptionsType")
+    @XmlJavaTypeAdapter(GO_RecordType.Since2014.class)
     @UML(identifier="orderOptionType", obligation=OPTIONAL, 
specification=ISO_19115)
     public RecordType getOrderOptionType() {
         return orderOptionType;
@@ -323,7 +331,8 @@ public class DefaultStandardOrderProcess
      *       when he ordered the resource. We presume that this is not a 
record to be filled by the user for new
      *       orders, otherwise this method would need to be a factory rather 
than a getter.
      */
-/// @XmlElement(name = "orderOptions")
+    @XmlElement(name = "orderOptions")
+    @XmlJavaTypeAdapter(GO_Record.Since2014.class)
     @UML(identifier="orderOptions", obligation=OPTIONAL, 
specification=ISO_19115)
     public Record getOrderOptions() {
         return orderOptions;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/package-info.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/package-info.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/package-info.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/distribution/package-info.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -69,35 +69,41 @@
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.5
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
-@XmlSchema(location=Schemas.METADATA_XSD, 
elementFormDefault=XmlNsForm.QUALIFIED, namespace=Namespaces.GMD, xmlns = {
-    @XmlNs(prefix = "gmx", namespaceURI = Namespaces.GMX),
-    @XmlNs(prefix = "gmd", namespaceURI = Namespaces.GMD),
-    @XmlNs(prefix = "gco", namespaceURI = Namespaces.GCO),
-    @XmlNs(prefix = "xsi", namespaceURI = Namespaces.XSI)
+@XmlSchema(location="http://standards.iso.org/iso/19115/-3/mrd/1.0/mrd.xsd";,
+           elementFormDefault=XmlNsForm.QUALIFIED, namespace=Namespaces.MRD,
+           xmlns = {
+                @XmlNs(prefix = "mrd", namespaceURI = Namespaces.MRD),      // 
Metadata for Resource Distribution
+                @XmlNs(prefix = "mdt", namespaceURI = Namespaces.MDT),      // 
Metadata for Data Transfer
+                @XmlNs(prefix = "mcc", namespaceURI = Namespaces.MCC),      // 
Metadata Common Classes
+                @XmlNs(prefix = "gmd", namespaceURI = LegacyNamespaces.GMD),
+                @XmlNs(prefix = "gmx", namespaceURI = LegacyNamespaces.GMX)
 })
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlJavaTypeAdapters({
+    @XmlJavaTypeAdapter(CI_OnlineResource.class),
+    @XmlJavaTypeAdapter(CI_Responsibility.class),
+    @XmlJavaTypeAdapter(GO_DateTime.class),
+    @XmlJavaTypeAdapter(GO_Integer.class),
+    @XmlJavaTypeAdapter(GO_LocalName.class),
+    @XmlJavaTypeAdapter(GO_Real.class),
     @XmlJavaTypeAdapter(MD_DigitalTransferOptions.class),
     @XmlJavaTypeAdapter(MD_Distributor.class),
     @XmlJavaTypeAdapter(MD_Format.class),
     @XmlJavaTypeAdapter(MD_Medium.class),
     @XmlJavaTypeAdapter(MD_MediumFormatCode.class),
     @XmlJavaTypeAdapter(MD_MediumNameCode.class),
-    @XmlJavaTypeAdapter(CI_OnlineResource.class),
     @XmlJavaTypeAdapter(CI_ResponsibleParty.class),
     @XmlJavaTypeAdapter(MD_StandardOrderProcess.class),
 
     // Java types, primitive types and basic OGC types handling
+    @XmlJavaTypeAdapter(URIAdapter.class),
     @XmlJavaTypeAdapter(UnitAdapter.class),
-    @XmlJavaTypeAdapter(InternationalStringAdapter.class),
-    @XmlJavaTypeAdapter(GO_LocalName.class),
-    @XmlJavaTypeAdapter(GO_DateTime.class),
-    @XmlJavaTypeAdapter(GO_Integer.class), @XmlJavaTypeAdapter(type=int.class, 
   value=GO_Integer.class),
-    @XmlJavaTypeAdapter(GO_Real.class),    
@XmlJavaTypeAdapter(type=double.class, value=GO_Real.class)
+    @XmlJavaTypeAdapter(InternationalStringAdapter.class)
 })
 package org.apache.sis.metadata.iso.distribution;
 
@@ -109,7 +115,7 @@ import javax.xml.bind.annotation.XmlAcce
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.sis.xml.Namespaces;
-import org.apache.sis.internal.jaxb.Schemas;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 import org.apache.sis.internal.jaxb.gco.*;
 import org.apache.sis.internal.jaxb.code.*;
 import org.apache.sis.internal.jaxb.metadata.*;

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/AbstractGeographicExtent.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/AbstractGeographicExtent.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/AbstractGeographicExtent.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/AbstractGeographicExtent.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -42,13 +42,13 @@ import org.apache.sis.metadata.iso.ISOMe
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.4
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @SuppressWarnings("CloneableClassWithoutClone")                 // 
ModifiableMetadata needs shallow clones.
 @XmlType(name = "AbstractEX_GeographicExtent_Type")
-@XmlRootElement(name = "EX_GeographicExtent")
+@XmlRootElement(name = "AbstractEX_GeographicExtent")
 @XmlSeeAlso({
     DefaultGeographicBoundingBox.class,
     DefaultBoundingPolygon.class,

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultBoundingPolygon.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultBoundingPolygon.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultBoundingPolygon.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultBoundingPolygon.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -47,7 +47,7 @@ import org.opengis.metadata.extent.Bound
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @author  Guilhem Legal (Geomatys)
- * @version 0.8
+ * @version 1.0
  * @since   0.3
  * @module
  */

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultExtent.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultExtent.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultExtent.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultExtent.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -82,7 +82,7 @@ import org.apache.sis.xml.NilReason;
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.8
+ * @version 1.0
  *
  * @see Extents#getGeographicBoundingBox(Extent)
  * @see 
org.apache.sis.referencing.AbstractReferenceSystem#getDomainOfValidity()

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicBoundingBox.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -107,7 +107,7 @@ import static java.lang.Double.doubleToL
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.8
+ * @version 1.0
  *
  * @see org.apache.sis.geometry.GeneralEnvelope
  *

Modified: 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicDescription.java
URL: 
http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicDescription.java?rev=1825355&r1=1825354&r2=1825355&view=diff
==============================================================================
--- 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicDescription.java
 [UTF-8] (original)
+++ 
sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultGeographicDescription.java
 [UTF-8] Mon Feb 26 11:28:17 2018
@@ -58,7 +58,7 @@ import org.apache.sis.util.iso.Types;
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
- * @version 0.6
+ * @version 1.0
  * @since   0.3
  * @module
  */


Reply via email to