Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/Schemas.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/Schemas.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/Schemas.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/Schemas.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -41,35 +41,37 @@ package org.apache.sis.internal.jaxb;
  * </ul>
  *
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.4
  * @module
  */
 public final class Schemas {
     /**
-     * The XSD definition for Geographic Markup Language (GML) objects.
-     */
-    public static final String GML_XSD = 
"http://schemas.opengis.net/gml/3.2.1/gml.xsd";;
-
-    /**
-     * The XSD definition for metadata objects.
+     * The root directory of ISO 19115 metadata schemas.
+     * This is the schema used by default in Apache SIS.
      */
-    public static final String METADATA_XSD = 
"http://schemas.opengis.net/iso/19139/20070417/gmd/gmd.xsd";;
+    public static final String METADATA_ROOT = 
"http://standards.iso.org/iso/19115/";;
 
     /**
      * The root directory of OGC metadata schemas.
      * This is the schema used by default in Apache SIS.
+     * Some alternatives to this URL are:
+     *
+     * <ul>
+     *   
<li>http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/</li>
+     *   <li>http://www.isotc211.org/2005/</li>
+     * </ul>
      */
-    public static final String METADATA_ROOT = 
"http://schemas.opengis.net/iso/19139/20070417/";;
+    public static final String METADATA_ROOT_LEGACY = 
"http://schemas.opengis.net/iso/19139/20070417/";;
 
     /**
-     * The root directory of ISO metadata schemas.
-     * This is sometime used as an alternative to {@link #METADATA_ROOT}.
+     * The string to append to {@link #METADATA_ROOT} for obtaining the path 
to the definitions of code lists.
      */
-    public static final String ISO_19139_ROOT = 
"http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/";;
+    public static final String CODELISTS_PATH = 
"resources/Codelist/cat/codelists.xml";
 
     /**
-     * The string to append to {@link #METADATA_ROOT} or {@link 
#ISO_19139_ROOT} for obtaining the path
+     * The string to append to {@link #METADATA_ROOT_LEGACY} or one of its 
alternative for obtaining the path
      * to the definitions of code lists.
      *
      * <p>A localized version of this file exists also with the {@code 
"ML_gmxCodelists.xml"} filename
@@ -77,10 +79,10 @@ public final class Schemas {
      *
      * @see <a href="https://issues.apache.org/jira/browse/SIS-154";>SIS-154</a>
      */
-    public static final String CODELISTS_PATH = 
"resources/Codelist/gmxCodelists.xml";
+    public static final String CODELISTS_PATH_LEGACY = 
"resources/Codelist/gmxCodelists.xml";
 
     /**
-     * The string to append to {@link #METADATA_ROOT} or {@link 
#ISO_19139_ROOT} for obtaining the path
+     * The string to append to {@link #METADATA_ROOT} or one of its 
alternative for obtaining the path
      * to the definitions of units of measurement.
      *
      * <p>A localized version of this file exists also with the {@code 
"ML_gmxUom.xml"} filename

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/CharSequenceAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/CharSequenceAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/CharSequenceAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/CharSequenceAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -22,13 +22,14 @@ import org.apache.sis.util.CharSequences
 import org.apache.sis.xml.XLink;
 import org.apache.sis.xml.ReferenceResolver;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.internal.jaxb.gmx.Anchor;
 import org.apache.sis.internal.jaxb.gmd.PT_FreeText;
 
 
 /**
- * JAXB adapter in order to wrap the string value with a {@code 
<gco:CharacterString>} element,
- * for ISO-19139 compliance. A {@link CharSequenceAdapter} can handle the 
following types:
+ * JAXB adapter wrapping the string value in a {@code <gco:CharacterString>} 
element, for ISO 19115-3 compliance.
+ * A {@link CharSequenceAdapter} can handle the following types:
  *
  * <ul>
  *   <li>{@link InternationalString}, which may be mapped to {@link 
PT_FreeText} elements.</li>
@@ -40,7 +41,7 @@ import org.apache.sis.internal.jaxb.gmd.
  * @author  Cédric Briançon (Geomatys)
  * @author  Guilhem Legal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.6
+ * @version 1.0
  *
  * @see StringAdapter
  * @see InternationalStringAdapter
@@ -48,11 +49,11 @@ import org.apache.sis.internal.jaxb.gmd.
  * @since 0.3
  * @module
  */
-public final class CharSequenceAdapter extends XmlAdapter<GO_CharacterString, 
CharSequence> {
+public class CharSequenceAdapter extends XmlAdapter<GO_CharacterString, 
CharSequence> {
     /**
      * Constructor for JAXB only.
      */
-    private CharSequenceAdapter() {
+    public CharSequenceAdapter() {
     }
 
     /**
@@ -63,7 +64,7 @@ public final class CharSequenceAdapter e
      * @return a {@link CharSequence} which represents the metadata value.
      */
     @Override
-    public CharSequence unmarshal(final GO_CharacterString value) {
+    public final CharSequence unmarshal(final GO_CharacterString value) {
         return (value != null) ? value.toCharSequence() : null;
     }
 
@@ -91,12 +92,12 @@ public final class CharSequenceAdapter e
             return wrap(Context.current(), value, (String) value);  // 
Slightly more efficient variant of this method.
         }
         /*
-         * <gmd:someElement xsi:type="gmd:PT_FreeText_PropertyType">
+         * <mdb:someElement xsi:type="lan:PT_FreeText_PropertyType">
          *   <gco:CharacterString>...</gco:CharacterString>
-         *   <gmd:PT_FreeText>
+         *   <lan:PT_FreeText>
          *     ... see PT_FreeText ...
-         *   </gmd:PT_FreeText>
-         * </gmd:someElement>
+         *   </lan:PT_FreeText>
+         * </mdb:someElement>
          */
         if (value instanceof InternationalString) {
             final PT_FreeText ft = PT_FreeText.create((InternationalString) 
value);
@@ -135,9 +136,9 @@ public final class CharSequenceAdapter e
          * have been replaced by an Anchor. The output will be one of the 
following:
          *
          * 
┌──────────────────────────────────────────────────┬────────────────────────────────┐
-         * │ <gmd:someElement>                                │ 
<gmd:someElement>              │
+         * │ <mdb:someElement>                                │ 
<mdb:someElement>              │
          * │   <gco:CharacterString>...</gco:CharacterString> │   
<gmx:Anchor>...</gmx:Anchor> │
-         * │ </gmd:someElement>                               │ 
</gmd:someElement>             │
+         * │ </mdb:someElement>                               │ 
</mdb:someElement>             │
          * 
└──────────────────────────────────────────────────┴────────────────────────────────┘
          */
         return new GO_CharacterString(value);
@@ -182,4 +183,23 @@ public final class CharSequenceAdapter e
         }
         return string;
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends CharSequenceAdapter {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_CharacterString marshal(final CharSequence value) {
+            return FilterByVersion.CURRENT_METADATA.accept() ? 
super.marshal(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Boolean.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Boolean.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Boolean.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Boolean.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -23,9 +23,9 @@ import javax.xml.bind.annotation.XmlType
 
 /**
  * Surrounds boolean value by {@code <gco:Boolean>}.
- * The ISO-19139 standard requires most types to be surrounded by an element 
representing the value type.
+ * The ISO 19115-3 standard requires most types to be wrapped by an element 
representing the value type.
  * The JAXB default behavior is to marshal primitive Java types directly, 
without such wrapper element.
- * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19139.
+ * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19115-3.
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
@@ -63,7 +63,7 @@ public final class GO_Boolean extends Pr
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about primitive types.
+     * ISO 19115-3 standard and its requirements about primitive types.
      *
      * @param  value  the boolean value we want to surround by an element 
representing its type.
      * @return an adaptation of the boolean value, that is to say a boolean 
value surrounded

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_CharacterString.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlType
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlSeeAlso;
 import org.w3c.dom.Element;
 import org.opengis.util.CodeList;
@@ -33,16 +34,18 @@ import org.apache.sis.internal.jaxb.gmx.
 import org.apache.sis.internal.jaxb.gmx.FileName;
 import org.apache.sis.internal.jaxb.gmx.MimeFileType;
 import org.apache.sis.internal.jaxb.gmd.CodeListUID;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.Workaround;
 import org.apache.sis.util.iso.Types;
-import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.resources.IndexedResourceBundle;
 import org.apache.sis.util.resources.Messages;
+import org.apache.sis.util.resources.Errors;
 
 
 /**
- * JAXB wrapper for string value in a {@code <gco:CharacterString>}, {@code 
<gmx:Anchor>},
- * {@code <gmx:FileName>} or {@code <gmx:MimeFileType>} element, for ISO-19139 
compliance.
+ * JAXB wrapper for string value in a {@code <gco:CharacterString>}, {@code 
<gcx:Anchor>},
+ * {@code <gcx:FileName>} or {@code <gcx:MimeFileType>} element, for ISO 
19115-3 compliance.
  *
  * <p>{@code FileName} and {@code MimeFileType} are possible substitutions for 
{@code CharacterString}.
  * They make sense only in {@link 
org.apache.sis.metadata.iso.identification.DefaultBrowseGraphic} or
@@ -55,7 +58,8 @@ import org.apache.sis.util.resources.Mes
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  *
  * @see org.apache.sis.internal.jaxb.gmd.PT_FreeText
  *
@@ -68,6 +72,7 @@ import org.apache.sis.util.resources.Mes
     org.apache.sis.internal.jaxb.gmd.LanguageCode.class,
     org.apache.sis.internal.jaxb.gmd.Country.class
 })
+@XmlRootElement(name = "CharacterString")
 public class GO_CharacterString {
     /*
      * Numerical values below are ordered: if two or more values are defined 
(thoerically not legal,
@@ -75,27 +80,33 @@ public class GO_CharacterString {
      */
     /**
      * Value assigned to {@link #type} if the character string
-     * shall be marshalled as a {@code <gmx:MimeFileType>} element.
+     * shall be marshalled as a {@code <gcx:MimeFileType>} element.
      */
     public static final byte MIME_TYPE = 1;
 
     /**
      * Value assigned to {@link #type} if the character string
-     * shall be marshalled as a {@code <gmx:FileName>} element.
+     * shall be marshalled as a {@code <gcx:FileName>} element.
      */
-    public static final byte FILENAME = 2;
+    public static final byte FILENAME = 3;      // Precedence over legacy 
<gmd:UML>
+
+    /**
+     * Value assigned to {@link #type} if the character string
+     * shall be marshalled as a legacy {@code <gmd:URL>} element.
+     */
+    public static final byte URL = 2;
 
     /**
      * Value assigned to {@link #type} if the current {@link #text}
-     * has been found in a {@code <gmx:Anchor>} element.
+     * has been found in a {@code <gcx:Anchor>} element.
      */
-    private static final byte ANCHOR = 3;
+    private static final byte ANCHOR = 4;
 
     /**
      * Value assigned to {@link #type} if the current {@link #text}
      * has been found in an enumeration or code list element.
      */
-    private static final byte ENUM = 4;
+    private static final byte ENUM = 5;
 
     /**
      * The XML element names for each possible {@link #type} values.
@@ -108,6 +119,7 @@ public class GO_CharacterString {
             case FILENAME:  return "FileName";
             case ANCHOR:    return "Anchor";
             case ENUM:      return "ControlledVocabulary";
+            case URL:       return "URL";                       // In legacy 
XML only.
             default:        throw new AssertionError(type);
         }
     }
@@ -157,7 +169,7 @@ public class GO_CharacterString {
      * If the given value overwrites a previous one, a warning is emitted.
      *
      * @param  value     the value to set.
-     * @param  property  0 or one of the {@link #MIME_TYPE}, {@link #FILENAME} 
or {@link #ANCHOR} constants.
+     * @param  property  0 or one of the {@link #MIME_TYPE}, {@link 
#FILENAME}, {@link #URL} or {@link #ANCHOR} constants.
      */
     private void setText(CharSequence value, byte property) {
         value = CharSequences.trimWhitespaces(value);
@@ -186,7 +198,7 @@ public class GO_CharacterString {
     }
 
     /**
-     * Returns the text in a {@code <gco:CharacterString>}, {@code 
<gmx:FileName>} or {@code <gmx:MimeFileType>}
+     * Returns the text in a {@code <gco:CharacterString>}, {@code 
<gcx:FileName>} or {@code <gcx:MimeFileType>}
      * element, or {@code null} if none. This method does not return anything 
for {@code Enum} or {@code CodeList}
      * instances, as the later are handled by {@link #getCodeList()}.
      *
@@ -194,13 +206,15 @@ public class GO_CharacterString {
      */
     @XmlElements({
         @XmlElement(type = String.class,       name = "CharacterString"),
-        @XmlElement(type = Anchor.class,       name = "Anchor",       
namespace = Namespaces.GMX),
-        @XmlElement(type = FileName.class,     name = "FileName",     
namespace = Namespaces.GMX),
-        @XmlElement(type = MimeFileType.class, name = "MimeFileType", 
namespace = Namespaces.GMX)
+        @XmlElement(type = Anchor.class,       name = "Anchor",       
namespace = Namespaces.GCX),
+        @XmlElement(type = FileName.class,     name = "FileName",     
namespace = Namespaces.GCX),
+        @XmlElement(type = MimeFileType.class, name = "MimeFileType", 
namespace = Namespaces.GCX),
+        @XmlElement(type = GO_URL.class,       name = "URL",          
namespace = LegacyNamespaces.GMD)
     })
     private Object getValue() {
         switch (type) {
             case 0:         return StringAdapter.toString(text);
+            case URL:       return new GO_URL(text.toString());
             case FILENAME:  return new FileName(text.toString());
             case MIME_TYPE: return new MimeFileType(text.toString());
             case ANCHOR:    return text;                                // 
Shall be an instance of Anchor.
@@ -209,10 +223,11 @@ public class GO_CharacterString {
     }
 
     /**
-     * Sets the {@code <gco:CharacterString>}, {@code <gmx:FileName>} or 
{@code <gmx:MimeFileType>} value.
+     * Sets the {@code <gco:CharacterString>}, {@code <gcx:FileName>} or 
{@code <gcx:MimeFileType>} value.
      *
      * <p>This method is invoked by JAXB at unmarshalling time and should not 
need to be invoked directly.</p>
      */
+    @SuppressWarnings("unused")
     private void setValue(final Object value) {
         if (value instanceof Anchor) {
             setText((Anchor) value, ANCHOR);
@@ -220,6 +235,8 @@ public class GO_CharacterString {
             setText(value.toString(), FILENAME);
         } else if (value instanceof MimeFileType) {
             setText(value.toString(), MIME_TYPE);
+        } else if (value instanceof GO_URL) {           // Legacy ISO 
19139:2007
+            setText(value.toString(), URL);
         } else {
             setText((CharSequence) value, (byte) 0);
         }
@@ -231,7 +248,7 @@ public class GO_CharacterString {
      *
      * <div class="note"><b>Note:</b>
      * we have to rely on a somewhat complicated mechanism because the code 
lists implementations in GeoAPI
-     * do not hae JAXB annotations. If those annotations are added in a future 
GeoAPI implementation, then
+     * do not have JAXB annotations. If those annotations are added in a 
future GeoAPI implementation, then
      * we could replace this mechanism by a simple property annotated with 
{@code XmlElementRef}.</div>
      *
      * @since 0.7
@@ -244,23 +261,15 @@ public class GO_CharacterString {
         }
         final ControlledVocabulary code = Types.forCodeTitle(text);
         final String name = Types.getListName(code);
-        final String namespace;
         /*
-         * The namespace is usually GMD, but we also have some other 
namespaces link GMI.
+         * The namespace has have various value like CIT, SRV, MDQ, MRI, MSR, 
LAN, etc.
          * The real namespace is declared in the @XmlElement annotation of the 
getElement
          * method in the JAXB adapter. We could use reflection, but we do not 
in order to
          * avoid potential class loading issue and also because not all 
CodeList are in the
          * same package.
          */
-        if (name.startsWith("MD_") || name.startsWith("CI_") || 
name.startsWith("DS_")) {
-            namespace = Namespaces.GMD;
-        } else if (name.startsWith("MI_")) {
-            namespace = Namespaces.GMI;
-        } else if (name.startsWith("SV_") || name.equals("DCPList")) {
-            namespace = Namespaces.SRV;
-        } else if (name.startsWith("CS_") || name.startsWith("CD_") || 
name.startsWith("SC_")) {
-            namespace = Namespaces.GML;
-        } else {
+        String namespace = Namespaces.guessForType(name);
+        if (namespace == null) {
             namespace = XMLConstants.NULL_NS_URI;
         }
         return new JAXBElement<>(new QName(namespace, name), CodeListUID.class,
@@ -268,25 +277,37 @@ public class GO_CharacterString {
     }
 
     /**
-     * Invoked by JAXB for any XML element which is not a {@code 
<gco:CharacterString>}, {@code <gmx:FileName>}
-     * or {@code <gmx:MimeFileType>}. This method presumes that the element 
name is the CodeList standard name.
+     * Invoked by JAXB for any XML element which is not a {@code 
<gco:CharacterString>}, {@code <gcx:FileName>}
+     * or {@code <gcx:MimeFileType>}. This method presumes that the element 
name is the CodeList standard name.
      * If not, the element will be ignored.
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"unchecked", "unused"})
     private void setCodeList(final Object value) {
         final Element e = (Element) value;
         if (e.getNodeType() == Element.ELEMENT_NODE) {
             final Class<?> ct = Types.forStandardName(e.getLocalName());
+            final Class<? extends IndexedResourceBundle> resources;
+            final short errorKey;
+            final Object[] args;
             if (ct != null && CodeList.class.isAssignableFrom(ct)) {
-                final String attribute = e.getAttribute("codeListValue");
+                final String attribute = 
e.getAttribute("codeListValue").trim();
                 if (!attribute.isEmpty()) {
                     text = Types.getCodeTitle(Types.forCodeName((Class) ct, 
attribute, true));
                     type = ENUM;
                     return;
+                } else {
+                    resources = Errors.class;
+                    errorKey  = Errors.Keys.MissingOrEmptyAttribute_2;
+                    args      = new Object[2];
+                    args[1]   = "codeListValue";
                 }
+            } else {
+                resources = Messages.class;
+                errorKey  = Messages.Keys.UnknownCodeList_1;
+                args      = new Object[1];
             }
-            Context.warningOccured(Context.current(), 
GO_CharacterString.class, "setCodeList",
-                    Errors.class, Errors.Keys.UnknownType_1, e.getNodeName());
+            args[0] = e.getNodeName();
+            Context.warningOccured(Context.current(), 
GO_CharacterString.class, "setCodeList", resources, errorKey, args);
         }
     }
 

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_DateTime.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -29,7 +29,7 @@ import org.apache.sis.internal.jaxb.XmlU
 
 /**
  * JAXB adapter wrapping the date value in a {@code <gco:Date>} or {@code 
<gco:DateTime>} element,
- * for ISO-19139 compliance. Only one of {@code Date} or {@code DateTime} 
field shall be non-null.
+ * for ISO 19115-3 compliance. Only one of {@code Date} or {@code DateTime} 
field shall be non-null.
  * At marshalling time, the choice is performed depending on whatever the 
given date contains
  * hour, minute or seconds information different than zero.
  *

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Decimal.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Decimal.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Decimal.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Decimal.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -23,9 +23,9 @@ import javax.xml.bind.annotation.XmlType
 
 /**
  * Surrounds double values by {@code <gco:Decimal>}.
- * The ISO-19139 standard requires most types to be surrounded by an element 
representing the value type.
+ * The ISO 19115-3 standard requires most types to be wrapped by an element 
representing the value type.
  * The JAXB default behavior is to marshal primitive Java types directly, 
without such wrapper element.
- * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19139.
+ * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19115-3.
  *
  * <div class="section">Relationship with {@code GO_Real}</div>
  * This adapter is identical to {@link GO_Real} except for the element name, 
which is {@code "Decimal"} instead
@@ -38,7 +38,6 @@ import javax.xml.bind.annotation.XmlType
  * @version 0.3
  *
  * @see GO_Real
- * @see GO_Decimal32
  *
  * @since 0.3
  * @module
@@ -72,7 +71,7 @@ public final class GO_Decimal extends Pr
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about primitive types.
+     * ISO 19115-3 standard and its requirements about primitive types.
      *
      * @param  value  the double value we want to surround by an element 
representing its type.
      * @return an adaptation of the double value, that is to say a double 
value surrounded

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Distance.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -83,7 +83,7 @@ public final class GO_Distance extends X
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about {@code measures}.
+     * ISO 19115-3 standard and its requirements about {@code measures}.
      *
      * @param  value  the double value we want to integrate into a {@code 
<gco:Distance>} element.
      * @return an adaptation of the double value, that is to say a double 
value surrounded

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_GenericName.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_GenericName.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_GenericName.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_GenericName.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -17,6 +17,7 @@
 package org.apache.sis.internal.jaxb.gco;
 
 import org.opengis.util.GenericName;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 
 
 /**
@@ -34,11 +35,11 @@ import org.opengis.util.GenericName;
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Guilhem Legal (Geomatys)
- * @version 0.3
+ * @version 1.0
  * @since   0.3
  * @module
  */
-public final class GO_GenericName extends NameAdapter<GO_GenericName, 
GenericName> {
+public class GO_GenericName extends NameAdapter<GO_GenericName, GenericName> {
     /**
      * Empty constructor for JAXB only.
      */
@@ -53,7 +54,7 @@ public final class GO_GenericName extend
     }
 
     /**
-     * Does the link between an {@link GenericName} and the adapter associated.
+     * Replaces a generic name by its wrapper.
      * JAXB calls automatically this method at marshalling-time.
      *
      * @param  value  the implementing class for this metadata value.
@@ -65,14 +66,33 @@ public final class GO_GenericName extend
     }
 
     /**
-     * Does the link between adapters and the way they will be unmarshalled.
+     * Unwraps the generic name from the given element.
      * JAXB calls automatically this method at unmarshalling-time.
      *
      * @param  value  the wrapper, or {@code null} if none.
      * @return the implementing class.
      */
     @Override
-    public GenericName unmarshal(final GO_GenericName value) {
+    public final GenericName unmarshal(final GO_GenericName value) {
         return (value != null) ? value.name : null;
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends GO_GenericName {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_GenericName marshal(final GenericName value) {
+            return FilterByVersion.CURRENT_METADATA.accept() ? 
super.marshal(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -22,14 +22,14 @@ import javax.xml.bind.annotation.XmlType
 
 
 /**
- * Surrounds integer values by {@code <gco:Integer>}.
- * The ISO-19139 standard requires most types to be surrounded by an element 
representing the value type.
+ * Wraps integer values in {@code <gco:Integer>} element.
+ * The ISO 19115-3 standard requires most types to be wrapped by an element 
representing the value type.
  * The JAXB default behavior is to marshal primitive Java types directly, 
without such wrapper element.
- * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19139.
+ * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19115-3.
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.4
+ * @version 1.0
  *
  * @see GO_Integer64
  *
@@ -37,11 +37,11 @@ import javax.xml.bind.annotation.XmlType
  * @module
  */
 @XmlType(name = "Integer_PropertyType")
-public final class GO_Integer extends PropertyType<GO_Integer, Integer> {
+public class GO_Integer extends PropertyType<GO_Integer, Integer> {
     /**
      * Empty constructor used only by JAXB.
      */
-    public GO_Integer() {
+    GO_Integer() {
     }
 
     /**
@@ -59,16 +59,16 @@ public final class GO_Integer extends Pr
      * @return {@code Integer.class}
      */
     @Override
-    protected Class<Integer> getBoundType() {
+    protected final Class<Integer> getBoundType() {
         return Integer.class;
     }
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about primitive types.
+     * ISO 19115-3 standard and its requirements about primitive types.
      *
-     * @param  value  the integer value we want to surround by an element 
representing its type.
-     * @return an adaptation of the integer value, that is to say an integer 
value surrounded
+     * @param  value  the integer value we want to wrap in an element 
representing its type.
+     * @return a wrapper for the integer value, that is to say an integer 
value wrapped
      *         by {@code <gco:Integer>} element.
      */
     @Override
@@ -83,7 +83,7 @@ public final class GO_Integer extends Pr
      */
     @XmlElement(name = "Integer")
     @XmlSchemaType(name = "integer")
-    public Integer getElement() {
+    public final Integer getElement() {
         return metadata;
     }
 
@@ -92,7 +92,26 @@ public final class GO_Integer extends Pr
      *
      * @param  metadata  the unmarshalled value.
      */
-    public void setElement(final Integer metadata) {
+    public final void setElement(final Integer metadata) {
         this.metadata = metadata;
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends GO_Integer {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_Integer wrap(final Integer value) {
+            return accept2014() ? super.wrap(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer64.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer64.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer64.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Integer64.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -22,9 +22,9 @@ import javax.xml.bind.annotation.XmlSche
 
 /**
  * Surrounds long values by {@code <gco:Integer>}.
- * The ISO-19139 standard requires most types to be surrounded by an element 
representing the value type.
+ * The ISO 19115-3 standard requires most types to be wrapped by an element 
representing the value type.
  * The JAXB default behavior is to marshal primitive Java types directly, 
without such wrapper element.
- * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19139.
+ * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19115-3.
  *
  * @author  Cédric Briançon (Geomatys)
  * @version 0.4
@@ -59,7 +59,7 @@ public final class GO_Integer64 extends
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about primitive types.
+     * ISO 19115-3 standard and its requirements about primitive types.
      *
      * @param  value  the integer value we want to surround by an element 
representing its type.
      * @return an adaptation of the integer value, that is to say a integer 
value surrounded

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_LocalName.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_LocalName.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_LocalName.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_LocalName.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -20,7 +20,10 @@ import org.opengis.util.LocalName;
 
 
 /**
- * JAXB wrapper in order to map implementing class with the GeoAPI interface.
+ * Same as {@link GO_GenericName}, but for cases where the element type is 
declared as {@code LocalName}
+ * instead than {@code GenericName}. This adapter does not provide any new 
functionality;
+ * its sole purpose is to declare types matching JAXB expectation.
+ *
  * This adapter is used for all the following mutually exclusive properties
  * (only one can be defined at time):
  *
@@ -52,8 +55,8 @@ public final class GO_LocalName extends
     }
 
     /**
-     * Does the link between an {@link org.apache.sis.util.iso.AbstractName} 
and the adapter associated.
-     * JAXB calls automatically this method at marshalling-time.
+     * Replaces a generic name by its wrapper.
+     * JAXB calls automatically this method at marshalling time.
      *
      * @param  value  the implementing class for this metadata value.
      * @return an wrapper which contains the metadata value.
@@ -64,8 +67,8 @@ public final class GO_LocalName extends
     }
 
     /**
-     * Does the link between adapters and the way they will be unmarshalled.
-     * JAXB calls automatically this method at unmarshalling-time.
+     * Unwraps the generic name from the given element.
+     * JAXB calls automatically this method at unmarshalling time.
      *
      * @param  value  the wrapper, or {@code null} if none.
      * @return the implementing class.

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Measure.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -83,11 +83,10 @@ public final class GO_Measure extends Xm
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about {@code measures}.
+     * ISO 19115-3 standard and its requirements about {@code measures}.
      *
-     * @param  value  the double value we want to integrate into a {@code 
<gco:Measure>} element.
-     * @return an adaptation of the double value, that is to say a double 
value surrounded
-     *         by {@code <gco:Measure>} element, with an {@code uom} attribute.
+     * @param  value  the double value we want to wrap into a {@code 
<gco:Measure>} element.
+     * @return a double value wrapped by {@code <gco:Measure>} element with an 
{@code uom} attribute.
      */
     @Override
     public GO_Measure marshal(final Double value) {

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_Real.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -22,10 +22,10 @@ import javax.xml.bind.annotation.XmlType
 
 
 /**
- * Surrounds double values by {@code <gco:Real>}.
- * The ISO-19139 standard requires most types to be surrounded by an element 
representing the value type.
+ * Wraps double values in {@code <gco:Real>} element.
+ * The ISO 19115-3 standard requires most types to be wrapped by an element 
representing the value type.
  * The JAXB default behavior is to marshal primitive Java types directly, 
without such wrapper element.
- * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19139.
+ * The role of this class is to add the {@code <gco:…>} wrapper element 
required by ISO 19115-3.
  *
  * <div class="section">Relationship with {@code GO_Decimal}</div>
  * This adapter is identical to {@link GO_Decimal} except for the element 
name, which is {@code "Real"}
@@ -33,16 +33,17 @@ import javax.xml.bind.annotation.XmlType
  * The few exceptions are documented in {@link GO_Decimal}.
  *
  * @author  Cédric Briançon (Geomatys)
- * @version 0.3
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.0
  * @since   0.3
  * @module
  */
 @XmlType(name = "Real_PropertyType")
-public final class GO_Real extends PropertyType<GO_Real, Double> {
+public class GO_Real extends PropertyType<GO_Real, Double> {
     /**
      * Empty constructor used only by JAXB.
      */
-    public GO_Real() {
+    GO_Real() {
     }
 
     /**
@@ -60,20 +61,20 @@ public final class GO_Real extends Prope
      * @return {@code Double.class}
      */
     @Override
-    protected Class<Double> getBoundType() {
+    protected final Class<Double> getBoundType() {
         return Double.class;
     }
 
     /**
      * Allows JAXB to change the result of the marshalling process, according 
to the
-     * ISO-19139 standard and its requirements about primitive types.
+     * ISO 19115-3 standard and its requirements about primitive types.
      *
-     * @param  value  the double value we want to surround by an element 
representing its type.
-     * @return an adaptation of the double value, that is to say a double 
value surrounded
+     * @param  value  the double value we want to wrap in an element 
representing its type.
+     * @return a wrapper for the double value, that is to say a double value 
wrapped
      *         by {@code <gco:Real>} element.
      */
     @Override
-    public GO_Real wrap(final Double value) {
+    protected GO_Real wrap(final Double value) {
         return new GO_Real(value);
     }
 
@@ -84,7 +85,7 @@ public final class GO_Real extends Prope
      */
     @XmlElement(name = "Real")
     @XmlSchemaType(name = "double")
-    public Double getElement() {
+    public final Double getElement() {
         return metadata;
     }
 
@@ -93,7 +94,26 @@ public final class GO_Real extends Prope
      *
      * @param  metadata  the unmarshalled value.
      */
-    public void setElement(final Double metadata) {
+    public final void setElement(final Double metadata) {
         this.metadata = metadata;
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends GO_Real {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override protected GO_Real wrap(final Double value) {
+            return accept2014() ? super.wrap(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/GO_RecordType.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -26,19 +26,20 @@ import org.apache.sis.util.iso.DefaultRe
  * See package documentation for more information about JAXB and interface.
  *
  * @author  Cédric Briançon (Geomatys)
- * @version 0.3
+ * @author  Martin Desruisseaux (Geomatys)
+ * @version 1.0
  * @since   0.3
  * @module
  */
-public final class GO_RecordType extends PropertyType<GO_RecordType, 
RecordType> {
+public class GO_RecordType extends PropertyType<GO_RecordType, RecordType> {
     /**
      * Empty constructor for JAXB only.
      */
-    public GO_RecordType() {
+    GO_RecordType() {
     }
 
     /**
-     * Wraps a {@code RecordType} value with a {@code gco:RecordType} tags at 
marshalling-time.
+     * Wraps a {@code RecordType} value with a {@code gco:RecordType} element 
at marshalling-time.
      *
      * @param  metadata  the metadata value to marshal.
      */
@@ -47,24 +48,24 @@ public final class GO_RecordType extends
     }
 
     /**
-     * Returns a wrapper for the given {@code RecordType} element.
+     * Returns the GeoAPI interface which is bound by this adapter.
      *
-     * @param  value  the value to marshal.
-     * @return the wrapper around the given metadata value.
+     * @return {@code RecordType.class}
      */
     @Override
-    protected GO_RecordType wrap(final RecordType value) {
-        return new GO_RecordType(value);
+    protected final Class<RecordType> getBoundType() {
+        return RecordType.class;
     }
 
     /**
-     * Returns the GeoAPI interface which is bound by this adapter.
+     * Returns a wrapper for the given {@code RecordType} element.
      *
-     * @return {@code RecordType.class}
+     * @param  value  the value to marshal.
+     * @return the wrapper around the given metadata value.
      */
     @Override
-    protected Class<RecordType> getBoundType() {
-        return RecordType.class;
+    protected GO_RecordType wrap(final RecordType value) {
+        return new GO_RecordType(value);
     }
 
     /**
@@ -74,7 +75,7 @@ public final class GO_RecordType extends
      * @return the metadata to be marshalled.
      */
     @XmlElement(name = "RecordType")
-    public DefaultRecordType getElement() {
+    public final DefaultRecordType getElement() {
         return DefaultRecordType.castOrCopy(metadata);
     }
 
@@ -84,7 +85,26 @@ public final class GO_RecordType extends
      *
      * @param  metadata  the unmarshalled metadata.
      */
-    public void setElement(final DefaultRecordType metadata) {
+    public final void setElement(final DefaultRecordType metadata) {
         this.metadata = metadata;
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends GO_RecordType {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_RecordType wrap(final RecordType value) {
+            return accept2014() ? super.wrap(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/InternationalStringAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -19,6 +19,7 @@ package org.apache.sis.internal.jaxb.gco
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import org.opengis.util.InternationalString;
 import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 
 
 /**
@@ -30,15 +31,15 @@ import org.apache.sis.util.iso.SimpleInt
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Guilhem Legal (Geomatys)
- * @version 0.3
+ * @version 1.0
  * @since   0.3
  * @module
  */
-public final class InternationalStringAdapter extends 
XmlAdapter<GO_CharacterString, InternationalString> {
+public class InternationalStringAdapter extends XmlAdapter<GO_CharacterString, 
InternationalString> {
     /**
      * Empty constructor for JAXB.
      */
-    private InternationalStringAdapter() {
+    InternationalStringAdapter() {
     }
 
     /**
@@ -49,7 +50,7 @@ public final class InternationalStringAd
      * @return the unwrapped {@link String} value, or {@code null}.
      */
     @Override
-    public InternationalString unmarshal(final GO_CharacterString value) {
+    public final InternationalString unmarshal(final GO_CharacterString value) 
{
         if (value != null) {
             final CharSequence text = value.toCharSequence();
             if (text != null) {
@@ -73,4 +74,23 @@ public final class InternationalStringAd
     public GO_CharacterString marshal(final InternationalString value) {
         return CharSequenceAdapter.wrap(value);
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends InternationalStringAdapter {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_CharacterString marshal(final InternationalString 
value) {
+            return FilterByVersion.CURRENT_METADATA.accept() ? 
super.marshal(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/NameAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/NameAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/NameAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/NameAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -27,6 +27,7 @@ import org.apache.sis.util.iso.DefaultLo
 import org.apache.sis.util.iso.DefaultTypeName;
 import org.apache.sis.util.iso.DefaultMemberName;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 
 
 /**
@@ -44,7 +45,7 @@ import org.apache.sis.util.resources.Err
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @author  Guilhem Legal (Geomatys)
- * @version 0.8
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -63,18 +64,7 @@ abstract class NameAdapter<ValueType ext
     }
 
     /**
-     * Ensures that the {@linkplain #name} is not already defined.
-     *
-     * @throws IllegalStateException if a name is already defined.
-     */
-    private void ensureUndefined() throws IllegalStateException {
-        if (name != null) {
-            throw new 
IllegalStateException(Errors.format(Errors.Keys.ValueAlreadyDefined_1, "name"));
-        }
-    }
-
-    /**
-     * Returns the {@code LocalName} or {@code ScopedName} to marshall. 
Returns {@code null} if the name
+     * Returns the {@code LocalName} or {@code ScopedName} to marshal. Returns 
{@code null} if the name
      * is a {@link TypeName} or a {@link MemberName}, in order to use {@link 
#getName()} instead.
      * Example:
      *
@@ -93,8 +83,11 @@ abstract class NameAdapter<ValueType ext
         if (name instanceof LocalName) {
             if (name instanceof TypeName || name instanceof MemberName) {
                 return null;
-            } else {
+            } else if (FilterByVersion.LEGACY_METADATA.accept()) {
                 code = new NameValue.Local();
+            } else {
+                // ISO 19115-3:2016 does not seem to define gco:LocalName 
anymore.
+                code = new NameValue.Scoped();
             }
         } else if (name instanceof ScopedName) {
             code = new NameValue.Scoped();
@@ -106,7 +99,7 @@ abstract class NameAdapter<ValueType ext
     }
 
     /**
-     * Returns the {@code TypeName} or {@code MemberName} to marshall. Returns 
{@code null} if the name
+     * Returns the {@code TypeName} or {@code MemberName} to marshal. Returns 
{@code null} if the name
      * is a {@link LocalName} or {@link ScopedName}, in order to use {@link 
#getValue()} instead.
      * Example:
      *
@@ -159,4 +152,15 @@ abstract class NameAdapter<ValueType ext
         ensureUndefined();
         name = value;
     }
+
+    /**
+     * Ensures that the {@linkplain #name} is not already defined.
+     *
+     * @throws IllegalStateException if a name is already defined.
+     */
+    private void ensureUndefined() throws IllegalStateException {
+        if (name != null) {
+            throw new 
IllegalStateException(Errors.format(Errors.Keys.ValueAlreadyDefined_1, "name"));
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectIdentification.html
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectIdentification.html?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectIdentification.html
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/ObjectIdentification.html
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -49,8 +49,8 @@
           for internal cross-references. It is not useful by itself as a 
persistent unique identifier.</li>
 
       <li><code>uuid</code> is an optional attribute available on every 
object-with-identity, provided in
-          the <strong>GMD</strong> schemas that implement ISO 19115 in XML. 
May be used as a persistent
-          unique identifier, but only available within GMD context.</li>
+          the <strong>GCO</strong> schemas that implement ISO 19115 in XML. 
May be used as a persistent
+          unique identifier, but only available within GCO context.</li>
     </ul>
 
     <p>However according the <a 
href="http://schemas.opengis.net/iso/19139/20070417/gco/gcoBase.xsd";>OGC 
schema</a>,

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/PropertyType.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -31,6 +31,7 @@ import org.apache.sis.xml.IdentifierSpac
 import org.apache.sis.xml.IdentifiedObject;
 import org.apache.sis.xml.ReferenceResolver;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.internal.jaxb.PrimitiveTypeProperties;
 import org.apache.sis.util.iso.SimpleInternationalString;
 import org.apache.sis.util.resources.Errors;
@@ -104,7 +105,8 @@ import org.apache.sis.util.resources.Err
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  *
  * @param <ValueType>  the adapter subclass.
  * @param <BoundType>  the interface being adapted.
@@ -118,13 +120,6 @@ public abstract class PropertyType<Value
         extends XmlAdapter<ValueType,BoundType>
 {
     /**
-     * {@code true} if marshalling an XML based on ISO 19115:2003 model. A 
value of {@code false}
-     * (ISO 19115:2014 model) is not yet supported, so we currently use this 
variable only as a way
-     * to identify the code to revisit when we will want to support the new 
model.
-     */
-    public static final boolean LEGACY_XML = true;
-
-    /**
      * The wrapped GeoAPI metadata instance, or {@code null} if the metadata 
shall not be marshalled.
      * Metadata are not marshalled when replaced by {@code xlink:href} or 
{@code uuidref} attributes.
      */
@@ -542,6 +537,16 @@ public abstract class PropertyType<Value
     protected abstract Class<BoundType> getBoundType();
 
     /**
+     * Returns {@code true} if a {@code Since2014} subclasses should return a 
non-null value.
+     * This is a convenience method for {@code 
FilterByVersion.CURRENT_METADATA.accept()}.
+     *
+     * @return whether {@code Since2014} subclasses should return a non-null 
value.
+     */
+    protected final boolean accept2014() {
+        return FilterByVersion.CURRENT_METADATA.accept();
+    }
+
+    /**
      * Creates a new instance of this class wrapping the given metadata.
      * This method is invoked by {@link #marshal} after making sure that
      * {@code value} is not null.

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/StringAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -20,6 +20,7 @@ import java.util.Locale;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import org.opengis.util.InternationalString;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 
 
 /**
@@ -30,7 +31,7 @@ import org.apache.sis.internal.jaxb.Cont
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.0
  * @since   0.3
  * @module
  */
@@ -109,4 +110,23 @@ public class StringAdapter extends XmlAd
     public GO_CharacterString marshal(final String value) {
         return CharSequenceAdapter.wrap(Context.current(), value, value);
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends StringAdapter {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_CharacterString marshal(final String value) {
+            return FilterByVersion.CURRENT_METADATA.accept() ? 
super.marshal(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/URIAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/URIAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/URIAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/URIAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -19,19 +19,20 @@ package org.apache.sis.internal.jaxb.gco
 import java.net.URI;
 import java.net.URISyntaxException;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.internal.jaxb.Context;
 
 
 /**
- * JAXB adapter wrapping a URI value with a {@code <gmx:FileName>} element, 
for ISO-19139 compliance.
+ * JAXB adapter wrapping a URI value with a {@code <gmx:FileName>} element, 
for ISO 19139:2007 compliance.
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.4
+ * @version 1.0
  * @since   0.3
  * @module
  */
-public final class URIAdapter extends XmlAdapter<GO_CharacterString, URI> {
+public class URIAdapter extends XmlAdapter<GO_CharacterString, URI> {
     /**
      * Empty constructor for JAXB.
      */
@@ -47,7 +48,7 @@ public final class URIAdapter extends Xm
      * @throws URISyntaxException if the string is not a valid URI.
      */
     @Override
-    public URI unmarshal(final GO_CharacterString value) throws 
URISyntaxException {
+    public final URI unmarshal(final GO_CharacterString value) throws 
URISyntaxException {
         final String text = StringAdapter.toString(value);
         if (text != null) {
             final Context context = Context.current();
@@ -77,4 +78,26 @@ public final class URIAdapter extends Xm
         }
         return null;
     }
+
+    /**
+     * Replace {@code <gcx:FileName>} by {@code <gmd:URL>} if marshalling 
legacy ISO 19139:2007 document.
+     */
+    public static final class AsURL extends URIAdapter {
+        /** Empty constructor used only by JAXB. */
+        public AsURL() {
+        }
+
+        /**
+         * Replaces {@code <gcx:FileName>} by {@code <gmd:URL>} if marshalling 
legacy ISO 19139:2007 document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public GO_CharacterString marshal(final URI value) {
+            final GO_CharacterString wrapper = super.marshal(value);
+            if (wrapper != null && wrapper.type == GO_CharacterString.FILENAME 
&& !FilterByVersion.CURRENT_METADATA.accept()) {
+                wrapper.type = GO_CharacterString.URL;
+            }
+            return wrapper;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/UnitAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/UnitAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/UnitAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/UnitAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -19,6 +19,7 @@ package org.apache.sis.internal.jaxb.gco
 import javax.measure.Unit;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 import org.apache.sis.internal.jaxb.gml.Measure;
 
 
@@ -27,7 +28,7 @@ import org.apache.sis.internal.jaxb.gml.
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
  *
  * @see Measure
  *
@@ -78,4 +79,23 @@ public class UnitAdapter extends XmlAdap
             return Measure.getUOM(value, false, true);
         }
     }
+
+    /**
+     * Wraps the value only if marshalling ISO 19115-3 element.
+     * Otherwise (i.e. if marshalling a legacy ISO 19139:2007 document), omit 
the element.
+     */
+    public static final class Since2014 extends UnitAdapter {
+        /** Empty constructor used only by JAXB. */
+        public Since2014() {
+        }
+
+        /**
+         * Wraps the given value in an ISO 19115-3 element, unless we are 
marshalling an older document.
+         *
+         * @return a non-null value only if marshalling ISO 19115-3 or newer.
+         */
+        @Override public String marshal(final Unit<?> value) {
+            return FilterByVersion.CURRENT_METADATA.accept() ? 
super.marshal(value) : null;
+        }
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/package-info.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/package-info.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/package-info.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gco/package-info.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -30,9 +30,9 @@
  *
  * <ul class="verbose">
  *   <li><b>JAXB adapters for primitive types.</b><br>
- *   JAXB can write directly Java primitive type at marshalling time "as is". 
However ISO-19139
- *   requires those values to be surrounded by elements representing the data 
type. The role of
- *   these adapters is to add these elements around the value.</li>
+ *   JAXB can write directly Java primitive type at marshalling time "as is". 
However ISO 19115-3
+ *   requires those values to be wrapped by elements representing the data 
type.  A role of these
+ *   adapters is to add these elements around the value.</li>
  *
  *   <li><b>JAXB adapters for <cite>unit of measure</cite></b> as specified in 
the ISO-19103 specifications.<br>
  *   For example, a measure marshalled with JAXB will be formatted like {@code 
<gco:Measure uom="m">220.0</gco:Measure>}.</li>
@@ -51,13 +51,13 @@
  * <ul class="verbose">
  *   <li><code>org.apache.sis.<b>metadata.iso</b></code> public packages:
  *   <ul>
- *     <li>Implement the ISO 19139 {@code Foo_Type}, where <var>Foo</var> is 
the ISO name of a class.</li>
+ *     <li>Implement the ISO 19115-3 {@code Foo_Type}, where <var>Foo</var> is 
the ISO name of a class.</li>
  *     <li>Contains the {@code gco:ObjectIdentification} group of attributes 
({@code id}, {@code uuid}).</li>
  *     <li>Conceptually could have been subclasses of {@code 
ObjectIdentification} defined in this package.</li>
  *   </ul></li>
  *   <li><code>org.apache.sis.<b>internal.jaxb</b></code> private packages:
  *   <ul>
- *     <li>Implement the ISO 19139 {@code Foo_PropertyType} as subclasses of 
the {@link org.apache.sis.internal.jaxb.gco.PropertyType} class.</li>
+ *     <li>Implement the ISO 19115-3 {@code Foo_PropertyType} as subclasses of 
the {@link org.apache.sis.internal.jaxb.gco.PropertyType} class.</li>
  *     <li>Contains the {@code gco:ObjectReference} group of attributes 
({@code xlink}, {@code uuidref}).</li>
  *     <li>Attributes are declared in the {@link 
org.apache.sis.internal.jaxb.gco.ObjectReference} Java class.</li>
  *    </ul></li>
@@ -77,7 +77,8 @@
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  *
  * @see javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
  *
@@ -86,7 +87,7 @@
  */
 @XmlSchema(elementFormDefault = XmlNsForm.QUALIFIED, namespace = 
Namespaces.GCO, xmlns = {
     @XmlNs(prefix = "gco", namespaceURI = Namespaces.GCO),
-    @XmlNs(prefix = "gmx", namespaceURI = Namespaces.GMX)
+    @XmlNs(prefix = "gcx", namespaceURI = Namespaces.GCX)
 })
 @XmlAccessorType(XmlAccessType.NONE)
 /*

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -20,12 +20,13 @@ import javax.xml.bind.annotation.adapter
 import org.opengis.util.CodeList;
 import org.apache.sis.util.iso.Types;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
 
 
 /**
- * An adapter for {@link CodeList}, in order to implement the ISO-19139 
standard. This object
- * wraps a {@link CodeListUID}, which contain {@link CodeListUID#codeList 
codeList} and
- * {@link CodeListUID#codeListValue codeListValue} attributes. The result 
looks like below:
+ * An adapter for {@link CodeList}, in order to implement the ISO 19115-3 
standard.
+ * This object wraps a {@link CodeListUID}, which contain {@link 
CodeListUID#codeList codeList}
+ * and {@link CodeListUID#codeListValue codeListValue} attributes. The result 
looks like below:
  *
  * {@preformat xml
  *   <dateType>
@@ -40,7 +41,7 @@ import org.apache.sis.internal.jaxb.Cont
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @version 1.0
  *
  * @param <ValueType> The subclass implementing this adapter.
  * @param <BoundType> The code list being adapted.
@@ -63,7 +64,7 @@ public abstract class CodeListAdapter<Va
     }
 
     /**
-     * Creates a wrapper for a {@link CodeList}, in order to handle the format 
specified in ISO-19139.
+     * Creates a wrapper for a {@link CodeList}, in order to handle the format 
specified in ISO 19115-3.
      *
      * @param  value  the value of {@link CodeList} to be marshalled.
      */
@@ -96,6 +97,16 @@ public abstract class CodeListAdapter<Va
     protected abstract Class<BoundType> getCodeListClass();
 
     /**
+     * Returns {@code true} if a {@code Since2014} subclasses should return a 
non-null value.
+     * This is a convenience method for {@code 
FilterByVersion.CURRENT_METADATA.accept()}.
+     *
+     * @return whether {@code Since2014} subclasses should return a non-null 
value.
+     */
+    protected final boolean accept2014() {
+        return FilterByVersion.CURRENT_METADATA.accept();
+    }
+
+    /**
      * Substitutes the adapter value read from an XML stream by the object 
which will
      * contain the value. JAXB calls automatically this method at 
unmarshalling time.
      *

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListUID.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListUID.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListUID.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/CodeListUID.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -30,7 +30,7 @@ import org.apache.sis.internal.jaxb.Sche
 
 
 /**
- * Stores information about {@link CodeList} in order to marshal in the way 
defined by ISO-19139.
+ * Stores information about {@link CodeList} in order to marshal in the way 
defined by ISO 19115-3.
  * This class provides the {@link #codeList} and {@link #codeListValue} 
attributes to be marshalled.
  * Those attributes should be unique for each code.
  *
@@ -41,7 +41,8 @@ import org.apache.sis.internal.jaxb.Sche
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.7
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  *
  * @see CodeListAdapter
  *
@@ -56,6 +57,7 @@ public final class CodeListUID {
      * Some examples of strings returned by this method are:
      *
      * <ul>
+     *   <li>{@code 
"http://standards.iso.org/iso/19115/resources/Codelist/cat/codelists.xml#LanguageCode"}</li>
      *   <li>{@code 
"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#LanguageCode"}</li>
      *   <li>{@code 
"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode"}</li>
      *   <li>{@code 
"http://schemas.opengis.net/iso/19139/20070417/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode"}</li>
@@ -64,11 +66,21 @@ public final class CodeListUID {
      * @param  context     the current (un)marshalling context, or {@code 
null} if none.
      * @param  identifier  the UML identifier of the code list.
      * @return the URL to the given code list in the given schema.
+     *
+     * @see org.apache.sis.xml.XML#SCHEMAS
      */
     private static String schema(final Context context, final String 
identifier) {
-        return Context.schema(context, "gmd", Schemas.METADATA_ROOT)
-                .append(Schemas.CODELISTS_PATH)     // Future SIS version may 
switch between localized/unlocalized file.
-                .append('#').append(identifier).toString();
+        final String prefix, root, path;
+        if (Context.isFlagSet(context, Context.LEGACY_METADATA)) {
+            prefix = "gmd";
+            root = Schemas.METADATA_ROOT_LEGACY;
+            path = Schemas.CODELISTS_PATH_LEGACY;   // Future SIS version may 
switch between localized/unlocalized file.
+        } else {
+            prefix = "cat";
+            root = Schemas.METADATA_ROOT;
+            path = Schemas.CODELISTS_PATH;
+        }
+        return Context.schema(context, prefix, 
root).append(path).append('#').append(identifier).toString();
     }
 
     /**
@@ -105,7 +117,7 @@ public final class CodeListUID {
     /**
      * Default empty constructor for JAXB.
      */
-    private CodeListUID() {
+    public CodeListUID() {
     }
 
     /**

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/Country.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/Country.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/Country.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/Country.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -21,15 +21,18 @@ import javax.xml.bind.annotation.XmlType
 import javax.xml.bind.annotation.XmlElement;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.FilterByVersion;
+import org.apache.sis.internal.jaxb.LegacyNamespaces;
 import org.apache.sis.internal.jaxb.gco.GO_CharacterString;
 import org.apache.sis.internal.jaxb.gco.CharSequenceAdapter;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.xml.Namespaces;
 
 
 /**
- * JAXB wrapper for {@link Locale}, in order to integrate the value in an 
element respecting
- * the ISO-19139 standard. See package documentation for more information 
about the handling
- * of {@code CodeList} in ISO-19139.
+ * JAXB wrapper for {@link Locale}
+ * in order to wrap the value in an XML element as specified by ISO 19115-3 
standard.
+ * See package documentation for more information about the handling of {@code 
CodeList} in ISO 19115-3.
  *
  * <p>This adapter formats the locale like below:</p>
  *
@@ -43,19 +46,25 @@ import org.apache.sis.util.resources.Err
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.4
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
-@XmlType(name = "Country_PropertyType")
+@XmlType(name = "Country_PropertyType", namespace = Namespaces.LAN)
 public final class Country extends GO_CharacterString {
     /**
      * The country using a {@link org.opengis.util.CodeList}-like format.
+     * This was called "Country" in ISO 19139:2007 and has been renamed 
"CountryCode" in ISO 19115-3
      */
-    @XmlElement(name = "Country")
     private CodeListUID identifier;
 
     /**
+     * {@code true} if marshalling ISO 19139:2007, or {@code false} if 
marshalling ISO 19115-3.
+     */
+    private boolean isLegacyMetadata;
+
+    /**
      * Empty constructor for JAXB only.
      */
     private Country() {
@@ -67,6 +76,7 @@ public final class Country extends GO_Ch
      */
     private Country(final CharSequence code) {
         super(code);
+        detectVersion();
     }
 
     /**
@@ -80,6 +90,46 @@ public final class Country extends GO_Ch
      */
     private Country(final Context context, final String codeListValue, final 
String codeSpace, final String value) {
         identifier = new CodeListUID(context, "Country", codeListValue, 
codeSpace, value);
+        detectVersion();
+    }
+
+    /**
+     * Determines if we are marshalling ISO 19139:2007 or ISO 19115-3 
documents.
+     */
+    private void detectVersion() {
+        isLegacyMetadata = !FilterByVersion.CURRENT_METADATA.accept();
+    }
+
+    /**
+     * Gets the value of the Country code using ISO 19139:2007 element name.
+     */
+    @XmlElement(name = "Country", namespace = LegacyNamespaces.GMD)
+    private CodeListUID getCountry() {
+        return isLegacyMetadata ? identifier : null;
+    }
+
+    /**
+     * Sets the value of the Country code in ISO 19139:2007 element name.
+     */
+    @SuppressWarnings("unused")
+    private void setCountry(CodeListUID newValue) {
+        identifier = newValue;
+    }
+
+    /**
+     * Gets the value of the Country code using ISO 19115-3 element name.
+     */
+    @XmlElement(name = "CountryCode", namespace = Namespaces.LAN)
+    private CodeListUID getCountryCode() {
+        return isLegacyMetadata ? null : identifier;
+    }
+
+    /**
+     * Sets the value of the Country code in ISO 19115-3 element name.
+     */
+    @SuppressWarnings("unused")
+    private void setCountryCode(CodeListUID newValue) {
+        identifier = newValue;
     }
 
     /**

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/EnumAdapter.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/EnumAdapter.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/EnumAdapter.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/EnumAdapter.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -22,7 +22,7 @@ import org.apache.sis.util.iso.Types;
 
 
 /**
- * An adapter for {@link Enum}, in order to implement the ISO-19139 standard.
+ * An adapter for {@link Enum}, in order to implement the ISO 19115-3 standard.
  * Example:
  *
  * {@preformat xml

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LanguageCode.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LanguageCode.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LanguageCode.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LanguageCode.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -17,17 +17,18 @@
 package org.apache.sis.internal.jaxb.gmd;
 
 import java.util.Locale;
-import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
 import org.apache.sis.internal.jaxb.Context;
 import org.apache.sis.internal.jaxb.gco.GO_CharacterString;
 import org.apache.sis.internal.jaxb.gco.CharSequenceAdapter;
+import org.apache.sis.xml.Namespaces;
 
 
 /**
- * JAXB wrapper for {@link Locale}, in order to integrate the value in an 
element respecting
- * the ISO-19139 standard. See package documentation for more information 
about the handling
- * of {@code CodeList} in ISO-19139.
+ * JAXB wrapper for {@link Locale}
+ * in order to wrap the value in an XML element as specified by ISO 19115-3 
standard.
+ * See package documentation for more information about the handling of {@code 
CodeList} in ISO 19115-3.
  *
  * <p>This adapter formats the locale like below:</p>
  *
@@ -41,16 +42,17 @@ import org.apache.sis.internal.jaxb.gco.
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.4
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  * @since   0.3
  * @module
  */
-@XmlType(name = "LanguageCode_PropertyType")
+@XmlType(name = "LanguageCode_PropertyType", namespace = Namespaces.LAN)
 public final class LanguageCode extends GO_CharacterString {
     /**
      * The language using a {@link org.opengis.util.CodeList}-like format.
      */
-    @XmlElement(name = "LanguageCode")
+    @XmlElement(name = "LanguageCode", namespace = Namespaces.LAN)
     private CodeListUID identifier;
 
     /**

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LocalisedCharacterString.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LocalisedCharacterString.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LocalisedCharacterString.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/LocalisedCharacterString.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -40,7 +40,7 @@ import org.apache.sis.util.Debug;
 final class LocalisedCharacterString {
     /**
      * A prefix to concatenate with the {@linkplain Locale#getISO3Language() 
language code}.
-     * This is a hack for a common pattern found in the way locales are 
specified in ISO 19139 files.
+     * This is a hack for a common pattern found in the way locales are 
specified in ISO 19139:2007 files.
      * See <a href="https://issues.apache.org/jira/browse/SIS-137";>SIS-137</a> 
for more information.
      */
     private static final String PREFIX = "#locale-";

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/PT_FreeText.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/PT_FreeText.java?rev=1825254&r1=1825253&r2=1825254&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/PT_FreeText.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gmd/PT_FreeText.java
 [UTF-8] Sat Feb 24 16:13:58 2018
@@ -27,27 +27,28 @@ import org.apache.sis.internal.jaxb.Cont
 import org.apache.sis.internal.jaxb.gco.GO_CharacterString;
 import org.apache.sis.util.iso.DefaultInternationalString;
 import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.xml.Namespaces;
 import org.apache.sis.util.ArraysExt;
 
 
 /**
- * JAXB wrapper for ISO-19139 {@code <PT_FreeText>} element mapped to {@link 
InternationalString}.
- * It will be used in order to marshal and unmarshal international strings 
localized in several
- * language, using the {@link DefaultInternationalString} implementation 
class. Example:
+ * JAXB wrapper for ISO 19115-3 {@code <PT_FreeText>} element mapped to {@link 
InternationalString}.
+ * It will be used in order to marshal and unmarshal international strings 
localized in several language,
+ * using the {@link DefaultInternationalString} implementation class. Example:
  *
  * {@preformat xml
- *   <gmd:title xsi:type="gmd:PT_FreeText_PropertyType">
+ *   <cit:title xsi:type="lan:PT_FreeText_PropertyType">
  *     <gco:CharacterString>Some title in english is present in this 
node</gco:CharacterString>
- *     <gmd:PT_FreeText>
- *       <gmd:textGroup>
- *         <gmd:LocalisedCharacterString locale="#locale-fra">Un titre en 
français</gmd:LocalisedCharacterString>
- *       </gmd:textGroup>
- *     </gmd:PT_FreeText>
- *   </gmd:title>
+ *     <lan:PT_FreeText>
+ *       <lan:textGroup>
+ *         <lan:LocalisedCharacterString locale="#locale-fra">Un titre en 
français</lan:LocalisedCharacterString>
+ *       </lan:textGroup>
+ *     </lan:PT_FreeText>
+ *   </cit:title>
  * }
  *
- * If there is more than one locale, the whole {@code <gmd:textGroup>} block 
is repeated for each
- * locale, instead than repeating {@code <gmd:LocalisedCharacterString>} 
inside the same group as
+ * If there is more than one locale, the whole {@code <lan:textGroup>} block 
is repeated for each
+ * locale, instead than repeating {@code <lan:LocalisedCharacterString>} 
inside the same group as
  * we could expect. However at unmarshalling time, both forms are accepted. 
See GEOTK-152 for more
  * information.
  *
@@ -56,23 +57,24 @@ import org.apache.sis.util.ArraysExt;
  *
  * @author  Cédric Briançon (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
- * @version 0.6
+ * @author  Cullen Rombach (Image Matters)
+ * @version 1.0
  *
  * @see <a href="http://jira.geotoolkit.org/browse/GEOTK-152";>GEOTK-152</a>
  *
  * @since 0.3
  * @module
  */
-@XmlType(name = "PT_FreeText_PropertyType")
+@XmlType(name = "PT_FreeText_PropertyType", namespace = Namespaces.LAN)
 public final class PT_FreeText extends GO_CharacterString {
     /**
-     * A set of {@link LocalisedCharacterString}, representing the {@code 
<gmd:textGroup>} element.
+     * A set of {@link LocalisedCharacterString}, representing the {@code 
<lan:textGroup>} element.
      * The array shall contain one element for each locale.
      *
      * @see <a href="http://jira.geotoolkit.org/browse/GEOTK-152";>GEOTK-152</a>
      */
-    @XmlElementWrapper(name = "PT_FreeText")
-    @XmlElement(required = true)
+    @XmlElementWrapper(name = "PT_FreeText", namespace = Namespaces.LAN)
+    @XmlElement(namespace = Namespaces.LAN, required = true)
     private TextGroup[] textGroup;
 
     /**
@@ -171,11 +173,11 @@ public final class PT_FreeText extends G
      */
     @Override
     protected CharSequence toCharSequence() {
-        String defaultValue = toString(); // May be null.
+        String defaultValue = toString();                                      
 // May be null.
         if (defaultValue != null && contains(defaultValue)) {
             /*
              * If the <gco:CharacterString> value is repeated in one of the
-             * <gmd:LocalisedCharacterString> elements, keep only the localized
+             * <lan:LocalisedCharacterString> elements, keep only the localized
              * version  (because it specifies the locale, while the unlocalized
              * string saids nothing on that matter).
              */


Reply via email to