sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1555411 - in /sis: branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/ branches/JDK7/core/sis-referencing/src/main/java/org/apac...
Date Sat, 04 Jan 2014 19:47:55 GMT
Author: desruisseaux
Date: Sat Jan  4 19:47:54 2014
New Revision: 1555411

URL: http://svn.apache.org/r1555411
Log:
Ported DefaultCompoundCRS.

Added:
    sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java   (with props)
    sis/ip-review/DefaultCompoundCRS.xhtml   (with props)
    sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml   (with props)
    sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml   (with props)
    sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml   (with props)
Modified:
    sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java
    sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
    sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java

Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java?rev=1555411&r1=1555410&r2=1555411&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ReferencingUtilities.java [UTF-8] Sat Jan  4 19:47:54 2014
@@ -16,6 +16,7 @@
  */
 package org.apache.sis.internal.referencing;
 
+import java.util.Collection;
 import javax.measure.unit.Unit;
 import org.opengis.parameter.*;
 import org.opengis.referencing.*;
@@ -84,6 +85,24 @@ public final class ReferencingUtilities 
     }
 
     /**
+     * Returns the URN type for the given class, or {@code null} if unknown.
+     * See {@link org.apache.sis.internal.util.DefinitionURI} javadoc for a list of URN types.
+     *
+     * @param  type The class for which to get the URN type.
+     * @return The URN type, or {@code null} if unknown.
+     *
+     * @see org.apache.sis.internal.util.DefinitionURI
+     */
+    public static String toURNType(final Class<?> type) {
+        for (int i=0; i<TYPES.length; i++) {
+            if (TYPES[i].isAssignableFrom(type)) {
+                return URN_TYPES[i];
+            }
+        }
+        return null;
+    }
+
+    /**
      * Retrieves the value at the specified row and column of the given matrix, wrapped in a {@code Number}.
      * The {@code Number} type depends on the matrix accuracy.
      *
@@ -126,6 +145,37 @@ public final class ReferencingUtilities 
     }
 
     /**
+     * Copies all {@link SingleCRS} components from the given source to the given collection.
+     * For each {@link CompoundCRS} element found in the iteration, this method replaces the
+     * {@code CompoundCRS} by its {@linkplain CompoundCRS#getComponents() components}, which
+     * may themselves have other {@code CompoundCRS}. Those replacements are performed recursively
+     * until we obtain a flat view of CRS components.
+     *
+     * @param  source The collection of single or compound CRS.
+     * @param  addTo  Where to add the single CRS in order to obtain a flat view of {@code source}.
+     * @return {@code true} if this method found only single CRS in {@code source}, in which case {@code addTo}
+     *         got the same content (assuming that {@code addTo} was empty prior this method call).
+     * @throws ClassCastException if a CRS is neither a {@link SingleCRS} or a {@link CompoundCRS}.
+     *
+     * @see org.apache.sis.referencing.CRS#getSingleComponents(CoordinateReferenceSystem)
+     */
+    public static boolean getSingleComponents(final Iterable<? extends CoordinateReferenceSystem> source,
+            final Collection<? super SingleCRS> addTo) throws ClassCastException
+    {
+        boolean sameContent = true;
+        for (final CoordinateReferenceSystem candidate : source) {
+            if (candidate instanceof CompoundCRS) {
+                getSingleComponents(((CompoundCRS) candidate).getComponents(), addTo);
+                sameContent = false;
+            } else {
+                // Intentional CassCastException here if the candidate is not a SingleCRS.
+                addTo.add((SingleCRS) candidate);
+            }
+        }
+        return sameContent;
+    }
+
+    /**
      * Ensures that the given argument value is {@code false}. This method is invoked by private setter methods,
      * which are themselves invoked by JAXB at unmarshalling time. Invoking this method from those setter methods
      * serves two purposes:
@@ -150,22 +200,4 @@ public final class ReferencingUtilities 
         }
         return true;
     }
-
-    /**
-     * Returns the URN type for the given class, or {@code null} if unknown.
-     * See {@link org.apache.sis.internal.util.DefinitionURI} javadoc for a list of URN types.
-     *
-     * @param  type The class for which to get the URN type.
-     * @return The URN type, or {@code null} if unknown.
-     *
-     * @see org.apache.sis.internal.util.DefinitionURI
-     */
-    public static String toURNType(final Class<?> type) {
-        for (int i=0; i<TYPES.length; i++) {
-            if (TYPES[i].isAssignableFrom(type)) {
-                return URN_TYPES[i];
-            }
-        }
-        return null;
-    }
 }

Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java?rev=1555411&r1=1555410&r2=1555411&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java [UTF-8] Sat Jan  4 19:47:54 2014
@@ -16,9 +16,16 @@
  */
 package org.apache.sis.referencing;
 
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
 import org.opengis.util.FactoryException;
 import org.opengis.referencing.NoSuchAuthorityCodeException;
+import org.opengis.referencing.crs.SingleCRS;
+import org.opengis.referencing.crs.CompoundCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.internal.referencing.ReferencingUtilities;
+import org.apache.sis.referencing.crs.DefaultCompoundCRS;
 import org.apache.sis.util.Static;
 
 import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
