sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1626345 [6/14] - in /sis/trunk: ./ core/sis-feature/src/main/java/org/apache/sis/feature/ core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/code/ core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/gml/ core/sis-metadat...
Date Fri, 19 Sep 2014 21:46:44 GMT
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=1626345&r1=1626344&r2=1626345&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] Fri Sep 19 21:46:39 2014
@@ -29,6 +29,15 @@ import org.opengis.metadata.extent.Bound
  * (<var>x</var>,<var>y</var>) coordinates of the polygon.
  * The last point replicates first point.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
@@ -107,9 +116,9 @@ public class DefaultBoundingPolygon exte
     }
 
     /**
-     * Returns the sets of points defining the bounding polygon.
+     * Returns the sets of points defining the bounding polygon or other geometry.
      *
-     * @return The sets of points defining the bounding polygon.
+     * @return The sets of points defining the resource boundary.
      */
     @Override
     @XmlElement(name = "polygon", required = true)
@@ -118,9 +127,9 @@ public class DefaultBoundingPolygon exte
     }
 
     /**
-     * Sets the sets of points defining the bounding polygon.
+     * Sets the sets of points defining the resource boundary.
      *
-     * @param newValues The new polygons.
+     * @param newValues The new boundaries.
      */
     public void setPolygons(final Collection<? extends Geometry> newValues) {
         polygons = writeCollection(newValues, polygons, Geometry.class);

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=1626345&r1=1626344&r2=1626345&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] Fri Sep 19 21:46:39 2014
@@ -48,6 +48,15 @@ import org.apache.sis.internal.metadata.
  *   <li>{@link Extents#getGeographicBoundingBox(Extent)} for extracting a global geographic bounding box.</li>
  * </ul>
  *
+ * {@section Limitations}
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)

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=1626345&r1=1626344&r2=1626345&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] Fri Sep 19 21:46:39 2014
@@ -86,6 +86,15 @@ import org.apache.sis.internal.jdk7.Obje
  * If more precision is desired, an {@code Envelope} should be considered instead.
  * </div>
  *
+ * {@section Limitations}
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)

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=1626345&r1=1626344&r2=1626345&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] Fri Sep 19 21:46:39 2014
@@ -28,6 +28,15 @@ import org.apache.sis.metadata.iso.Defau
 /**
  * Description of the geographic area using identifiers.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultSpatialTemporalExtent.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultSpatialTemporalExtent.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultSpatialTemporalExtent.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultSpatialTemporalExtent.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -21,6 +21,8 @@ import javax.xml.bind.annotation.XmlType
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.geometry.Envelope;
+import org.opengis.metadata.extent.TemporalExtent;
+import org.opengis.metadata.extent.VerticalExtent;
 import org.opengis.metadata.extent.GeographicExtent;
 import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.opengis.metadata.extent.SpatialTemporalExtent;
@@ -31,11 +33,21 @@ import org.apache.sis.internal.metadata.
 /**
  * Extent with respect to date/time and spatial boundaries.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
+ * @author  Rémi Maréchal (Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.3
+ * @version 0.5
  * @module
  */
 @XmlType(name = "EX_SpatialTemporalExtent_Type")
@@ -53,12 +65,35 @@ public class DefaultSpatialTemporalExten
     private Collection<GeographicExtent> spatialExtent;
 
     /**
+     * Vertical extent component.
+     */
+    private VerticalExtent verticalExtent;
+
+    /**
      * Constructs an initially empty spatial-temporal extent.
      */
     public DefaultSpatialTemporalExtent() {
     }
 
     /**
+     * Constructs a new spatial-temporal extent initialized to the specified values.
+     *
+     * @param spatialExtent  The spatial extent component of composite spatial and temporal extent.
+     * @param verticalExtent The vertical extent component, or {@code null} if none.
+     * @param extent         The date and time for the content of the dataset, or {@code null} if unspecified.
+     *
+     * @since 0.5
+     */
+    public DefaultSpatialTemporalExtent(final GeographicExtent spatialExtent,
+                                        final VerticalExtent verticalExtent,
+                                        final TemporalExtent extent)
+    {
+        super(extent);
+        this.verticalExtent = verticalExtent;
+        this.spatialExtent  = singleton(spatialExtent, GeographicExtent.class);
+    }
+
+    /**
      * Constructs a new instance initialized with the values from the specified metadata object.
      * This is a <cite>shallow</cite> copy constructor, since the other metadata contained in the
      * given object are not recursively copied.
@@ -70,7 +105,10 @@ public class DefaultSpatialTemporalExten
     public DefaultSpatialTemporalExtent(final SpatialTemporalExtent object) {
         super(object);
         if (object != null) {
-            spatialExtent = copyCollection(object.getSpatialExtent(), GeographicExtent.class);
+            spatialExtent  = copyCollection(object.getSpatialExtent(), GeographicExtent.class);
+            if (object instanceof DefaultSpatialTemporalExtent) {
+                verticalExtent = ((DefaultSpatialTemporalExtent) object).getVerticalExtent();
+            }
         }
     }
 
@@ -120,6 +158,30 @@ public class DefaultSpatialTemporalExten
     }
 
     /**
+     * Returns the vertical extent component.
+     *
+     * @return Vertical extent component, or {@code null} if none.
+     *
+     * @since 0.5
+     */
+    @XmlElement(name = "verticalExtent")
+    public VerticalExtent getVerticalExtent() {
+        return verticalExtent;
+    }
+
+    /**
+     * Set the vertical extent component.
+     *
+     * @param newValue The new vertical extent component.
+     *
+     * @since 0.5
+     */
+    public void setVerticalExtent(final VerticalExtent newValue) {
+        checkWritePermission();
+        verticalExtent = newValue;
+    }
+
+    /**
      * Sets this spatio-temporal extent to values inferred from the specified envelope.
      * The envelope shall have at least a temporal component. If a spatial component is
      * also found, then:

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultTemporalExtent.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -44,6 +44,15 @@ import org.apache.sis.internal.metadata.
  *   <li>{@link #setBounds(Envelope)} for setting the extent from the given envelope.</li>
  * </ul>
  *
+ * {@section Limitations}
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
@@ -93,7 +102,7 @@ public class DefaultTemporalExtent exten
      *
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is is an instance of {@link SpatialTemporalExtent},
+     *   <li>Otherwise if the given object is an instance of {@link SpatialTemporalExtent},
      *       then this method delegates to the {@code castOrCopy(…)} method of the corresponding
      *       SIS subclass.</li>
      *   <li>Otherwise if the given object is already an instance of

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/DefaultVerticalExtent.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -37,6 +37,15 @@ import org.apache.sis.internal.metadata.
  *   <li>{@link #setBounds(Envelope)} for setting the extent from the given envelope.</li>
  * </ul>
  *
+ * {@section Limitations}
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
@@ -82,16 +91,16 @@ public class DefaultVerticalExtent exten
     /**
      * Creates a vertical extent initialized to the specified values.
      *
-     * @param minimumValue The lowest vertical extent contained in the dataset.
-     * @param maximumValue The highest vertical extent contained in the dataset.
+     * @param minimumValue The lowest vertical extent contained in the dataset, or {@link Double#NaN} if none.
+     * @param maximumValue The highest vertical extent contained in the dataset, or {@link Double#NaN} if none.
      * @param verticalCRS  The information about the vertical coordinate reference system, or {@code null}.
      */
     public DefaultVerticalExtent(final double minimumValue,
                                  final double maximumValue,
                                  final VerticalCRS verticalCRS)
     {
-        this.minimumValue = minimumValue;
-        this.maximumValue = maximumValue;
+        if (!Double.isNaN(minimumValue)) this.minimumValue = minimumValue;
+        if (!Double.isNaN(maximumValue)) this.maximumValue = maximumValue;
         this.verticalCRS  = verticalCRS;
     }
 

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/package-info.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/package-info.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/package-info.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/extent/package-info.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -60,7 +60,7 @@
  *
  *       <li>{@link org.apache.sis.metadata.iso.extent.Extents#intersection
  *       intersection(GeographicBoundingBox, GeographicBoundingBox)}
