Author: desruisseaux
Date: Sat Oct 14 09:31:32 2017
New Revision: 1812174

URL: http://svn.apache.org/viewvc?rev=1812174&view=rev
Log:
Simplify a little bit DefinitionURI by moving the 'format(…)' code to the only 
place where it was used.

Modified:
    
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/NameMeaning.java
    
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
    
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/NameMeaningTest.java
    
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/DefinitionURI.java
    
sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/internal/util/DefinitionURITest.java

Modified: 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/NameMeaning.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/NameMeaning.java?rev=1812174&r1=1812173&r2=1812174&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/NameMeaning.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/NameMeaning.java
 [UTF-8] Sat Oct 14 09:31:32 2017
@@ -29,6 +29,7 @@ import org.opengis.referencing.operation
 import org.opengis.util.InternationalString;
 import org.opengis.metadata.citation.Citation;
 import org.apache.sis.util.Static;
+import org.apache.sis.internal.util.Utilities;
 import org.apache.sis.internal.util.Constants;
 import org.apache.sis.internal.util.DefinitionURI;
 import org.apache.sis.metadata.iso.citation.Citations;
@@ -39,9 +40,9 @@ import org.apache.sis.metadata.iso.citat
  * The meaning are defined by <cite>OGC Naming Authority</cite> (OGCNA) or 
other OGC sources.
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
- * @version 0.7
+ * @version 0.8
  *
- * @see org.apache.sis.internal.util.DefinitionURI
+ * @see DefinitionURI
  * @see <a 
href="http://www.opengeospatial.org/ogcna";>http://www.opengeospatial.org/ogcna</a>
  * @see <a 
href="http://portal.opengeospatial.org/files/?artifact_id=24045";>Definition 
identifier URNs in OGC namespace</a>
  *