@@ -29,7 +36,7 @@ import static org.apache.sis.util.Argume
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @since   0.3 (derived from geotk-2.1)
- * @version 0.3
+ * @version 0.4
  * @module
  */
 public final class CRS extends Static {
@@ -56,4 +63,63 @@ public final class CRS extends Static {
         ensureNonNull("code", code);
         return null;
     }
+
+    /**
+     * Returns the ordered list of single coordinate reference systems for the specified CRS.
+     * This method performs the following choices:
+     *
+     * <ul>
+     *   <li>If the given CRS is null, returns an empty list.</li>
+     *   <li>If the given CRS is an instance of {@link SingleCRS}, returns that instance in a singleton list.</li>
+     *   <li>If the given CRS is an instance of {@link CompoundCRS}, returns a flattened list of its
+     *       {@linkplain DefaultCompoundCRS#getComponents() components}. Some components may themselves be
+     *       other {@code CompoundCRS} instances, in which case those compound CRS are also expanded in their
+     *       list of {@code SingleCRS} components.</li>
+     *   <li>Otherwise throws a {@code ClassCastException}.</li>
+     * </ul>
+     *
+     * {@example Apache SIS allows 4-dimensional (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)
+     * coordinate reference system to be built in two different ways as shown below:
+     *
+     * <table class="compact"><tr><td><blockquote>
+     *   <code>CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)<br>
+     *   <code>  ├─CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>)<br>
+     *   <code>  │   ├─ProjectedCRS</code> (<var>x</var>,<var>y</var>)<br>
+     *   <code>  │   └─VerticalCRS</code> (<var>z</var>)<br>
+     *   <code>  └─TemporalCRS</code> (<var>t</var>)
+     * </blockquote></td><td><blockquote>
+     *   <code>CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)<br>
+     *   <code>  ├─ProjectedCRS</code> (<var>x</var>,<var>y</var>)<br>
+     *   <code>  ├─VerticalCRS</code> (<var>z</var>)<br>
+     *   <code>  └─TemporalCRS</code> (<var>t</var>)
+     * </blockquote></td></tr></table>
+     *
+     * This method guaranteed that the returned list is a flat one as shown on the right side.
+     * Note that such flat lists are the only one allowed by ISO/OGC standards for compound CRS.
+     * The hierarchical structure is an Apache SIS flexibility.}
+     *
+     * @param  crs The coordinate reference system, or {@code null}.
+     * @return The single coordinate reference systems, or an empty list if the given CRS is {@code null}.
+     * @throws ClassCastException if a CRS is neither a {@link SingleCRS} or a {@link CompoundCRS}.
+     *
+     * @see DefaultCompoundCRS#getSingleComponents()
+     */
+    public static List<SingleCRS> getSingleComponents(final CoordinateReferenceSystem crs) {
+        final List<SingleCRS> singles;
+        if (crs == null) {
+            singles = Collections.emptyList();
+        } else if (crs instanceof CompoundCRS) {
+            if (crs instanceof DefaultCompoundCRS) {
+                singles = ((DefaultCompoundCRS) crs).getSingleComponents();
+            } else {
+                final List<CoordinateReferenceSystem> elements = ((CompoundCRS) crs).getComponents();
+                singles = new ArrayList<>(elements.size());
+                ReferencingUtilities.getSingleComponents(elements, singles);
+            }
+        } else {
+            // Intentional CassCastException here if the crs is not a SingleCRS.
+            singles = Collections.singletonList((SingleCRS) crs);
+        }
+        return singles;
+    }
 }

Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java?rev=1555411&r1=1555410&r2=1555411&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java [UTF-8] Sat Jan  4 19:47:54 2014
@@ -20,6 +20,7 @@ import java.util.Map;
 import javax.measure.unit.Unit;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
 import org.opengis.referencing.datum.Datum;
 import org.opengis.referencing.cs.CoordinateSystem;
 import org.opengis.referencing.crs.SingleCRS;
@@ -70,6 +71,9 @@ import java.util.Objects;
  */
 @XmlType(name="AbstractCRSType")
 @XmlRootElement(name = "AbstractCRS")