- *       for computing the intersection of two geographic bounding boxes, which may be null.</li>
+ *       for computing the intersection of two geographic bounding boxes.</li>
  *
  *       <li>{@link org.apache.sis.metadata.iso.extent.Extents#area
  *       area(GeographicBoundingBox)}
@@ -118,7 +118,7 @@
  * </ul>
  *
  * {@section Null values, nil objects and collections}
- * All constructors (except the <cite>copy constructors</cite>) and setter methods accept {@code null} arguments.
+ * All constructors and setter methods accept {@code null} arguments.
  * A null argument value means that the metadata element can not be provided, and the reason for that is unspecified.
  * Alternatively, users can specify why a metadata element is missing by providing a value created by
  * {@link org.apache.sis.xml.NilReason#createNilObject NilReason.createNilObject(Class)}.

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/AbstractIdentification.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -21,19 +21,24 @@ 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.metadata.Identifier;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.citation.ResponsibleParty;
 import org.opengis.metadata.constraint.Constraints;
 import org.opengis.metadata.distribution.Format;
+import org.opengis.metadata.extent.Extent;
 import org.opengis.metadata.identification.AggregateInformation;
 import org.opengis.metadata.identification.Identification;
 import org.opengis.metadata.identification.DataIdentification;
-import org.opengis.metadata.identification.ServiceIdentification;
 import org.opengis.metadata.identification.BrowseGraphic;
 import org.opengis.metadata.identification.Keywords;
 import org.opengis.metadata.identification.Progress;
+import org.opengis.metadata.identification.Resolution;
+import org.opengis.metadata.identification.TopicCategory;
 import org.opengis.metadata.identification.Usage;
+import org.opengis.metadata.identification.ServiceIdentification;
 import org.opengis.metadata.maintenance.MaintenanceInformation;
+import org.opengis.metadata.spatial.SpatialRepresentationType;
 import org.opengis.util.InternationalString;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.util.iso.Types;
@@ -42,17 +47,38 @@ import org.apache.sis.util.iso.Types;
 /**
  * Basic information required to uniquely identify a resource or resources.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.3
+ * @version 0.5
  * @module
  */
 @XmlType(name = "AbstractMD_Identification_Type", propOrder = {
-    "citation", "abstract", "purpose", "credits", "status", "pointOfContacts",
-    "resourceMaintenances", "graphicOverviews", "resourceFormats", "descriptiveKeywords",
-    "resourceSpecificUsages", "resourceConstraints", "aggregationInfo"
+    "citation",
+    "abstract",
+    "purpose",
+    "credits",
+    "status",
+    "pointOfContacts",
+    "resourceMaintenances",
+    "graphicOverviews",
+    "resourceFormats",
+    "descriptiveKeywords",
+    "resourceSpecificUsages",
+    "resourceConstraints",
+    "aggregationInfo",
+    "spatialRepresentationTypes", // After 'pointOfContact' according ISO 19115:2014, but here for ISO 19115:2003 compatibility.
+    "spatialResolutions"          // Shall be kept next to 'spatialRepresentationTypes'
 })
 @XmlRootElement(name = "MD_Identification")
 @XmlSeeAlso({
@@ -66,12 +92,12 @@ public class AbstractIdentification exte
     private static final long serialVersionUID = -6512101909569333306L;
 
     /**
-     * Citation data for the resource(s).
+     * Citation for the resource(s).
      */
     private Citation citation;
 
     /**
-     * Brief narrative summary of the content of the resource(s).
+     * Brief narrative summary of the resource(s).
      */
     private InternationalString abstracts;
 
@@ -97,6 +123,36 @@ public class AbstractIdentification exte
     private Collection<ResponsibleParty> pointOfContacts;
 
     /**
+     * Methods used to spatially represent geographic information.
+     */
+    private Collection<SpatialRepresentationType> spatialRepresentationTypes;
+
+    /**
+     * Factor which provides a general understanding of the density of spatial data in the resource(s).
+     */
+    private Collection<Resolution> spatialResolutions;
+
+    /**
+     * Main theme(s) of the resource.
+     */
+    private Collection<TopicCategory> topicCategories;
+
+    /**
+     * Spatial and temporal extent of the resource.
+     */
+    private Collection<Extent> extents;
+
+    /**
+     * Other documentation associated with the resource.
+     */
+    private Collection<Citation> additionalDocumentations;
+
+    /**
+     * Code that identifies the level of processing in the producers coding system of a resource.
+     */
+    private Identifier processingLevel;
+
+    /**
      * Provides information about the frequency of resource updates, and the scope of those updates.
      */
     private Collection<MaintenanceInformation> resourceMaintenances;
@@ -161,19 +217,28 @@ public class AbstractIdentification exte
     public AbstractIdentification(final Identification object) {
         super(object);
         if (object != null) {
-            citation               = object.getCitation();
-            abstracts              = object.getAbstract();
-            purpose                = object.getPurpose();
-            credits                = copyCollection(object.getCredits(), String.class);
-            status                 = copyCollection(object.getStatus(), Progress.class);
-            pointOfContacts        = copyCollection(object.getPointOfContacts(), ResponsibleParty.class);
-            resourceMaintenances   = copyCollection(object.getResourceMaintenances(), MaintenanceInformation.class);
-            graphicOverviews       = copyCollection(object.getGraphicOverviews(), BrowseGraphic.class);
-            resourceFormats        = copyCollection(object.getResourceFormats(), Format.class);
-            descriptiveKeywords    = copyCollection(object.getDescriptiveKeywords(), Keywords.class);
-            resourceSpecificUsages = copyCollection(object.getResourceSpecificUsages(), Usage.class);
-            resourceConstraints    = copyCollection(object.getResourceConstraints(), Constraints.class);
-            aggregationInfo        = copyCollection(object.getAggregationInfo(), AggregateInformation.class);
+            citation                   = object.getCitation();
+            abstracts                  = object.getAbstract();
+            purpose                    = object.getPurpose();
+            credits                    = copyCollection(object.getCredits(), String.class);
+            status                     = copyCollection(object.getStatus(), Progress.class);
+            pointOfContacts            = copyCollection(object.getPointOfContacts(), ResponsibleParty.class);
+            resourceMaintenances       = copyCollection(object.getResourceMaintenances(), MaintenanceInformation.class);
+            graphicOverviews           = copyCollection(object.getGraphicOverviews(), BrowseGraphic.class);
+            resourceFormats            = copyCollection(object.getResourceFormats(), Format.class);
+            descriptiveKeywords        = copyCollection(object.getDescriptiveKeywords(), Keywords.class);
+            resourceSpecificUsages     = copyCollection(object.getResourceSpecificUsages(), Usage.class);
+            resourceConstraints        = copyCollection(object.getResourceConstraints(), Constraints.class);
+            aggregationInfo            = copyCollection(object.getAggregationInfo(), AggregateInformation.class);
+            if (object instanceof AbstractIdentification) {
+                final AbstractIdentification c = (AbstractIdentification) object;
+                spatialRepresentationTypes = copyCollection(c.getSpatialRepresentationTypes(), SpatialRepresentationType.class);
+                spatialResolutions         = copyCollection(c.getSpatialResolutions(), Resolution.class);
+                topicCategories            = copyCollection(c.getTopicCategories(), TopicCategory.class);
+                extents                    = copyCollection(c.getExtents(), Extent.class);
+                additionalDocumentations   = copyCollection(c.getAdditionalDocumentations(), Citation.class);
+                processingLevel            = c.getProcessingLevel();
+            }
         }
     }
 
@@ -183,7 +248,7 @@ public class AbstractIdentification exte
      *
      * <ul>
      *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is is an instance of {@link DataIdentification} or
+     *   <li>Otherwise if the given object is an instance of {@link DataIdentification} or
      *       {@link ServiceIdentification}, then this method delegates to the {@code castOrCopy(…)}
      *       method of the corresponding SIS subclass. Note that if the given object implements
      *       more than one of the above-cited interfaces, then the {@code castOrCopy(…)} method
@@ -215,9 +280,9 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Returns the citation data for the resource(s).
+     * Returns the citation for the resource(s).
      *
-     * @return Citation data for the resource(s), or {@code null}.
+     * @return Citation for the resource(s).
      */
     @Override
     @XmlElement(name = "citation", required = true)
@@ -226,7 +291,7 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Sets the citation data for the resource(s).
+     * Sets the citation for the resource(s).
      *
      * @param newValue The new citation.
      */
@@ -236,9 +301,9 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Returns a brief narrative summary of the content of the resource(s).
+     * Returns a brief narrative summary of the resource(s).
      *
-     * @return Brief narrative summary of the content, or {@code null}.
+     * @return Brief narrative summary of the resource(s).
      */
     @Override
     @XmlElement(name = "abstract", required = true)
@@ -247,9 +312,9 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Sets a brief narrative summary of the content of the resource(s).
+     * Sets a brief narrative summary of the resource(s).
      *
-     * @param newValue The new abstract.
+     * @param newValue The new summary of resource(s).
      */
     public void setAbstract(final InternationalString newValue) {
         checkWritePermission();
@@ -270,7 +335,7 @@ public class AbstractIdentification exte
     /**
      * Sets a summary of the intentions with which the resource(s) was developed.
      *
-     * @param newValue The new purpose.
+     * @param newValue The new summary of intention.
      */
     public void setPurpose(final InternationalString newValue) {
         checkWritePermission();
@@ -280,6 +345,10 @@ public class AbstractIdentification exte
     /**
      * Returns the recognition of those who contributed to the resource(s).
      *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * The element type may be changed to the {@code InternationalString} interface in GeoAPI 4.0.
+     * </div>
+     *
      * @return Recognition of those who contributed to the resource(s).
      */
     @Override
@@ -291,6 +360,10 @@ public class AbstractIdentification exte
     /**
      * Sets the recognition of those who contributed to the resource(s).
      *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * The element type may be changed to the {@code InternationalString} interface in GeoAPI 4.0.
+     * </div>
+     *
      * @param newValues The new credits.
      */
     public void setCredits(final Collection<? extends String> newValues) {
@@ -321,7 +394,14 @@ public class AbstractIdentification exte
      * Returns the identification of, and means of communication with, person(s) and organizations(s)
      * associated with the resource(s).
      *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * As of ISO 19115:2014, {@code ResponsibleParty} is replaced by the {@link Responsibility} parent interface.
+     * This change may be applied in GeoAPI 4.0.
+     * </div>
+     *
      * @return Means of communication with person(s) and organizations(s) associated with the resource(s).
+     *
+     * @see org.apache.sis.metadata.iso.DefaultMetadata#getContacts()
      */
     @Override
     @XmlElement(name = "pointOfContact")
@@ -330,7 +410,12 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Sets the point of contacts.
+     * Sets the means of communication with persons(s) and organizations(s) associated with the resource(s).
+     *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * As of ISO 19115:2014, {@code ResponsibleParty} is replaced by the {@link Responsibility} parent interface.
+     * This change may be applied in GeoAPI 4.0.
+     * </div>
      *
      * @param newValues The new points of contacts.
      */
@@ -339,6 +424,146 @@ public class AbstractIdentification exte
     }
 
     /**
+     * Returns the methods used to spatially represent geographic information.
+     *
+     * @return Methods used to spatially represent geographic information.
+     *
+     * @since 0.5
+     */
+    @XmlElement(name = "spatialRepresentationType")
+    public Collection<SpatialRepresentationType> getSpatialRepresentationTypes() {
+        return spatialRepresentationTypes = nonNullCollection(spatialRepresentationTypes, SpatialRepresentationType.class);
+    }
+
+    /**
+     * Sets the method used to spatially represent geographic information.
+     *
+     * @param newValues The new spatial representation types.
+     *
+     * @since 0.5
+     */
+    public void setSpatialRepresentationTypes(final Collection<? extends SpatialRepresentationType> newValues) {
+        spatialRepresentationTypes = writeCollection(newValues, spatialRepresentationTypes, SpatialRepresentationType.class);
+    }
+
+    /**
+     * Returns the factor which provides a general understanding of the density of spatial data in the resource(s).
+     * This element should be repeated when describing upper and lower range.
+     *
+     * @return Factor which provides a general understanding of the density of spatial data.
+     *
+     * @since 0.5
+     */
+    @XmlElement(name = "spatialResolution")
+    public Collection<Resolution> getSpatialResolutions() {
+        return spatialResolutions = nonNullCollection(spatialResolutions, Resolution.class);
+    }
+
+    /**
+     * Sets the factor which provides a general understanding of the density of spatial data in the resource(s).
+     *
+     * @param newValues The new spatial resolutions.
+     *
+     * @since 0.5
+     */
+    public void setSpatialResolutions(final Collection<? extends Resolution> newValues) {
+        spatialResolutions = writeCollection(newValues, spatialResolutions, Resolution.class);
+    }
+
+    /**
+     * Returns the main theme(s) of the resource.
+     *
+     * @return Main theme(s).
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "topicCategory")
+    public Collection<TopicCategory> getTopicCategories()  {
+        return topicCategories = nonNullCollection(topicCategories, TopicCategory.class);
+    }
+
+    /**
+     * Sets the main theme(s) of the resource.
+     *
+     * @param newValues The new topic categories.
+     *
+     * @since 0.5
+     */
+    public void setTopicCategories(final Collection<? extends TopicCategory> newValues) {
+        topicCategories = writeCollection(newValues, topicCategories, TopicCategory.class);
+    }
+
+    /**
+     * Returns the spatial and temporal extent of the resource.
+     *
+     * @return Spatial and temporal extent of the resource.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "extent")
+    public Collection<Extent> getExtents() {
+        return extents = nonNullCollection(extents, Extent.class);
+    }
+
+    /**
+     * Sets the spatial and temporal extent of the resource.
+     *
+     * @param newValues The new extents
+     *
+     * @since 0.5
+     */
+    public void setExtents(final Collection<? extends Extent> newValues) {
+        extents = writeCollection(newValues, extents, Extent.class);
+    }
+
+    /**
+     * Returns other documentation associated with the resource.
+     *
+     * @return Other documentation associated with the resource.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "additionalDocumentation")
+    public Collection<Citation> getAdditionalDocumentations() {
+        return additionalDocumentations = nonNullCollection(additionalDocumentations, Citation.class);
+    }
+
+    /**
+     * Sets other documentation associated with the resource.
+     *
+     * @param newValues The documentation to associate with the resource.
+     *
+     * @since 0.5
+     */
+    public void setAdditionalDocumentations(final Collection<? extends Citation> newValues) {
+        additionalDocumentations = writeCollection(newValues, additionalDocumentations, Citation.class);
+    }
+
+    /**
+     * Returns code(s) that identifies the level of processing in the producers coding system of a resource.
+     *
+     * @return Code(s) that identifies the level of processing in the producers coding system of a resource.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "processingLevel")
+    public Identifier getProcessingLevel() {
+        return processingLevel;
+    }
+
+    /**
+     * Sets code that identifies the level of processing in the producers coding system of a resource.
+     *
+     * @param newValue New code that identifies the level of processing.
+     *
+     * @since 0.5
+     */
+    public void setProcessingLevel(final Identifier newValue) {
+        checkWritePermission();
+        processingLevel = newValue;
+    }
+
+    /**
      * Provides information about the frequency of resource updates, and the scope of those updates.
      *
      * @return Frequency and scope of resource updates.
@@ -461,9 +686,15 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Provides aggregate dataset information.
+     * Provides associated resource information.
+     *
+     * <div class="warning"><b>Upcoming API change — renaming</b><br>
+     * As of ISO 19115:2014, {@code AggregateInformation} has been renamed {@code AssociatedResource}.
+     * This method will be renamed accordingly when GeoAPI will provide the {@code getAssociatedResources()} method
+     * (tentatively in GeoAPI 3.1 or 4.0).
+     * </div>
      *
-     * @return Aggregate dataset information.
+     * @return Associated resource information.
      */
     @Override
     @XmlElement(name = "aggregationInfo")
@@ -472,9 +703,15 @@ public class AbstractIdentification exte
     }
 
     /**
-     * Sets aggregate dataset information.
+     * Sets associated resource information.
+     *
+     * <div class="warning"><b>Upcoming API change — renaming</b><br>
+     * As of ISO 19115:2014, {@code AggregateInformation} has been renamed {@code AssociatedResource}.
+     * This method will be renamed accordingly when GeoAPI will provide the {@code getAssociatedResources()} method
+     * (tentatively in GeoAPI 3.1 or 4.0).
+     * </div>
      *
-     * @param newValues The new aggregation info.
+     * @param newValues The new associated resources.
      */
     public void setAggregationInfo(final Collection<? extends AggregateInformation> newValues) {
         aggregationInfo = writeCollection(newValues, aggregationInfo, AggregateInformation.class);

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultAggregateInformation.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultAggregateInformation.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultAggregateInformation.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultAggregateInformation.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -16,6 +16,9 @@
  */
 package org.apache.sis.metadata.iso.identification;
 
+import java.util.Iterator;
+import java.util.ArrayList;
+import java.util.Collection;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -24,21 +27,36 @@ import org.opengis.metadata.citation.Cit
 import org.opengis.metadata.identification.AggregateInformation;
 import org.opengis.metadata.identification.AssociationType;
 import org.opengis.metadata.identification.InitiativeType;
+import org.apache.sis.metadata.iso.citation.DefaultCitation;
 import org.apache.sis.metadata.iso.ISOMetadata;
 
 
 /**
- * Aggregate dataset information.
+ * Associated resource information.
  *
  * {@section Relationship between properties}
- * According ISO 19115, at least one of {@linkplain #getAggregateDataSetName() aggregate dataset
- * name} and {@linkplain #getAggregateDataSetIdentifier() aggregate dataset identifier} shall be
- * provided.
+ * According ISO 19115, at least one of {@linkplain #getName() name} and
+ * {@linkplain #getMetadataReference() metadata reference} shall be provided.
+ *
+ * <div class="warning"><b>Upcoming API change — renaming</b><br>
+ * As of ISO 19115:2014, {@code AggregateInformation} has been renamed {@code AssociatedResource}.
+ * This class will be renamed accordingly when GeoAPI will provide the {@code AssociatedResource} interface
+ * (tentatively in GeoAPI 3.1 or 4.0).
+ * </div>
+ *
+ * {@section Limitations}
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
  *
  * @author  Guilhem Legal (Geomatys)
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.3 (derived from geotk-3.00)
- * @version 0.3
+ * @version 0.5
  * @module
  */
 @XmlType(name = "MD_AggregateInformation_Type", propOrder = {
@@ -52,27 +70,27 @@ public class DefaultAggregateInformation
     /**
      * Serial number for compatibility with different versions.
      */
-    private static final long serialVersionUID = 4183321601376092254L;
+    private static final long serialVersionUID = -803259032236939135L;
 
     /**
-     * Citation information about the aggregate dataset.
+     * Citation information about the associated resource.
      */
-    private Citation aggregateDataSetName;
+    private Citation name;
 
     /**
-     * Identification information about aggregate dataset.
+     * Type of relation between the resources.
      */
-    private Identifier aggregateDataSetIdentifier;
+    private AssociationType associationType;
 
     /**
-     * Association type of the aggregate dataset.
+     * Type of initiative under which the associated resource was produced.
      */
-    private  AssociationType associationType;
+    private InitiativeType initiativeType;
 
     /**
-     * Type of initiative under which the aggregate dataset was produced.
+     * Reference to the metadata of the associated resource.
      */
-    private InitiativeType initiativeType;
+    private Citation metadataReference;
 
     /**
      * Constructs an initially empty Aggregate dataset information.
@@ -90,12 +108,16 @@ public class DefaultAggregateInformation
      * @see #castOrCopy(AggregateInformation)
      */
     public DefaultAggregateInformation(final AggregateInformation object) {
-        super(object);
         if (object != null) {
-            aggregateDataSetName       = object.getAggregateDataSetName();
-            aggregateDataSetIdentifier = object.getAggregateDataSetIdentifier();
-            associationType            = object.getAssociationType();
-            initiativeType             = object.getInitiativeType();
+            this.associationType   = object.getAssociationType();
+            this.initiativeType    = object.getInitiativeType();
+            if (object instanceof DefaultAggregateInformation) {
+                this.name              = ((DefaultAggregateInformation) object).getName();
+                this.metadataReference = ((DefaultAggregateInformation) object).getMetadataReference();
+            } else {
+                setAggregateDataSetName(object.getAggregateDataSetName());
+                setAggregateDataSetIdentifier(object.getAggregateDataSetIdentifier());
+            }
         }
     }
 
@@ -108,7 +130,7 @@ public class DefaultAggregateInformation
      *   <li>Otherwise if the given object is already an instance of
      *       {@code DefaultAggregateInformation}, then it is returned unchanged.</li>
      *   <li>Otherwise a new {@code DefaultAggregateInformation} instance is created using the
-     *       {@linkplain #DefaultAggregateInformation(AggregateInformation) copy constructor}
+     *       {@linkplain #DefaultAggregateInformation(AssociatedResource) copy constructor}
      *       and returned. Note that this is a <cite>shallow</cite> copy operation, since the other
      *       metadata contained in the given object are not recursively copied.</li>
      * </ul>
@@ -125,51 +147,124 @@ public class DefaultAggregateInformation
     }
 
     /**
+     * Returns citation information about the associated resource, or {@code null} if none.
+     *
+     * @return Citation information about the associated resource, or {@code null} if none.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "name")
+    public Citation getName() {
+        return name;
+    }
+
+    /**
+     * Sets citation information about the associated resource.
+     *
+     * @param newValue The new citation information, or {@code null}.
+     *
+     * @since 0.5
+     */
+    public void setName(final Citation newValue) {
+        checkWritePermission();
+        name = newValue;
+    }
+
+    /**
      * Citation information about the aggregate dataset.
      *
      * @return Citation information about the aggregate dataset, or {@code null}.
+     *
+     * @deprecated As of ISO 19115:2014, replaced by {@link #getName()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "aggregateDataSetName")
     public Citation getAggregateDataSetName() {
-        return aggregateDataSetName;
+        return getName();
     }
 
     /**
      * Sets the citation information about the aggregate dataset.
      *
      * @param newValue The new citation.
+     *
+     * @deprecated As of ISO 19115:2014, replaced by {@link #setName(Citation)}.
      */
+    @Deprecated
     public void setAggregateDataSetName(final Citation newValue) {
-        checkWritePermission();
-        aggregateDataSetName = newValue;
+        setName(newValue);
     }
 
     /**
      * Identification information about aggregate dataset.
      *
      * @return Identification information about aggregate dataset, or {@code null}.
+     *
+     * @deprecated As of ISO 19115:2014, replaced by the first identifier of {@link #getAggregateDataSetName()}.
      */
     @Override
+    @Deprecated
     @XmlElement(name = "aggregateDataSetIdentifier")
     public Identifier getAggregateDataSetIdentifier() {
-        return aggregateDataSetIdentifier;
+        return getAggregateDataSetIdentifier(getAggregateDataSetName());
+    }
+
+    /**
+     * Returns the first identifier of the given citation.
+     */
+    static Identifier getAggregateDataSetIdentifier(final Citation name) {
+        if (name != null) {
+            final Collection<? extends Identifier> names = name.getIdentifiers();
+            if (names != null) { // May be null on XML marshalling.
+                final Iterator<? extends Identifier> it = names.iterator();
+                if (it.hasNext()) {
+                    return it.next();
+                }
+            }
+        }
+        return null;
     }
 
     /**
      * Sets the identification information about aggregate dataset.
      *
      * @param newValue The new identifier.
+     *
+     * @deprecated As of ISO 19115:2014, replaced by an identifier of {@link #getAggregateDataSetName()}.
      */
     public void setAggregateDataSetIdentifier(final Identifier newValue) {
         checkWritePermission();
-        aggregateDataSetIdentifier = newValue;
+        Citation name = getAggregateDataSetName();
+        if (newValue != null) {
+            if (!(name instanceof DefaultCitation)) {
+                name = new DefaultCitation(name);
+                setAggregateDataSetName(name);
+            }
+            /*
+             * If there is more than one value, replace only the first one and keep all other ones unchanged.
+             * The intend is to be consistent with the getter method, which returns the first element.
+             */
+            final ArrayList<Identifier> identifiers = new ArrayList<Identifier>(name.getIdentifiers());
+            if (identifiers.isEmpty()) {
+                identifiers.add(newValue);
+            } else {
+                identifiers.set(0, newValue);
+            }
+            ((DefaultCitation) name).setIdentifiers(identifiers);
+        } else if (name != null) {
+            final Iterator<? extends Identifier> it = name.getIdentifiers().iterator();
+            if (it.hasNext()) {
+                it.next();
+                it.remove();
+            }
+        }
     }
 
     /**
-     * Association type of the aggregate dataset.
+     * Returns the type of relation between the resources.
      *
-     * @return Association type of the aggregate dataset.
+     * @return Type of relation between the resources.
      */
     @Override
     @XmlElement(name = "associationType", required = true)
@@ -178,9 +273,9 @@ public class DefaultAggregateInformation
     }
 
     /**
-     * Sets the association type of the aggregate dataset.
+     * Sets the type of relation between the resources.
      *
-     * @param newValue The new association type.
+     * @param newValue The new type of relation.
      */
     public void setAssociationType(final AssociationType newValue) {
         checkWritePermission();
@@ -188,9 +283,9 @@ public class DefaultAggregateInformation
     }
 
     /**
-     * Type of initiative under which the aggregate dataset was produced.
+     * Returns the type of initiative under which the associated resource was produced, or {@code null} if none.
      *
-     * @return Type of initiative under which the aggregate dataset was produced, or {@code null}.
+     * @return The type of initiative under which the associated resource was produced, or {@code null} if none.
      */
     @Override
     @XmlElement(name = "initiativeType")
@@ -199,12 +294,36 @@ public class DefaultAggregateInformation
     }
 
     /**
-     * Sets the type of initiative under which the aggregate dataset was produced.
+     * Sets a new type of initiative under which the associated resource was produced.
      *
-     * @param newValue The new initiative.
+     * @param newValue The new type of initiative.
      */
     public void setInitiativeType(final InitiativeType newValue) {
         checkWritePermission();
         initiativeType = newValue;
     }
+
+    /**
+     * Return a reference to the metadata of the associated resource, or {@code null} if none.
+     *
+     * @return Reference to the metadata of the associated resource, or {@code null} if none.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "metadataReference")
+    public Citation getMetadataReference() {
+        return metadataReference;
+    }
+
+    /**
+     * Sets the reference to the metadata of the associated resource.
+     *
+     * @param newValue The new reference to the metadata.
+     *
+     * @since 0.5
+     */
+    public void setMetadataReference(final Citation newValue) {
+        checkWritePermission();
+        metadataReference = newValue;
+    }
 }

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphic.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphic.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphic.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultBrowseGraphic.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -17,11 +17,14 @@
 package org.apache.sis.metadata.iso.identification;
 
 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.adapters.XmlJavaTypeAdapter;
 import org.opengis.util.InternationalString;
+import org.opengis.metadata.citation.OnlineResource;
+import org.opengis.metadata.constraint.Constraints;
 import org.opengis.metadata.identification.BrowseGraphic;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.internal.jaxb.gmx.MimeFileTypeAdapter;
@@ -30,11 +33,21 @@ import org.apache.sis.internal.jaxb.gmx.
 /**
  * Graphic that provides an illustration of the dataset (should include a legend for the graphic).
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
+ * @author  Rémi Maréchal (Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.4
+ * @version 0.5
  * @module
  */
 @XmlType(name = "MD_BrowseGraphic_Type", propOrder = {
@@ -66,6 +79,16 @@ public class DefaultBrowseGraphic extend
     private String fileType;
 
     /**
+     * Restrictions on access and/or of browse graphic.
+     */
+    private Collection<Constraints> imageConstraints;
+
+    /**
+     * Links to browse graphic.
+     */
+    private Collection<OnlineResource> linkages;
+
+    /**
      * Constructs an initially empty browse graphic.
      */
     public DefaultBrowseGraphic() {
@@ -92,9 +115,13 @@ public class DefaultBrowseGraphic extend
     public DefaultBrowseGraphic(final BrowseGraphic object) {
         super(object);
         if (object != null) {
-            fileName        = object.getFileName();
-            fileDescription = object.getFileDescription();
-            fileType        = object.getFileType();
+            fileName         = object.getFileName();
+            fileDescription  = object.getFileDescription();
+            fileType         = object.getFileType();
+            if (object instanceof DefaultBrowseGraphic) {
+                imageConstraints = ((DefaultBrowseGraphic) object).getImageConstraints();
+                linkages         = ((DefaultBrowseGraphic) object).getLinkages();
+            }
         }
     }
 
@@ -187,4 +214,50 @@ public class DefaultBrowseGraphic extend
         checkWritePermission();
         fileType = newValue;
     }
+
+    /**
+     * Returns the restrictions on access and / or use of browse graphic.
+     *
+     * @return Restrictions on access and / or use of browse graphic.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "imageConstraints")
+    public Collection<Constraints> getImageConstraints() {
+        return imageConstraints = nonNullCollection(imageConstraints, Constraints.class);
+    }
+
+    /**
+     * Sets the restrictions on access and / or use of browse graphic.
+     *
+     * @param newValues The new restrictions on access and / or use of browse graphic.
+     *
+     * @since 0.5
+     */
+    public void setImageConstraints(final Collection<? extends Constraints> newValues) {
+        imageConstraints = writeCollection(newValues, imageConstraints, Constraints.class);
+    }
+
+    /**
+     * Return the links to browse graphic.
+     *
+     * @return The links to browse graphic.
+     *
+     * @since 0.5
+     */
+/// @XmlElement(name = "linkage")
+    public Collection<OnlineResource> getLinkages() {
+        return linkages = nonNullCollection(linkages, OnlineResource.class);
+    }
+
+    /**
+     * Sets the links to browse graphic.
+     *
+     * @param newValues The new links to browse graphic.
+     *
+     * @since 0.5
+     */
+    public void setLinkages(final Collection<? extends OnlineResource> newValues) {
+        linkages = writeCollection(newValues, linkages, OnlineResource.class);
+    }
 }

Copied: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java (from r1625241, sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java)
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java?p2=sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java&p1=sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java&r1=1625241&r2=1626345&rev=1626345&view=diff
==============================================================================
--- sis/branches/JDK6/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultCoupledResource.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -25,18 +25,29 @@ import javax.xml.bind.annotation.adapter
 import org.opengis.util.ScopedName;
 import org.opengis.metadata.citation.Citation;
 import org.opengis.metadata.identification.DataIdentification;
-import org.opengis.metadata.identification.CoupledResource;
-import org.opengis.metadata.identification.OperationMetadata;
 import org.apache.sis.metadata.iso.ISOMetadata;
 import org.apache.sis.internal.jaxb.metadata.direct.GO_ScopedName;
 import org.apache.sis.xml.Namespaces;
 
 import static org.apache.sis.internal.jaxb.gco.PropertyType.LEGACY_XML;
 
+// Branch-specific imports
+import org.opengis.annotation.UML;
+import static org.opengis.annotation.Obligation.OPTIONAL;
+import static org.opengis.annotation.Specification.ISO_19115;
+
 
 /**
  * Links a given operation name with a resource identified by an "identifier".
  *
+ * <div class="warning"><b>Note on International Standard versions</b><br>
+ * This class is derived from a new type defined in the ISO 19115 international standard published in 2014,
+ * while GeoAPI 3.0 is based on the version published in 2003. Consequently this implementation class does
+ * not yet implement a GeoAPI interface, but is expected to do so after the next GeoAPI releases.
+ * When the interface will become available, all references to this implementation class in Apache SIS will
+ * be replaced be references to the corresponding interface.
+ * </div>
+ *
  * <p><b>Limitations:</b></p>
  * <ul>
  *   <li>Instances of this class are not synchronized for multi-threading.
@@ -61,7 +72,8 @@ import static org.apache.sis.internal.ja
     "operation" */
 })
 @XmlRootElement(name = "SV_CoupledResource", namespace = Namespaces.SRV)
-public class DefaultCoupledResource extends ISOMetadata implements CoupledResource {
+@UML(identifier="SV_CoupledResource", specification=ISO_19115)
+public class DefaultCoupledResource extends ISOMetadata {
     /**
      * Serial number for compatibility with different versions.
      */
@@ -85,7 +97,7 @@ public class DefaultCoupledResource exte
     /**
      * The service operation.
      */
-    private OperationMetadata operation;
+    private DefaultOperationMetadata operation;
 
     /**
      * Constructs an initially empty coupled resource.
@@ -104,7 +116,7 @@ public class DefaultCoupledResource exte
     public DefaultCoupledResource(final ScopedName name,
                                   final Citation reference,
                                   final DataIdentification resource,
-                                  final OperationMetadata operation)
+                                  final DefaultOperationMetadata operation)
     {
         this.scopedName         = name;
         this.resourceReferences = singleton(reference, Citation.class);
@@ -121,7 +133,7 @@ public class DefaultCoupledResource exte
      *
      * @see #castOrCopy(CoupledResource)
      */
-    public DefaultCoupledResource(final CoupledResource object) {
+    public DefaultCoupledResource(final DefaultCoupledResource object) {
         super(object);
         if (object != null) {
             this.scopedName         = object.getScopedName();
@@ -132,38 +144,13 @@ public class DefaultCoupledResource exte
     }
 
     /**
-     * Returns a SIS metadata implementation with the values of the given arbitrary implementation.
-     * This method performs the first applicable action in the following choices:
-     *
-     * <ul>
-     *   <li>If the given object is {@code null}, then this method returns {@code null}.</li>
-     *   <li>Otherwise if the given object is already an instance of
-     *       {@code DefaultCoupledResource}, then it is returned unchanged.</li>
-     *   <li>Otherwise a new {@code DefaultCoupledResource} instance is created using the
-     *       {@linkplain #DefaultCoupledResource(CoupledResource) copy constructor} and returned.
-     *       Note that this is a <cite>shallow</cite> copy operation, since the other
-     *       metadata contained in the given object are not recursively copied.</li>
-     * </ul>
-     *
-     * @param  object The object to get as a SIS implementation, or {@code null} if none.
-     * @return A SIS implementation containing the values of the given object (may be the
-     *         given object itself), or {@code null} if the argument was null.
-     */
-    public static DefaultCoupledResource castOrCopy(final CoupledResource object) {
-        if (object == null || object instanceof DefaultCoupledResource) {
-            return (DefaultCoupledResource) object;
-        }
-        return new DefaultCoupledResource(object);
-    }
-
-    /**
      * Returns scoped identifier of the resource in the context of the given service instance.
      *
      * @return identifier of the resource, or {@code null} if none.
      */
-    @Override
     @XmlElementRef
     @XmlJavaTypeAdapter(GO_ScopedName.class)
+    @UML(identifier="scopedName", obligation=OPTIONAL, specification=ISO_19115)
     public ScopedName getScopedName() {
         return scopedName;
     }
@@ -183,8 +170,8 @@ public class DefaultCoupledResource exte
      *
      * @return References to the resource on which the services operates.
      */
-    @Override
 /// @XmlElement(name = "resourceReference", namespace = Namespaces.SRV)
+    @UML(identifier="resourceReference", obligation=OPTIONAL, specification=ISO_19115)
     public Collection<Citation> getResourceReferences() {
         return resourceReferences = nonNullCollection(resourceReferences, Citation.class);
     }
@@ -203,8 +190,8 @@ public class DefaultCoupledResource exte
      *
      * @return tightly coupled resources.
      */
-    @Override
 /// @XmlElement(name = "resource", namespace = Namespaces.SRV)
+    @UML(identifier="resource", obligation=OPTIONAL, specification=ISO_19115)
     public Collection<DataIdentification> getResources() {
         return resources = nonNullCollection(resources, DataIdentification.class);
     }
@@ -221,20 +208,30 @@ public class DefaultCoupledResource exte
     /**
      * Returns the service operation.
      *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * The return type will be changed to the {@code OperationMetadata} interface
+     * when GeoAPI will provide it (tentatively in GeoAPI 3.1).
+     * </div>
+     *
      * @return The service operation, or {@code null} if none.
      */
-    @Override
 /// @XmlElement(name = "operation", namespace = Namespaces.SRV)
-    public OperationMetadata getOperation() {
+    @UML(identifier="operation", obligation=OPTIONAL, specification=ISO_19115)
+    public DefaultOperationMetadata getOperation() {
         return operation;
     }
 
     /**
      * Sets a new service operation.
      *
+     * <div class="warning"><b>Upcoming API change — generalization</b><br>
+     * The argument type will be changed to the {@code OperationMetadata} interface
+     * when GeoAPI will provide it (tentatively in GeoAPI 3.1).
+     * </div>
+     *
      * @param newValue The new service operation.
      */
-    public void setOperation(final OperationMetadata newValue) {
+    public void setOperation(final DefaultOperationMetadata newValue) {
         checkWritePermission();
         this.operation = newValue;
     }
@@ -249,7 +246,7 @@ public class DefaultCoupledResource exte
     @XmlElement(name = "operationName", namespace = Namespaces.SRV)
     final String getOperationName() {
         if (LEGACY_XML) {
-            final OperationMetadata operation = getOperation();
+            final DefaultOperationMetadata operation = getOperation();
             if (operation != null) {
                 return operation.getOperationName();
             }

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultDataIdentification.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -18,37 +18,45 @@ package org.apache.sis.metadata.iso.iden
 
 import java.util.Collection;
 import java.util.Locale;
+import java.nio.charset.Charset;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import org.opengis.metadata.extent.Extent;
 import org.opengis.metadata.citation.Citation;
-import org.opengis.metadata.identification.Resolution;
 import org.opengis.metadata.identification.CharacterSet;
 import org.opengis.metadata.identification.TopicCategory;
 import org.opengis.metadata.identification.DataIdentification;
-import org.opengis.metadata.spatial.SpatialRepresentationType;
 import org.opengis.util.InternationalString;
 
+import static org.apache.sis.internal.jaxb.gco.PropertyType.LEGACY_XML;
+
 
 /**
  * Information required to identify a dataset.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.3
+ * @version 0.5
  * @module
  */
 @XmlType(name = "MD_DataIdentification_Type", propOrder = {
-    "spatialRepresentationTypes",
-    "spatialResolutions",
     "languages",
     "characterSets",
-    "topicCategories",
+    "topicCategory",
     "environmentDescription",
-    "extents",
+    "extent",
     "supplementalInformation"
 })
 @XmlRootElement(name = "MD_DataIdentification")
@@ -56,17 +64,7 @@ public class DefaultDataIdentification e
     /**
      * Serial number for compatibility with different versions.
      */
-    private static final long serialVersionUID = 8586544979707643009L;
-
-    /**
-     * Method used to spatially represent geographic information.
-     */
-    private Collection<SpatialRepresentationType> spatialRepresentationTypes;
-
-    /**
-     * Factor which provides a general understanding of the density of spatial data in the dataset.
-     */
-    private Collection<Resolution> spatialResolutions;
+    private static final long serialVersionUID = 6104637930243499850L;
 
     /**
      * Language(s) used within the dataset.
@@ -79,23 +77,12 @@ public class DefaultDataIdentification e
     private Collection<CharacterSet> characterSets;
 
     /**
-     * Main theme(s) of the datset.
-     */
-    private Collection<TopicCategory> topicCategories;
-
-    /**
      * Description of the dataset in the producer’s processing environment, including items
      * such as the software, the computer operating system, file name, and the dataset size
      */
     private InternationalString environmentDescription;
 
     /**
-     * Additional extent information including the bounding polygon, vertical, and temporal
-     * extent of the dataset.
-     */
-    private Collection<Extent> extents;
-
-    /**
      * Any other descriptive information about the dataset.
      */
     private InternationalString supplementalInformation;
@@ -121,7 +108,7 @@ public class DefaultDataIdentification e
     {
         super(citation, abstracts);
         languages = singleton(language, Locale.class);
-        topicCategories = singleton(topicCategory, TopicCategory.class);
+        super.setTopicCategories(singleton(topicCategory, TopicCategory.class));
     }
 
     /**
@@ -136,13 +123,9 @@ public class DefaultDataIdentification e
     public DefaultDataIdentification(final DataIdentification object) {
         super(object);
         if (object != null) {
-            spatialRepresentationTypes = copyCollection(object.getSpatialRepresentationTypes(), SpatialRepresentationType.class);
-            spatialResolutions         = copyCollection(object.getSpatialResolutions(), Resolution.class);
             languages                  = copyCollection(object.getLanguages(), Locale.class);
             characterSets              = copyCollection(object.getCharacterSets(), CharacterSet.class);
-            topicCategories            = copyCollection(object.getTopicCategories(), TopicCategory.class);
             environmentDescription     = object.getEnvironmentDescription();
-            extents                    = copyCollection(object.getExtents(), Extent.class);
             supplementalInformation    = object.getSupplementalInformation();
         }
     }
@@ -173,49 +156,16 @@ public class DefaultDataIdentification e
     }
 
     /**
-     * Returns the method used to spatially represent geographic information.
+     * Returns the language(s) used within the resource.
+     * The first element in iteration order shall be the default language.
+     * All other elements, if any, are alternate language(s) used within the resource.
      *
-     * @return Method(s) used to spatially represent geographic information.
-     */
-    @Override
-    @XmlElement(name = "spatialRepresentationType")
-    public Collection<SpatialRepresentationType> getSpatialRepresentationTypes() {
-        return spatialRepresentationTypes = nonNullCollection(spatialRepresentationTypes, SpatialRepresentationType.class);
-    }
-
-    /**
-     * Sets the method used to spatially represent geographic information.
-     *
-     * @param newValues The new spatial representation types.
-     */
-    public void setSpatialRepresentationTypes(final Collection<? extends SpatialRepresentationType> newValues) {
-        spatialRepresentationTypes = writeCollection(newValues, spatialRepresentationTypes, SpatialRepresentationType.class);
-    }
-
-    /**
-     * Returns the factor which provides a general understanding of the density of spatial data in the dataset.
-     *
-     * @return Factor which provides a general understanding of the density of spatial data.
-     */
-    @Override
-    @XmlElement(name = "spatialResolution")
-    public Collection<Resolution> getSpatialResolutions() {
-        return spatialResolutions = nonNullCollection(spatialResolutions, Resolution.class);
-    }
-
-    /**
-     * Sets the factor which provides a general understanding of the density of spatial data in the dataset.
-     *
-     * @param newValues The new spatial resolutions.
-     */
-    public void setSpatialResolutions(final Collection<? extends Resolution> newValues) {
-        spatialResolutions = writeCollection(newValues, spatialResolutions, Resolution.class);
-    }
-
-    /**
-     * Returns the language(s) used within the dataset.
+     * <p>The language string representations should use ISO 639-2 language code as
+     * returned by {@link Locale#getISO3Language()}.</p>
      *
      * @return Language(s) used.
+     *
+     * @see Locale#getISO3Language()
      */
     @Override
     @XmlElement(name = "language", required = true)
@@ -233,9 +183,13 @@ public class DefaultDataIdentification e
     }
 
     /**
-     * Returns the full name of the character coding standard used for the dataset.
+     * Returns the character coding standard used for the dataset.
      *
-     * @return Name(s) of the character coding standard(s) used.
+     * <div class="warning"><b>Upcoming API change — JDK integration</b><br>
+     * The element type may change to the {@link Charset} class in GeoAPI 4.0.
+     * </div>
+     *
+     * @return Character coding standard(s) used.
      */
     @Override
     @XmlElement(name = "characterSet")
@@ -244,7 +198,11 @@ public class DefaultDataIdentification e
     }
 
     /**
-     * Sets the full name of the character coding standard used for the dataset.
+     * Sets the character coding standard used for the dataset.
+     *
+     * <div class="warning"><b>Upcoming API change — JDK integration</b><br>
+     * The element type may change to the {@link Charset} class in GeoAPI 4.0.
+     * </div>
      *
      * @param newValues The new character sets.
      */
@@ -253,86 +211,79 @@ public class DefaultDataIdentification e
     }
 
     /**
-     * Returns the main theme(s) of the dataset.
+     * Returns a description of the resource in the producer's processing environment. This includes
+     * items such as the software, the computer operating system, file name, and the dataset size.
      *
-     * @return Main theme(s).
+     * @return Description of the resource in the producer's processing environment, or {@code null}.
      */
     @Override
-    @XmlElement(name = "topicCategory")
-    public Collection<TopicCategory> getTopicCategories()  {
-        return topicCategories = nonNullCollection(topicCategories, TopicCategory.class);
+    @XmlElement(name = "environmentDescription")
+    public InternationalString getEnvironmentDescription() {
+        return environmentDescription;
     }
 
     /**
-     * Sets the main theme(s) of the dataset.
+     * Sets the description of the resource in the producer’s processing environment.
      *
-     * @param newValues The new topic categories.
+     * @param newValue The new environment description.
      */
-    public void setTopicCategories(final Collection<? extends TopicCategory> newValues) {
-        topicCategories = writeCollection(newValues, topicCategories, TopicCategory.class);
+    public void setEnvironmentDescription(final InternationalString newValue)  {
+        checkWritePermission();
+        environmentDescription = newValue;
     }
 
     /**
-     * Returns a description of the dataset in the producer's processing environment. This includes
-     * items such as the software, the computer operating system, file name, and the dataset size.
+     * Any other descriptive information about the resource.
      *
-     * @return Description of the dataset in the producer's processing environment, or {@code null}.
+     * @return Other descriptive information, or {@code null}.
      */
     @Override
-    @XmlElement(name = "environmentDescription")
-    public InternationalString getEnvironmentDescription() {
-        return environmentDescription;
+    @XmlElement(name = "supplementalInformation")
+    public InternationalString getSupplementalInformation() {
+        return supplementalInformation;
     }
 
     /**
-     * Sets the description of the dataset in the producer’s processing environment.
+     * Sets any other descriptive information about the resource.
      *
-     * @param newValue The new environment description.
+     * @param newValue The new supplemental information.
      */
-    public void setEnvironmentDescription(final InternationalString newValue)  {
+    public void setSupplementalInformation(final InternationalString newValue) {
         checkWritePermission();
-        environmentDescription = newValue;
+        supplementalInformation = newValue;
     }
 
+
+
+    // Bridges for elements from legacy ISO 19115:2003
+
     /**
-     * Returns additional extent information including the bounding polygon, vertical, and temporal
-     * extent of the dataset.
-     *
-     * @return Additional extent information.
+     * For JAXB marhalling of ISO 19115:2003 document only.
      */
-    @Override
-    @XmlElement(name = "extent")
-    public Collection<Extent> getExtents() {
-        return extents = nonNullCollection(extents, Extent.class);
+    @XmlElement(name = "topicCategory")
+    private Collection<TopicCategory> getTopicCategory()  {
+        return LEGACY_XML ? getTopicCategories() : null;
     }
 
     /**
-     * Sets additional extent information.
-     *
-     * @param newValues The new extents
+     * For JAXB unmarhalling of ISO 19115:2003 document only.
      */
-    public void setExtents(final Collection<? extends Extent> newValues) {
-        extents = writeCollection(newValues, extents, Extent.class);
+    private void setTopicCategory(final Collection<? extends TopicCategory> newValues) {
+        setTopicCategories(newValues);
     }
 
     /**
-     * Any other descriptive information about the dataset.
-     *
-     * @return Other descriptive information, or {@code null}.
+     * For JAXB marhalling of ISO 19115:2003 document only.
      */
-    @Override
-    @XmlElement(name = "supplementalInformation")
-    public InternationalString getSupplementalInformation() {
-        return supplementalInformation;
+    @XmlElement(name = "extent")
+    private Collection<Extent> getExtent() {
+        return LEGACY_XML ? getExtents() : null;
     }
 
     /**
-     * Sets any other descriptive information about the dataset.
-     *
-     * @param newValue The new supplemental information.
+     * For JAXB unmarhalling of ISO 19115:2003 document only.
      */
-    public void setSupplementalInformation(final InternationalString newValue) {
-        checkWritePermission();
-        supplementalInformation = newValue;
+    private void setExtent(final Collection<? extends Extent> newValues) {
+        setExtents(newValues);
     }
 }

Modified: sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultKeywords.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultKeywords.java?rev=1626345&r1=1626344&r2=1626345&view=diff
==============================================================================
--- sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultKeywords.java [UTF-8] (original)
+++ sis/trunk/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/identification/DefaultKeywords.java [UTF-8] Fri Sep 19 21:46:39 2014
@@ -31,11 +31,20 @@ import org.apache.sis.util.iso.Types;
 /**
  * Keywords, their type and reference source.
  *
+ * <p><b>Limitations:</b></p>
+ * <ul>
+ *   <li>Instances of this class are not synchronized for multi-threading.
+ *       Synchronization, if needed, is caller's responsibility.</li>
+ *   <li>Serialized objects of this class are not guaranteed to be compatible with future Apache SIS releases.
+ *       Serialization support is appropriate for short term storage or RMI between applications running the
+ *       same version of Apache SIS. For long term storage, use {@link org.apache.sis.xml.XML} instead.</li>
+ * </ul>
+ *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @author  Touraïvane (IRD)
  * @author  Cédric Briançon (Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.3
+ * @version 0.5
  * @module
  */
 @XmlType(name = "MD_Keywords_Type", propOrder = {
@@ -66,6 +75,12 @@ public class DefaultKeywords extends ISO
     private Citation thesaurusName;
 
     /**
+     * User-defined categorization of groups of keywords that extend or are orthogonal
+     * to the standardized {@linkplain #getType() keyword type} codes.
+     */
+    private Object keywordClass;
+
+    /**
      * Constructs an initially empty keywords.
      */
     public DefaultKeywords() {
@@ -195,4 +210,38 @@ public class DefaultKeywords extends ISO
         checkWritePermission();
         thesaurusName = newValue;
     }
+
+    /**
+     * Returns the user-defined categorization of groups of keywords that extend or
+     * are orthogonal to the standardized {@linkplain #getType() keyword type} codes.
+     *
+     * <div class="warning"><b>Upcoming API change — specialization</b><br>
+     * The element type will be changed to the {@code KeywordClass} code list
+     * when GeoAPI will provide it (tentatively in GeoAPI 3.1).
+     * </div>
+     *
+     * @return User-defined categorization of groups of keywords, or {@code null} if none.
+     *
+     * @since 0.5
+     */
+    public Object getKeywordClass() {
+        return keywordClass;
+    }
+
+    /**
+     * Sets the user-defined categorization of groups of keywords.
+     *
+     * <div class="warning"><b>Upcoming API change — specialization</b><br>
+     * The element type will be changed to the {@code KeywordClass} code list
+     * when GeoAPI will provide it (tentatively in GeoAPI 3.1).
+     * </div>
+     *
+     * @param newValue New user-defined categorization of groups of keywords.
+     *
+     * @since 0.5
+     */
+    public void setKeywordClass(final Object newValue) {
+        checkWritePermission();
+        keywordClass = newValue;
+    }
 }



Mime
View raw message