@@ -71,7 +72,7 @@ public final class NameMeaning extends S
 
     /**
      * The object types for instances of {@link #CLASSES}.
-     * See {@link org.apache.sis.internal.util.DefinitionURI} javadoc for a 
list of object types in URN.
+     * See {@link DefinitionURI} javadoc for a list of object types in URN.
      *
      * <p>Types not yet listed (waiting to see if there is a use for them):</p>
      *
@@ -142,8 +143,10 @@ public final class NameMeaning extends S
 
     /**
      * Formats the given identifier using the {@code "ogc:urn:def:"} syntax 
with possible heuristic changes to
-     * the given values. This method delegates to {@link 
DefinitionURI#format(String, String, String, String)}
-     * after "fixing" the given values using some heuristic knowledge about 
the meaning of URN.
+     * the given values. The identifier code space, version and code are 
appended omitting any characters that
+     * are not valid for a Unicode identifier. If some information are missing 
in the given identifier, then
+     * this method returns {@code null}. This method tries to "fix" the given 
values using some heuristic
+     * knowledge about the meaning of URN.
      *
      * @param  type       the object type.
      * @param  authority  the authority as one of the values documented in 
{@link DefinitionURI} javadoc.
@@ -151,49 +154,67 @@ public final class NameMeaning extends S
      * @param  code       the code.
      * @return an identifier using the URN syntax, or {@code null} if a 
mandatory information is missing.
      *
-     * @see DefinitionURI#format(String, String, String, String)
-     *
      * @since 0.7
      */
     public static String toURN(final Class<?> type, final String authority, 
String version, String code) {
-        if (type != null && authority != null && code != null) {
-            final String key = authority.toUpperCase(Locale.US);
-            String codeSpace = AUTHORITIES.get(key);
-            if (codeSpace == null) {
-                /*
-                 * If the given authority is not one of the authorities that 
we expected for the OGC namespace,
-                 * verify if we can related it to one of the specifications 
enumerated in the Citations class.
-                 * For example if the user gave us "OGP" as the authority, we 
will replace that by "IOGP" (the
-                 * new name for that organization).
-                 */
-                final Citation c = Citations.fromName(key);
-                codeSpace = Citations.getCodeSpace(c);
-                if (AUTHORITIES.get(codeSpace) == null) {
-                    return null;            // Not an authority that we 
recognize for the OGC namespace.
-                }
-                version = getVersion(c);    // Unconditionally overwrite the 
user-specified version.
+        if (type == null || authority == null || code == null) {
+            return null;
+        }
+        final String key = authority.toUpperCase(Locale.US);
+        String codeSpace = AUTHORITIES.get(key);
+        if (codeSpace == null) {
+            /*
+             * If the given authority is not one of the authorities that we 
expected for the OGC namespace,
+             * verify if we can related it to one of the specifications 
enumerated in the Citations class.
+             * For example if the user gave us "OGP" as the authority, we will 
replace that by "IOGP" (the
+             * new name for that organization).
+             */
+            final Citation c = Citations.fromName(key);
+            codeSpace = Citations.getCodeSpace(c);
+            if (AUTHORITIES.get(codeSpace) == null) {
+                return null;            // Not an authority that we recognize 
for the OGC namespace.
+            }
+            version = getVersion(c);    // Unconditionally overwrite the 
user-specified version.
+            /*
+             * If the above lines resulted in a change of codespace, we may 
need to concatenate the authority
+             * with the code for preserving information. The main use case is 
WMS codes like "CRS:84":
+             *
+             *   1) Citations.fromName("CRS") gave us Citations.WMS (version 
1.3) as the authority.
+             *   2) getCodeSpace(Citations.WMS) gave us "OGC", which is indeed 
the codespace used in URN.
+             *   3) OGC Naming Authority – Procedures (OGC-09-046r2) said that 
"CRS:84" should be formatted
+             *      as "urn:ogc:def:crs:OGC:1.3:CRS84". We already got the 
"OGC" and "1.3" parts with above
+             *      steps, the last part is to replace "84" by "CRS84".
+             */
+            if (!authority.equals(codeSpace) && !code.startsWith(authority)) {
+                code = authority + code;    // Intentionally no ':' separator.
+            }
+        }
+        final StringBuilder buffer = new StringBuilder(DefinitionURI.PREFIX);
+loop:   for (int p=0; ; p++) {
+            final String part;
+            switch (p) {
+                case 0:  part = toObjectType(type); break;
+                case 1:  part = codeSpace;          break;
+                case 2:  part = version;            break;
+                case 3:  part = code;               break;
+                default: break loop;
+            }
+            if 
(!Utilities.appendUnicodeIdentifier(buffer.append(DefinitionURI.SEPARATOR), 
'\u0000', part, ".-", false)) {
                 /*
-                 * If the above lines resulted in a chance of codespace, we 
may need to concatenate the authority
-                 * with the code for preserving information. The main use case 
is WMS codes like "CRS:84":
-                 *
-                 *   1) Citations.fromName("CRS") gave us Citations.WMS 
(version 1.3) as the authority.
-                 *   2) getCodeSpace(Citations.WMS) gave us "OGC", which is 
indeed the codespace used in URN.
-                 *   3) OGC Naming Authority – Procedures (OGC-09-046r2) said 
that "CRS:84" should be formatted
-                 *      as "urn:ogc:def:crs:OGC:1.3:CRS84". We already got the 
"OGC" and "1.3" parts with above
-                 *      steps, the last part is to replace "84" by "CRS84".
+                 * Only the version (p = 2) is optional. All other fields are 
mandatory.
+                 * If no character has been added for a mandatory field, we 
can not build a URN.
                  */
-                if (!authority.equals(codeSpace) && 
!code.startsWith(authority)) {
-                    code = authority + code;    // Intentionally no ':' 
separator.
+                if (p != 2) {
+                    return null;
                 }
             }
-            return DefinitionURI.format(toObjectType(type), codeSpace, 
version, code);
         }
-        return null;
+        return buffer.toString();
     }
 
     /**
      * Returns the "object type" part of an OGC URN for the given class, or 
{@code null} if unknown.
-     * See {@link org.apache.sis.internal.util.DefinitionURI} javadoc for a 
list of object types in URN.
+     * See {@link DefinitionURI} javadoc for a list of object types in URN.
      *
      * @param  type  the class for which to get the URN type.
      * @return the URN type, or {@code null} if unknown.

Modified: 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java?rev=1812174&r1=1812173&r2=1812174&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
 [UTF-8] Sat Oct 14 09:31:32 2017
@@ -251,7 +251,7 @@ public final class Citations extends Sta
      * <ul>
      *   <li><a href="http://www.opengeospatial.org/standards/ct";>Coordinate 
Transformation Service</a></li>
      *   <li><a href="http://www.opengeospatial.org/standards/wms";>Web Map 
Service</a></li>
-     *   <li>Definition identifier URNs in OGC namespace</li>
+     *   <li><a 
href="http://portal.opengeospatial.org/files/?artifact_id=24045";>Definition 
identifier URNs in OGC namespace</a></li>
      * </ul>
      *
      * We do not commit to a particular OGC specification in order to keep the 
flexibility to change the

Modified: 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/NameMeaningTest.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/NameMeaningTest.java?rev=1812174&r1=1812173&r2=1812174&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/NameMeaningTest.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/internal/metadata/NameMeaningTest.java
 [UTF-8] Sat Oct 14 09:31:32 2017
@@ -64,7 +64,9 @@ public final strictfp class NameMeaningT
     @Test
     @DependsOnMethod("testToObjectType")
     public void testToURN() {
+        assertEquals("urn:ogc:def:crs:EPSG::4326",    
NameMeaning.toURN(GeodeticCRS.class,   "EPSG", null, "4326"));
         assertEquals("urn:ogc:def:crs:OGC:1.3:CRS84", 
NameMeaning.toURN(GeographicCRS.class, "CRS",  null,   "84"));
         assertEquals("urn:ogc:def:datum:EPSG::6326",  
NameMeaning.toURN(GeodeticDatum.class, "EPSG", null, "6326"));
+        assertNull  ("Authority is not optional.",    
NameMeaning.toURN(GeographicCRS.class, null,   null, "4326"));
     }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/DefinitionURI.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/DefinitionURI.java?rev=1812174&r1=1812173&r2=1812174&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/DefinitionURI.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/DefinitionURI.java
 [UTF-8] Sat Oct 14 09:31:32 2017
@@ -25,7 +25,6 @@ import org.apache.sis.internal.system.Lo
 
 import static org.apache.sis.util.CharSequences.*;
 import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
-import static org.apache.sis.internal.util.Utilities.appendUnicodeIdentifier;
 
 
 /**
@@ -684,43 +683,6 @@ public final class DefinitionURI {
     }
 
     /**
-     * Formats the given identifier using the {@code "ogc:urn:def:"} syntax. 
The identifier code space,
-     * version and code are appended omitting any characters that are not 
valid for a Unicode identifier.
-     * If some information are missing in the given identifier, then this 
method returns {@code null}.
-     *
-     * @param  type       the object type as one of the types documented in 
class javadoc, or {@code null}.
-     * @param  authority  the authority as one of the values documented in 
class javadoc, or {@code null}.
-     * @param  version    the code version, or {@code null}. This is the only 
optional information.
-     * @param  code       the code, or {@code null}.
-     * @return an identifier using the URN syntax, or {@code null} if a 
mandatory information is missing.
-     *
-     * @see org.apache.sis.internal.metadata.NameMeaning#toURN(Class, String, 
String, String)
-     */
-    public static String format(final String type, final String authority, 
final String version, final String code) {
-        final StringBuilder buffer = new StringBuilder(PREFIX);
-loop:   for (int p=0; ; p++) {
-            final String part;
-            switch (p) {
-                case 0:  part = type;      break;
-                case 1:  part = authority; break;
-                case 2:  part = version;   break;
-                case 3:  part = code;      break;
-                default: break loop;
-            }
-            if (!appendUnicodeIdentifier(buffer.append(SEPARATOR), '\u0000', 
part, ".-", false)) {
-                /*
-                 * Only the version (p = 2) is optional. All other fields are 
mandatory.
-                 * If no character has been added for a mandatory field, we 
can not build a URN.
-                 */
-                if (p != 2) {
-                    return null;
-                }
-            }
-        }
-        return buffer.toString();
-    }
-
-    /**
      * Returns a string representation of this URI. If the URI were originally 
a GML's URL, then this method formats
      * the URI in the {@code "http://www.opengis.net/gml/srs/"} namespace. 
Otherwise the URI were originally a URL,
      * then this method formats the URI in the {@code 
"http://www.opengis.net/"} namespace.

Modified: 
sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/internal/util/DefinitionURITest.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/internal/util/DefinitionURITest.java?rev=1812174&r1=1812173&r2=1812174&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/internal/util/DefinitionURITest.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/internal/util/DefinitionURITest.java
 [UTF-8] Sat Oct 14 09:31:32 2017
@@ -232,13 +232,4 @@ public final strictfp class DefinitionUR
         assertNull  (        DefinitionURI.codeOf("uom", "EPSG", 
"http://www.opengis.net/gml/srs/epsg.xml#4326";));
         assertNull  (        DefinitionURI.codeOf("uom", "EPSG", 
"http://schemas.opengis.net/iso/19139/20070417/resources/uom/gmxUom.xml#xpointer(//*[@gml:id='m'])"));
     }
-
-    /**
-     * Tests {@link DefinitionURI#format(String, String, String, String)}.
-     */
-    @Test
-    public void testToURN() {
-        assertEquals("urn:ogc:def:crs:EPSG::4326", DefinitionURI.format("crs", 
"EPSG", null, "4326"));
-        assertNull  ("Authority is not optional.", DefinitionURI.format("crs", 
null,   null, "4326"));
-    }
 }


Reply via email to