+@XmlSeeAlso({
+    DefaultCompoundCRS.class
+})
 public class AbstractCRS extends AbstractReferenceSystem implements CoordinateReferenceSystem {
     /**
      * Serial number for inter-operability with different versions.

Added: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java?rev=1555411&view=auto
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java (added)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java [UTF-8] Sat Jan  4 19:47:54 2014
@@ -0,0 +1,355 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.referencing.crs;
+
+import java.util.Map;
+import java.util.List;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlRootElement;
+import org.opengis.referencing.crs.SingleCRS;
+import org.opengis.referencing.crs.CompoundCRS;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.cs.CoordinateSystem;
+import org.apache.sis.referencing.cs.DefaultCompoundCS;
+import org.apache.sis.referencing.AbstractReferenceSystem;
+import org.apache.sis.internal.referencing.ReferencingUtilities;
+import org.apache.sis.internal.util.UnmodifiableArrayList;
+import org.apache.sis.util.collection.CheckedContainer;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.ComparisonMode;
+import org.apache.sis.util.Workaround;
+import org.apache.sis.io.wkt.Formatter;
+
+import static org.apache.sis.util.ArgumentChecks.*;
+import static org.apache.sis.util.Utilities.deepEquals;
+
+
+/**
+ * A CRS describing the position of points through two or more independent coordinate reference systems.
+ * This class is often used for defining 4-dimensional (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)
+ * coordinate reference systems as an aggregation of simpler CRS. Below is two examples of such aggregations:
+ *
+ * <table class="compact"><tr><td><blockquote>
+ *   <code>CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)<br>
+ *   <code>  ├─ProjectedCRS</code> (<var>x</var>,<var>y</var>)<br>
+ *   <code>  ├─VerticalCRS</code> (<var>z</var>)<br>
+ *   <code>  └─TemporalCRS</code> (<var>t</var>)
+ * </blockquote></td><td><blockquote>
+ *   <code>CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)<br>
+ *   <code>  ├─CompoundCRS</code> (<var>x</var>,<var>y</var>,<var>z</var>)<br>
+ *   <code>  │   ├─ProjectedCRS</code> (<var>x</var>,<var>y</var>)<br>
+ *   <code>  │   └─VerticalCRS</code> (<var>z</var>)<br>
+ *   <code>  └─TemporalCRS</code> (<var>t</var>)
+ * </blockquote></td></tr></table>
+ *
+ * Strictly speaking, only the flat list on the left side is allowed by OGC/ISO specifications.
+ * However Apache SIS relaxes this rule by allowing hierarchies as shown on the right side. This
+ * flexibility allows SIS to preserve information about the (<var>x</var>,<var>y</var>,<var>z</var>)
+ * part (e.g. the EPSG identifier) that would otherwise been lost. Users can obtain the list of their
+ * choice by invoking {@link #getSingleComponents()} or {@link #getComponents()} respectively.
+ *
+ * {@section Immutability and thread safety}
+ * This class is immutable and thus thread-safe if the property <em>values</em> (not necessarily the map itself)
+ * and all {@link CoordinateReferenceSystem} instances given to the constructor are also immutable.
+ * Unless otherwise noted in the javadoc, this condition holds if all components were created using only
+ * SIS factories and static constants.
+ *
+ * @author  Martin Desruisseaux (IRD, Geomatys)
+ * @since   0.4 (derived from geotk-1.2)
+ * @version 0.4
+ * @module
+ */
+@XmlType(name="CompoundCRSType")
+@XmlRootElement(name = "CompoundCRS")
+public class DefaultCompoundCRS extends AbstractCRS implements CompoundCRS {
+    /**
+     * Serial number for inter-operability with different versions.
+     */
+    private static final long serialVersionUID = -2656710314586929287L;
+
+    /**
+     * The coordinate reference systems in this compound CRS.
+     * May be the same reference than {@link #singles}.
+     */
+    private final List<? extends CoordinateReferenceSystem> components;
+
+    /**
+     * A decomposition of the CRS list into the single elements.
+     * Computed by {@link #computeSingleCRS(List)} on construction or deserialization.
+     */
+    private transient List<SingleCRS> singles;
+
+    /**
+     * Constructs a new object in which every attributes are set to a null value.
+     * <strong>This is not a valid object.</strong> This constructor is strictly
+     * reserved to JAXB, which will assign values to the fields using reflexion.
+     */
+    private DefaultCompoundCRS() {
+        components = null;
+    }
+
+    /**
+     * Constructs a compound CRS from the given properties and CRS.
+     * The properties given in argument follow the same rules than for the
+     * {@linkplain AbstractReferenceSystem#AbstractReferenceSystem(Map) super-class constructor}.
+     * The following table is a reminder of main (not all) properties:
+     *
+     * <table class="sis">
+     *   <tr>
+     *     <th>Property name</th>
+     *     <th>Value type</th>
+     *     <th>Returned by</th>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.IdentifiedObject#NAME_KEY}</td>
+     *     <td>{@link org.opengis.referencing.ReferenceIdentifier} or {@link String}</td>
+     *     <td>{@link #getName()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.IdentifiedObject#ALIAS_KEY}</td>
+     *     <td>{@link org.opengis.util.GenericName} or {@link CharSequence} (optionally as array)</td>
+     *     <td>{@link #getAlias()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.IdentifiedObject#IDENTIFIERS_KEY}</td>
+     *     <td>{@link org.opengis.referencing.ReferenceIdentifier} (optionally as array)</td>
+     *     <td>{@link #getIdentifiers()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.IdentifiedObject#REMARKS_KEY}</td>
+     *     <td>{@link org.opengis.util.InternationalString} or {@link String}</td>
+     *     <td>{@link #getRemarks()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.datum.Datum#DOMAIN_OF_VALIDITY_KEY}</td>
+     *     <td>{@link org.opengis.metadata.extent.Extent}</td>
+     *     <td>{@link #getDomainOfValidity()}</td>
+     *   </tr>
+     *   <tr>
+     *     <td>{@value org.opengis.referencing.datum.Datum#SCOPE_KEY}</td>
+     *     <td>{@link org.opengis.util.InternationalString} or {@link String}</td>
+     *     <td>{@link #getScope()}</td>
+     *   </tr>
+     * </table>
+     *
+     * @param properties The properties to be given to the coordinate reference system.
+     * @param components The sequence of coordinate reference systems making this compound CRS.
+     */
+    public DefaultCompoundCRS(final Map<String,?> properties, final CoordinateReferenceSystem... components) {
+        super(properties, createCoordinateSystem(components));
+        this.components = copy(Arrays.asList(components));
+        // 'singles' is computed by the above method call.
+    }
+
+    /**
+     * Returns a compound coordinate system for the specified array of CRS objects.
+     * This method is a work around for RFE #4093999 in Sun's bug database
+     * ("Relax constraint on placement of this()/super() call in constructors").
+     */
+    @Workaround(library="JDK", version="1.7")
+    private static CoordinateSystem createCoordinateSystem(final CoordinateReferenceSystem[] components) {
+        ensureNonNull("components", components);
+        if (components.length < 2) {
+            throw new IllegalArgumentException(Errors.format(Errors.Keys.TooFewArguments_2, 2, components.length));
+        }
+        final CoordinateSystem[] cs = new CoordinateSystem[components.length];
+        for (int i=0; i<components.length; i++) {
+            final CoordinateReferenceSystem crs = components[i];
+            ensureNonNullElement("components", i, crs);
+            cs[i] = crs.getCoordinateSystem();
+        }
+        return new DefaultCompoundCS(cs);
+    }
+
+    /**
+     * Computes the {@link #singles} field from the given CRS list and returns {@code true}
+     * if it has the same content.
+     */
+    private boolean computeSingleCRS(List<? extends CoordinateReferenceSystem> crs) {
+        singles = new ArrayList<>(crs.size());
+        final boolean identical = ReferencingUtilities.getSingleComponents(crs, singles);
+        singles = UnmodifiableArrayList.wrap(singles.toArray(new SingleCRS[singles.size()]));
+        return identical;
+    }
+
+    /**
+     * Returns an unmodifiable copy of the given list. As a side effect, this method computes the
+     * {@linkplain singles} list. If it appears that the list of {@code SingleCRS} is equal to the
+     * given list, then it is returned in other to share the same list in both {@link #components}
+     * and {@link #singles} references.
+     *
+     * <p><strong>WARNING:</strong> this method is invoked by constructors <em>before</em>
+     * the {@linkplain #components} field is set. Do not use this field in this method.</p>
+     */
+    private List<? extends CoordinateReferenceSystem> copy(List<? extends CoordinateReferenceSystem> components) {
+        if (computeSingleCRS(components)) {
+            components = singles; // Shares the same list.
+        } else {
+            components = UnmodifiableArrayList.wrap(components.toArray(new CoordinateReferenceSystem[components.size()]));
+        }
+        return components;
+    }
+
+    /**
+     * Constructs a new coordinate reference system with the same values than the specified one.
+     * This copy constructor provides a way to convert an arbitrary implementation into a SIS one
+     * or a user-defined one (as a subclass), usually in order to leverage some implementation-specific API.
+     *
+     * <p>This constructor performs a shallow copy, i.e. the properties are not cloned.</p>
+     *
+     * @param crs The coordinate reference system to copy.
+     */
+    protected DefaultCompoundCRS(final CompoundCRS crs) {
+        super(crs);
+        if (crs instanceof DefaultCompoundCRS) {
+            final DefaultCompoundCRS that = (DefaultCompoundCRS) crs;
+            this.components = that.components;
+            this.singles    = that.singles;
+        } else {
+            this.components = copy(crs.getComponents());
+            // 'singles' is computed by the above method call.
+        }
+    }
+
+    /**
+     * Returns a SIS CRS implementation with the same values than the given arbitrary implementation.
+     * If the given object is {@code null}, then this method returns {@code null}.
+     * Otherwise if the given object is already a SIS implementation, then the given object is returned unchanged.
+     * Otherwise a new SIS implementation is created and initialized to the attribute values of the given object.
+     *
+     * @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 DefaultCompoundCRS castOrCopy(final CompoundCRS object) {
+        return (object == null) || (object instanceof DefaultCompoundCRS)
+                ? (DefaultCompoundCRS) object : new DefaultCompoundCRS(object);
+    }
+
+    /**
+     * Returns the GeoAPI interface implemented by this class.
+     * The SIS implementation returns {@code CompoundCRS.class}.
+     *
+     * {@note Subclasses usually do not need to override this method since GeoAPI does not define
+     *        <code>CompoundCRS</code> sub-interface. Overriding possibility is left mostly for
+     *        implementors who wish to extend GeoAPI with their own set of interfaces.}
+     *
+     * @return {@code CompoundCRS.class} or a user-defined sub-interface.
+     */
+    @Override
+    public Class<? extends CompoundCRS> getInterface() {
+        return CompoundCRS.class;
+    }
+
+    /**
+     * Returns the ordered list of coordinate reference systems.
+     * This is the list of CRS given at construction time.
+     * This list may contains other {@code CompoundCRS} instances, as described in class Javadoc.
+     * For a flattened list of {@link SingleCRS} instances, see {@link #getSingleComponents()}.
+     *
+     * @return The coordinate reference systems as an unmodifiable list.
+     */
+    @Override
+    @SuppressWarnings("unchecked") // We are safe if the list is read-only.
+    public List<CoordinateReferenceSystem> getComponents() {
+        return (List<CoordinateReferenceSystem>) components;
+    }
+
+    /**
+     * Returns the ordered list of single coordinate reference systems. If this compound CRS contains
+     * other compound CRS, then all of them are expanded in a sequence of {@code SingleCRS} objects.
+     * See class Javadoc for more information.
+     *
+     * @return The single coordinate reference systems as an unmodifiable list.
+     *
+     * @see org.apache.sis.referencing.CRS#getSingleComponents(CoordinateReferenceSystem)
+     */
+    public List<SingleCRS> getSingleComponents() {
+        return singles;
+    }
+
+    /**
+     * Computes the single CRS list on deserialization.
+     */
+    @SuppressWarnings("unchecked")
+    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        if (components instanceof CheckedContainer<?>) {
+            final Class<?> type = ((CheckedContainer<?>) components).getElementType();
+            if (type == SingleCRS.class) {
+                singles = (List<SingleCRS>) components;
+                return;
+            }
+        }
+        computeSingleCRS(components);
+    }
+
+    /**
+     * Compares this coordinate reference system with the specified object for equality.
+     *
+     * @param  object The object to compare to {@code this}.
+     * @param  mode {@link ComparisonMode#STRICT STRICT} for performing a strict comparison, or
+     *         {@link ComparisonMode#IGNORE_METADATA IGNORE_METADATA} for comparing only properties
+     *         relevant to transformations.
+     * @return {@code true} if both objects are equal.
+     */
+    @Override
+    public boolean equals(final Object object, final ComparisonMode mode) {
+        if (object == this) {
+            return true; // Slight optimization.
+        }
+        if (super.equals(object, mode)) {
+            switch (mode) {
+                case STRICT: {
+                    return components.equals(((DefaultCompoundCRS) object).components);
+                }
+                default: {
+                    return deepEquals(getComponents(), ((CompoundCRS) object).getComponents(), mode);
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return {@inheritDoc}
+     */
+    @Override
+    protected long computeHashCode() {
+        return super.computeHashCode() + 31*components.hashCode();
+    }
+
+    /**
+     * Formats the inner part of a <cite>Well Known Text</cite> (WKT)</a> element.
+     *
+     * @param  formatter The formatter to use.
+     * @return The name of the WKT element type, which is {@code "COMPD_CS"}.
+     */
+    @Override
+    protected String formatTo(final Formatter formatter) {
+        for (final CoordinateReferenceSystem element : components) {
+            formatter.append(element);
+        }
+        return "COMPD_CS";
+    }
+}

Propchange: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Added: sis/ip-review/DefaultCompoundCRS.xhtml
URL: http://svn.apache.org/viewvc/sis/ip-review/DefaultCompoundCRS.xhtml?rev=1555411&view=auto
==============================================================================
--- sis/ip-review/DefaultCompoundCRS.xhtml (added)
+++ sis/ip-review/DefaultCompoundCRS.xhtml Sat Jan  4 19:47:54 2014
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta charset="UTF-8"/>
+    <title>DefaultCompoundCRS history</title>
+    <style type="text/css" media="all">
+      @import url("./reports.css");
+    </style>
+  </head>
+  <body>
+    <div>
+      <h1>DefaultCompoundCRS history</h1>
+  <p>Click on the commit message for inspecting the <code>diff</code> and how the code has been rewritten.</p>
+<p><b>Command line:</b></p>
+<blockquote><code>svn log -r31996:1 http://svn.osgeo.org/geotools/trunk/modules/library/referencing/src/main/java/org/geotools/referencing/crs/DefaultCompoundCRS.java</code></blockquote>
+<table>
+  <tr>
+    <th>Rev.</th>
+    <th>Date</th>
+    <th>Author</th>
+    <th class="last">Message</th>
+  </tr>
+<tr><td class="rev">31000</td><td>2008-07-10</td><td>desruisseaux</td><td>Avoid usage of 2 deprecated constructors from CRSFactory. Their replacement were tricky and required more sophesticated code in ReferencingFactoryContainer.toGeodetic3D.</td></tr>
+<tr><td class="rev">30641</td><td>2008-06-12</td><td>acuster</td><td>Copyright headers: lib/referencing, this time with feeling (and the el in Toolkit)</td></tr>
+<tr><td class="rev">30521</td><td>2008-06-05</td><td>acuster</td><td>Copyright: Update referencing headers</td></tr>
+<tr><td class="rev">30258</td><td>2008-05-08</td><td>acuster</td><td>Reshuffle the top level repo: drop uDig, move up trunk, tags, and branches.</td></tr>
+<tr><td class="rev">30257</td><td>2008-05-08</td><td>acuster</td><td>Move trunk/gt/ directory contents up to trunk/ and drop gt</td></tr>
+<tr><td class="rev">29870</td><td>2008-04-09</td><td>desruisseaux</td><td>Bug fixes and Java 5 leveraging.</td></tr>
+<tr><td class="rev">29852</td><td>2008-04-08</td><td>desruisseaux</td><td>The previous commit was about simplifying (in the sense of simplier MathTransform result, not simplier code) ConcatenatedTransform. This commit is about simplifying the ConcatenatedOperation which contains that ConcatenatedTransform. Related to GEOT-1419.</td></tr>
+<tr><td class="rev">29845</td><td>2008-04-08</td><td>desruisseaux</td><td>More aggressive simplification of MathTransforms during concatenation. It is probably related to GEOT-1419, but I have not verified. This fix results in drastic performance improvement for the cases where DefaultConcatenatedTransform previously failed to see concatenation that could be simplified to identity transform. Those cases occured more often in 3D or 4D cases. It may have some benefit in the pure 2D case as well, but probably less often.</td></tr>
+<tr><td class="rev">28922</td><td>2008-01-24</td><td>acuster</td><td>Bump the (at)since version to 2.5 since WKTParser was cut from 2.4</td></tr>
+<tr><td class="rev">28540</td><td>2007-12-29</td><td>acuster</td><td>Hide buttons which are not yet used</td></tr>
+<tr><td class="rev">27575</td><td>2007-10-22</td><td>desruisseaux</td><td>Converted Java source files from ISO-LATIN-1 encoding to UTF-8 (GEOT-1516).</td></tr>
+<tr><td class="rev">24609</td><td>2007-02-26</td><td>desruisseaux</td><td>Removed the package-private 'getTypeWKT()' method; it was not needed after all.</td></tr>
+<tr><td class="rev">24607</td><td>2007-02-26</td><td>desruisseaux</td><td>Avoid UnformattableObjectException for 'LOCAL_CS' and 'VERT_CS' WKT elements. Try to provides some hints about the cause for the other cases of unformattable WKT.</td></tr>
+<tr><td class="rev">22327</td><td>2006-10-23</td><td>desruisseaux</td><td>GEOT-982: regroup 'module', 'plugin', 'ext' and 'unsupported' in a common directory.</td></tr>
+<tr><td class="rev">22315</td><td>2006-10-22</td><td>desruisseaux</td><td>Reorganisation of directory tree structure (GEOT-982) phase 1: moved 'src' to 'src/main/java'.</td></tr>
+<tr><td class="rev">20874</td><td>2006-08-07</td><td class="unav">jgarnett</td><td><a href="rev/20874/DefaultCompoundCRS.xhtml">ip review</a></td></tr>
+<tr><td class="rev">17672</td><td>2006-01-19</td><td>desruisseaux</td><td>Added @source tag.</td></tr>
+<tr><td class="rev">17660</td><td>2006-01-18</td><td>desruisseaux</td><td>Fixed SVN attributes, including the addition of URL attribute.</td></tr>
+<tr><td class="rev">15350</td><td>2005-08-16</td><td>desruisseaux</td><td>Merged the 'split-main' branch to trunk (GEOT-662)</td></tr>
+<tr><td class="rev">15256</td><td>2005-08-09</td><td>desruisseaux</td><td>Extraction of referencing module from main</td></tr>
+<tr><td class="rev">15255</td><td>2005-08-09</td><td>desruisseaux</td><td>Prepare branch for splitting main</td></tr>
+<tr><td class="rev">15150</td><td>2005-08-05</td><td>desruisseaux</td><td>Added more localizations / Bug fix in image sample values table widget</td></tr>
+<tr><td class="rev">14834</td><td>2005-07-20</td><td>desruisseaux</td><td>Reorganized I18N resources</td></tr>
+<tr><td class="rev">14545</td><td>2005-06-15</td><td>desruisseaux</td><td>Initial port of coverage I/O helper classes (work in progress)</td></tr>
+<tr><td class="rev">14235</td><td>2005-06-10</td><td>desruisseaux</td><td>Replaced _PROPERTY suffix by _KEY as of GEOT-577</td></tr>
+<tr><td class="rev">14205</td><td>2005-06-09</td><td>desruisseaux</td><td>Updated to GeoAPI 2.0 final release</td></tr>
+<tr><td class="rev">13925</td><td>2005-05-30</td><td>desruisseaux</td><td>Added @since javadoc tag</td></tr>
+<tr><td class="rev">13906</td><td>2005-05-28</td><td>desruisseaux</td><td>Renamed some 'Default' prefix as 'Abstract'</td></tr>
+<tr><td class="rev">13869</td><td>2005-05-27</td><td>desruisseaux</td><td>Added 'Default' or 'Abstract' prefix in CRS's 'datum' and 'cs' packages</td></tr>
+<tr><td class="rev">13836</td><td>2005-05-26</td><td>desruisseaux</td><td>Added 'Default' suffix to some CRS implementations: partial work</td></tr>
+<tr><td class="rev">11001</td><td>2005-02-02</td><td>desruisseaux</td><td>Fixed wrong encoding in main/src</td></tr>
+<tr><td class="rev">10796</td><td>2005-01-28</td><td class="unav">dzwiers</td><td><a href="rev/10796/DefaultCompoundCRS.xhtml">imports cleaned</a></td></tr>
+<tr><td class="rev">9346</td><td>2004-11-30</td><td>desruisseaux</td><td>First working version of CoordinateOperationFactory</td></tr>
+<tr><td class="rev">8596</td><td>2004-10-12</td><td>desruisseaux</td><td>Redirected javadoc links toward org.opengis.* instead org.geotools.* when the discussion is general enough</td></tr>
+<tr><td class="rev">8518</td><td>2004-10-11</td><td>desruisseaux</td><td>Apply changes voted in OGC meeting at Southampton: use of Identifier and GenericName</td></tr>
+<tr><td class="rev">7848</td><td>2004-09-08</td><td class="unav">jgarnett</td><td><a href="rev/07848/DefaultCompoundCRS.xhtml">round 2 of sync with geoapi</a></td></tr>
+<tr><td class="rev">6888</td><td>2004-07-14</td><td>desruisseaux</td><td>Update for GeoAPI changes (Info -->  IdentifiedObject)</td></tr>
+<tr><td class="rev">6536</td><td>2004-06-25</td><td>desruisseaux</td><td>Added SingleCRS class / Renamed ObliqueCartesianCS as AffineCS / Moved Position as super-interface for DirectPosition and Point</td></tr>
+<tr><td class="rev">6343</td><td>2004-06-07</td><td>desruisseaux</td><td>More ports of legacy CTS to new CRS</td></tr>
+<tr><td class="rev">6259</td><td>2004-05-31</td><td>desruisseaux</td><td>Added more implementations for Coverage support</td></tr>
+<tr><td class="rev">6257</td><td>2004-05-31</td><td>desruisseaux</td><td>First set of operation classes</td></tr>
+<tr><td class="rev">6254</td><td>2004-05-30</td><td>desruisseaux</td><td>Added new CRS</td></tr>
+<tr><td class="rev">6098</td><td>2004-05-23</td><td>desruisseaux</td><td>Partial implementation of GeoAPI referencing package</td></tr>
+</table>
+    </div>
+  </body>
+</html>

Propchange: sis/ip-review/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/ip-review/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml
URL: http://svn.apache.org/viewvc/sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml?rev=1555411&view=auto
==============================================================================
--- sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml (added)
+++ sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml Sat Jan  4 19:47:54 2014
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta charset="UTF-8"/>
+    <title>DefaultCompoundCRS changes for revisions 7847:7848</title>
+    <style type="text/css" media="all">
+      @import url("../../reports.css");
+    </style>
+  </head>
+  <body>
+    <div>
+      <h1>DefaultCompoundCRS changes for revisions 7847:7848</h1>
+<p>The line modified by this commit has been deleted.</p>
+<p><b>Command line:</b></p>
+<blockquote><code>svn diff --extensions "--unified --ignore-space-change --ignore-all-space --ignore-eol-style" -r7847:7848 http://svn.osgeo.org/geotools/trunk/modules/library/referencing/src/main/java/org/geotools/referencing/crs/DefaultCompoundCRS.java</code></blockquote>
+<table class="changes">
+<tr><th>Revision 7847</th><th>Revision 7848</th></tr>
+<tr><td><pre>// OpenGIS dependencies
+import org.opengis.referencing.cs.CoordinateSystem;
+<span class="del">import org.opengis.referencing.cs.CoordinateSystemAxis;</span>
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+// Geotools dependencies</pre></td>
+<td><pre>// OpenGIS dependencies
+import org.opengis.referencing.cs.CoordinateSystem;
+<span class="add">//import org.opengis.referencing.cs.CoordinateSystemAxis;</span>
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+// Geotools dependencies</pre></td></tr>
+</table>
+    </div>
+  </body>
+</html>

Propchange: sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/ip-review/rev/07848/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml
URL: http://svn.apache.org/viewvc/sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml?rev=1555411&view=auto
==============================================================================
--- sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml (added)
+++ sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml Sat Jan  4 19:47:54 2014
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta charset="UTF-8"/>
+    <title>DefaultCompoundCRS changes for revisions 10795:10796</title>
+    <style type="text/css" media="all">
+      @import url("../../reports.css");
+    </style>
+  </head>
+  <body>
+    <div>
+      <h1>DefaultCompoundCRS changes for revisions 10795:10796</h1>
+<p>Changes in this commit seem to be the result of some "<cite>auto reformat</cite>" tool execution.
+The <cite>Java</cite> - <cite>GeoAPI</cite> - <cite>GeoTools</cite> import ordering is altered,
+imports used only in Javadoc are lost and the encoding of non-ASCII characters is broken.
+This commit has been reverted, except for the removal of really unused imports which are keep removed.</p>
+<p><b>Command line:</b></p>
+<blockquote><code>svn diff --extensions "--unified --ignore-space-change --ignore-all-space --ignore-eol-style" -r10795:10796 http://svn.osgeo.org/geotools/trunk/modules/library/referencing/src/main/java/org/geotools/referencing/crs/DefaultCompoundCRS.java</code></blockquote>
+<table class="changes">
+<tr><th>Revision 10795</th><th>Revision 10796</th></tr>
+<tr><td><pre>/*
+ * Geotools 2 - OpenSource mapping toolkit
+ * (C) 2003, Geotools Project Managment Committee (PMC)
+<span class="del"> * (C) 2001, Institut de Recherche pour le Développement</span>
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public</pre></td>
+<td><pre>/*
+ * Geotools 2 - OpenSource mapping toolkit
+ * (C) 2003, Geotools Project Managment Committee (PMC)
+<span class="add"> * (C) 2001, Institut de Recherche pour le D�veloppement</span>
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public</pre></td></tr>
+<tr><td><pre>package org.geotools.referencing.crs;
+
+// J2SE dependencies
+<span class="del">import java.util.Map;</span>
+<span class="del">import java.util.List;</span>
+import java.util.ArrayList;
+import java.util.Collections;
+
+<span class="del">// OpenGIS dependencies</span>
+<span class="del">import org.opengis.referencing.datum.Datum;  // For javadoc</span>
+<span class="del">import org.opengis.referencing.cs.CoordinateSystem;</span>
+<span class="del">import org.opengis.referencing.crs.CoordinateReferenceSystem;</span>
+<span class="del">import org.opengis.referencing.crs.SingleCRS;</span>
+<span class="del"></span>
+<span class="del">// Geotools dependencies</span>
+import org.geotools.referencing.IdentifiedObject;
+import org.geotools.referencing.cs.CompoundCS;
+import org.geotools.referencing.wkt.Formatter;
+import org.geotools.resources.cts.Resources;
+<span class="del">import org.geotools.resources.cts.ResourceKeys;</span>
+
+
+/**</pre></td>
+<td><pre>package org.geotools.referencing.crs;
+
+// J2SE dependencies
+import java.util.ArrayList;
+import java.util.Collections;
+<span class="add">import java.util.List;</span>
+<span class="add">import java.util.Map;</span>
+
+import org.geotools.referencing.IdentifiedObject;
+import org.geotools.referencing.cs.CompoundCS;
+import org.geotools.referencing.wkt.Formatter;
+<span class="add">import org.geotools.resources.cts.ResourceKeys;</span>
+import org.geotools.resources.cts.Resources;
+<span class="add">import org.opengis.referencing.crs.CoordinateReferenceSystem;</span>
+<span class="add">import org.opengis.referencing.crs.SingleCRS;</span>
+<span class="add">import org.opengis.referencing.cs.CoordinateSystem;</span>
+<span class="add">import org.opengis.referencing.datum.Datum;</span>
+
+
+/**</pre></td></tr>
+</table>
+    </div>
+  </body>
+</html>

Propchange: sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/ip-review/rev/10796/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml
URL: http://svn.apache.org/viewvc/sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml?rev=1555411&view=auto
==============================================================================
--- sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml (added)
+++ sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml Sat Jan  4 19:47:54 2014
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta charset="UTF-8"/>
+    <title>DefaultCompoundCRS changes for revisions 20873:20874</title>
+    <style type="text/css" media="all">
+      @import url("../../reports.css");
+    </style>
+  </head>
+  <body>
+    <div>
+      <h1>DefaultCompoundCRS changes for revisions 20873:20874</h1>
+<p>Changes in GeoTools header only. The removal of the "<cite>or (at your option) any later version</cite>" clause
+must be keep in Geotk for every classes having contribution from a developer other than those who accepted re-licensing.
+This header does not apply to Apache SIS, since the above-cited contributions are omitted.</p>
+<p><b>Command line:</b></p>
+<blockquote><code>svn diff --extensions "--unified --ignore-space-change --ignore-all-space --ignore-eol-style" -r20873:20874 http://svn.osgeo.org/geotools/trunk/modules/library/referencing/src/main/java/org/geotools/referencing/crs/DefaultCompoundCRS.java</code></blockquote>
+<table class="changes">
+<tr><th>Revision 20873</th><th>Revision 20874</th></tr>
+<tr><td><pre>/*
+<span class="del"> * Geotools 2 - OpenSource mapping toolkit</span>
+<span class="del"> * (C) 2003, Geotools Project Managment Committee (PMC)</span>
+ * (C) 2001, Institut de Recherche pour le Développement
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public
+<span class="del"> *    License as published by the Free Software Foundation; either</span>
+<span class="del"> *    version 2.1 of the License, or (at your option) any later version.</span>
+ *
+ *    This library is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of</pre></td>
+<td><pre>/*
+<span class="add"> *    GeoTools - OpenSource mapping toolkit</span>
+<span class="add"> *    http://geotools.org</span>
+<span class="add"> *    (C) 2003-2006, GeoTools Project Managment Committee (PMC)</span>
+ * (C) 2001, Institut de Recherche pour le Développement
+ *
+ *    This library is free software; you can redistribute it and/or
+ *    modify it under the terms of the GNU Lesser General Public
+<span class="add"> *    License as published by the Free Software Foundation;</span>
+<span class="add"> *    version 2.1 of the License.</span>
+ *
+ *    This library is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of</pre></td></tr>
+<tr><td><pre>*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+*    Lesser General Public License for more details.
+*
+<span class="del">*    You should have received a copy of the GNU Lesser General Public</span>
+<span class="del">*    License along with this library; if not, write to the Free Software</span>
+<span class="del">*    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
+<span class="del">*</span>
+*    This package contains documentation from OpenGIS specifications.
+*    OpenGIS consortium's work is fully acknowledged here.
+*/</pre></td>
+<td><pre>*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+*    Lesser General Public License for more details.
+*
+*    This package contains documentation from OpenGIS specifications.
+*    OpenGIS consortium's work is fully acknowledged here.
+*/</pre></td></tr>
+</table>
+    </div>
+  </body>
+</html>

Propchange: sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/ip-review/rev/20874/DefaultCompoundCRS.xhtml
------------------------------------------------------------------------------
    svn:mime-type = text/html



Mime
View raw message