Author: desruisseaux
Date: Wed Jan 15 20:53:24 2014
New Revision: 1558561
URL: http://svn.apache.org/r1558561
Log:
Provide a partial implementation of CRS.forCode(String).
Added:
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
(with props)
Modified:
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/CRS.java
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
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=1558561&r1=1558560&r2=1558561&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] Wed Jan 15 20:53:24 2014
@@ -20,12 +20,16 @@ import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import org.opengis.util.FactoryException;
+import org.opengis.util.NoSuchIdentifierException;
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.util.DefinitionURI;
import org.apache.sis.internal.referencing.ReferencingUtilities;
import org.apache.sis.referencing.crs.DefaultCompoundCRS;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.CharSequences;
import org.apache.sis.util.Static;
import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
@@ -48,8 +52,22 @@ public final class CRS extends Static {
/**
* Returns a Coordinate Reference System from the given authority code.
+ * There is many thousands of CRS identified by EPSG codes or by other
authorities.
+ * The following table lists a very small subset of some of those codes:
*
- * @todo This method is not yet implemented. It will be provided after the
EPSG-backed
+ * <blockquote><table class="sis">
+ * <tr><th>Name or alias</th> <th>Code</th></tr>
+ * <tr><td>ED50</td> <td>EPSG:4230</td></tr>
+ * <tr><td>ETRS89</td> <td>EPSG:4258</td></tr>
+ * <tr><td>NAD27</td> <td>EPSG:4267</td></tr>
+ * <tr><td>NAD83</td> <td>EPSG:4269</td></tr>
+ * <tr><td>GRS 1980 Authalic Sphere</td> <td>EPSG:4047</td></tr>
+ * <tr><td>WGS 72</td> <td>EPSG:4322</td></tr>
+ * <tr><td>WGS 84</td> <td>EPSG:4326</td></tr>
+ * <tr><td>WGS 84 with (<var>longitude</var>, <var>latitude</var>) axis
order</td> <td>CRS:84</td></tr>
+ * </table></blockquote>
+ *
+ * @todo This method is only partially implemented. It will be fully
supported after the EPSG-backed
* authority factory has been ported to Apache SIS.
*
* @param code The authority code.
@@ -61,7 +79,52 @@ public final class CRS extends Static {
throws NoSuchAuthorityCodeException, FactoryException
{
ensureNonNull("code", code);
- return null;
+ final String authority;
+ final String value;
+ final DefinitionURI uri = DefinitionURI.parse(code);
+ if (uri != null) {
+ final String type = uri.type;
+ if (type != null && !type.equalsIgnoreCase("crs")) {
+ throw new
NoSuchIdentifierException(Errors.format(Errors.Keys.UnknownType_1, type), type);
+ }
+ authority = uri.authority;
+ value = uri.code;
+ } else {
+ final int s = code.indexOf(DefinitionURI.SEPARATOR);
+ authority = CharSequences.trimWhitespaces(code.substring(0,
Math.max(0, s)));
+ value = CharSequences.trimWhitespaces(code.substring(s + 1));
+ }
+ if (authority == null || authority.isEmpty()) {
+ throw new
NoSuchIdentifierException(Errors.format(Errors.Keys.MissingAuthority_1, code),
code);
+ }
+ /*
+ * Code below this point is a temporary implementation to
+ * be removed after we ported the EPSG authority factory.
+ */
+ NumberFormatException cause = null;
+ try {
+ if (authority.equalsIgnoreCase("CRS")) {
+ switch (Integer.parseInt(value)) {
+ case 84: return
GeodeticObjects.WGS84.normalizedGeographic();
+ }
+ } else if (authority.equalsIgnoreCase("EPSG")) {
+ final int n = Integer.parseInt(value);
+ for (final GeodeticObjects candidate :
GeodeticObjects.values()) {
+ if (candidate.geographic == n) {
+ return candidate.geographic();
+ }
+ }
+ } else {
+ throw new
NoSuchIdentifierException(Errors.format(Errors.Keys.UnknownAuthority_1,
authority), authority);
+ }
+ } catch (NumberFormatException e) {
+ cause = e;
+ }
+ final NoSuchAuthorityCodeException e = new
NoSuchAuthorityCodeException(
+ Errors.format(Errors.Keys.NoSuchAuthorityCode_3, authority,
CoordinateReferenceSystem.class, value),
+ authority, value, code);
+ e.initCause(cause);
+ throw e;
}
/**
Added:
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java?rev=1558561&view=auto
==============================================================================
---
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
(added)
+++
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
[UTF-8] Wed Jan 15 20:53:24 2014
@@ -0,0 +1,65 @@
+/*
+ * 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;
+
+import org.opengis.referencing.crs.GeographicCRS;
+import org.opengis.util.FactoryException;
+import org.apache.sis.test.DependsOn;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+
+/**
+ * Tests the {@link CRS} class.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @since 0.4
+ * @version 0.4
+ * @module
+ */
+@DependsOn({
+ GeodeticObjectsTest.class
+})
+public final strictfp class CRSTest extends TestCase {
+ /**
+ * Asserts that the result of {@link CRS#forCode(String)} is the given CRS.
+ */
+ private static void verifyForCode(final GeographicCRS expected, final
String code) throws FactoryException {
+ assertSame(code, expected, CRS.forCode(code));
+ }
+
+ /**
+ * Tests {@link CRS#forCode(String)}.
+ *
+ * @throws FactoryException If a CRS can not be constructed.
+ */
+ @Test
+ public void testForCode() throws FactoryException {
+ verifyForCode(GeodeticObjects.WGS84 .normalizedGeographic(), "CRS:84");
+ verifyForCode(GeodeticObjects.WGS84 .geographic(),
"EPSG:4326");
+ verifyForCode(GeodeticObjects.WGS84 .geographic(),
"urn:ogc:def:crs:EPSG::4326");
+ verifyForCode(GeodeticObjects.WGS84 .geographic(),
"http://www.opengis.net/gml/srs/epsg.xml#4326");
+ verifyForCode(GeodeticObjects.WGS72 .geographic(),
"EPSG:4322");
+ verifyForCode(GeodeticObjects.SPHERE.geographic(),
"EPSG:4047");
+ verifyForCode(GeodeticObjects.NAD83 .geographic(),
"EPSG:4269");
+ verifyForCode(GeodeticObjects.NAD27 .geographic(),
"EPSG:4267");
+ verifyForCode(GeodeticObjects.ETRS89.geographic(),
"EPSG:4258");
+ verifyForCode(GeodeticObjects.ED50 .geographic(),
"EPSG:4230");
+ }
+}
Propchange:
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/referencing/CRSTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain;charset=UTF-8
Modified:
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java?rev=1558561&r1=1558560&r2=1558561&view=diff
==============================================================================
---
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
[UTF-8] (original)
+++
sis/branches/JDK7/core/sis-referencing/src/test/java/org/apache/sis/test/suite/ReferencingTestSuite.java
[UTF-8] Wed Jan 15 20:53:24 2014
@@ -73,6 +73,7 @@ import org.junit.BeforeClass;
org.apache.sis.referencing.crs.DefaultGeodeticCRSTest.class,
org.apache.sis.referencing.StandardDefinitionsTest.class,
org.apache.sis.referencing.GeodeticObjectsTest.class,
+ org.apache.sis.referencing.CRSTest.class,
org.apache.sis.geometry.AbstractDirectPositionTest.class,
org.apache.sis.geometry.GeneralDirectPositionTest.class,
Modified:
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java?rev=1558561&r1=1558560&r2=1558561&view=diff
==============================================================================
---
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
[UTF-8] (original)
+++
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
[UTF-8] Wed Jan 15 20:53:24 2014
@@ -371,6 +371,11 @@ public final class Errors extends Indexe
public static final short MismatchedMatrixSize_4 = 60;
/**
+ * No authority was specified for code “{0}”. The expected syntax is
“AUTHORITY:CODE”.
+ */
+ public static final short MissingAuthority_1 = 135;
+
+ /**
* This operation requires the “{0}” module.
*/
public static final short MissingRequiredModule_1 = 61;
@@ -416,6 +421,11 @@ public final class Errors extends Indexe
public static final short NoConvergenceForPoints_2 = 69;
/**
+ * No code “{2}” from authority “{0}” found for object of type ‘{1}’.
+ */
+ public static final short NoSuchAuthorityCode_3 = 137;
+
+ /**
* Element “{0}” has not been found.
*/
public static final short NoSuchElement_1 = 70;
@@ -631,6 +641,11 @@ public final class Errors extends Indexe
public static final short UnexpectedFileFormat_2 = 111;
/**
+ * Authority “{0}” is unknown.
+ */
+ public static final short UnknownAuthority_1 = 136;
+
+ /**
* Axis direction “{0}” is unknown.
*/
public static final short UnknownAxisDirection_1 = 112;
Modified:
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties?rev=1558561&r1=1558560&r2=1558561&view=diff
==============================================================================
---
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
[ISO-8859-1] (original)
+++
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
[ISO-8859-1] Wed Jan 15 20:53:24 2014
@@ -85,6 +85,7 @@ MismatchedCRS = The
MismatchedDimension_2 = Mismatched object dimensions: {0}D and
{1}D.
MismatchedDimension_3 = Argument \u2018{0}\u2019 has {2}
dimension{2,choice,1#|2#s}, while {1} was expected.
MismatchedMatrixSize_4 = Mismatched matrix sizes: expected
{0}\u00d7{1} but got {2}\u00d7{3}.
+MissingAuthority_1 = No authority was specified for code
\u201c{0}\u201d. The expected syntax is \u201cAUTHORITY:CODE\u201d.
MissingRequiredModule_1 = This operation requires the
\u201c{0}\u201d module.
MissingSchemeInURI = Missing scheme in URI.
MissingValueForOption_1 = Missing value for option \u201c{0}\u201d.
@@ -116,6 +117,7 @@ NotAPrimitiveWrapper_1 = Clas
NotASkewSymmetricMatrix = Matrix is not skew-symmetric.
NotAUnicodeIdentifier_1 = Text \u201c{0}\u201d is not a Unicode
identifier.
NotComparableClass_1 = Class \u2018{0}\u2019 is not a comparable.
+NoSuchAuthorityCode_3 = No code \u201c{2}\u201d from authority
\u201c{0}\u201d found for object of type \u2018{1}\u2019.
NoSuchElement_1 = Element \u201c{0}\u201d has not been found.
NoSuchProperty_2 = No property named \u201c{0}\u201d has been
found in \u201c{1}\u201d.
NoUnit = No unit of measurement has been specified.
@@ -138,6 +140,7 @@ UnexpectedChange_1 = Unex
UnexpectedEndOfFile_1 = Unexpected end of file while reading
\u201c{0}\u201d.
UnexpectedEndOfString_1 = More characters were expected at the end
of \u201c{0}\u201d.
UnexpectedFileFormat_2 = File \u201c{1}\u201d seems to be encoded
in an other format than {0}.
+UnknownAuthority_1 = Authority \u201c{0}\u201d is unknown.
UnknownAxisDirection_1 = Axis direction \u201c{0}\u201d is unknown.
UnknownCommand_1 = Command \u201c{0}\u201d is not recognized.
UnknownEnumValue_1 = Unknown enumeration value: {0}.
Modified:
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
URL:
http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties?rev=1558561&r1=1558560&r2=1558561&view=diff
==============================================================================
---
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
[ISO-8859-1] (original)
+++
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
[ISO-8859-1] Wed Jan 15 20:53:24 2014
@@ -75,6 +75,7 @@ MismatchedCRS = Le s
MismatchedDimension_2 = Les dimensions des objets ({0}D et {1}D)
ne concordent pas.
MismatchedDimension_3 = L\u2019argument \u2018{0}\u2019 a {2}
dimension{2,choice,1#|2#s}, alors qu\u2019on en attendait {1}.
MismatchedMatrixSize_4 = Une matrice de taille de {0}\u00d7{1}
\u00e9tait attendue mais la matrice donn\u00e9es est de taille {2}\u00d7{3}.
+MissingAuthority_1 = Aucune autorit\u00e9 n\u2019a
\u00e9t\u00e9 sp\u00e9cifi\u00e9e pour le code \u201c{0}\u201d. Le format
attendu est \u201cAUTORIT\u00c9:CODE\u201d.
MissingRequiredModule_1 = Cette op\u00e9ration requiert le module
\u201c{0}\u201d.
MissingSchemeInURI = Il manque le sch\u00e9ma d\u2019URI.
MissingValueForOption_1 = Aucune valeur n\u2019a \u00e9t\u00e9
d\u00e9finie pour l\u2019option \u201c{0}\u201d.
@@ -106,6 +107,7 @@ NotAPrimitiveWrapper_1 = La c
NotASkewSymmetricMatrix = La matrice n\u2019est pas
antisym\u00e9trique.
NotAUnicodeIdentifier_1 = Le texte \u201c{0}\u201d n\u2019est pas un
identifiant Unicode.
NotComparableClass_1 = La classe \u2018{0}\u2019 n\u2019est pas
comparable.
+NoSuchAuthorityCode_3 = Aucun code \u201c{2}\u201d de
l\u2019autorit\u00e9 \u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9 pour un
objet de type \u2018{1}\u2019.
NoSuchElement_1 = L\u2019\u00e9lement \u201c{0}\u201d
n\u2019a pas \u00e9t\u00e9 trouv\u00e9.
NoSuchProperty_2 = Aucune propri\u00e9t\u00e9 nomm\u00e9e
\u201c{0}\u201d n\u2019a \u00e9t\u00e9 trouv\u00e9e dans \u201c{1}\u201d.
NoUnit = Aucune unit\u00e9 de mesure n\u2019a
\u00e9t\u00e9 sp\u00e9cifi\u00e9e.
@@ -127,6 +129,7 @@ UnexpectedChange_1 = Chan
UnexpectedEndOfFile_1 = Fin de fichier inattendue lors de la
lecture de \u201c{0}\u201d.
UnexpectedEndOfString_1 = D\u2019autres caract\u00e8res \u00e9taient
attendus \u00e0 la fin du texte \u201c{0}\u201d.
UnexpectedFileFormat_2 = Le fichier \u201c{1}\u201d semble
\u00eatre encod\u00e9 dans un autre format que {0}.
+UnknownAuthority_1 = L\u2019autorit\u00e9 \u201c{0}\u201d
n\u2019est pas reconnue.
UnknownAxisDirection_1 = La direction d\u2019axe \u201c{0}\u201d
n\u2019est pas reconnue.
UnknownCommand_1 = La commande \u201c{0}\u201d n\u2019est pas
reconnue.
UnknownEnumValue_1 = Valeur d\u2019\u00e9num\u00e9ration
inconnue: {0}.