You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2015/12/19 01:22:33 UTC

svn commit: r1720864 [1/3] - in /sis/branches/JDK8/core: sis-metadata/src/main/java/org/apache/sis/internal/metadata/ sis-metadata/src/main/java/org/apache/sis/io/wkt/ sis-metadata/src/main/java/org/apache/sis/metadata/ sis-metadata/src/main/java/org/a...

Author: desruisseaux
Date: Sat Dec 19 00:22:32 2015
New Revision: 1720864

URL: http://svn.apache.org/viewvc?rev=1720864&view=rev
Log:
Initial port of EPSGFactory.createCoordinateOperation(String) method.

Added:
    sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java   (with props)
Modified:
    sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
    sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeTableView.java
    sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
    sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/EPSGFactory.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/measure/Units.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/logging/MonolineFormatter.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
    sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
    sis/branches/JDK8/core/sis-utility/src/test/java/org/apache/sis/util/CharSequencesTest.java

Added: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java?rev=1720864&view=auto
==============================================================================
--- sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java (added)
+++ sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java [UTF-8] Sat Dec 19 00:22:32 2015
@@ -0,0 +1,87 @@
+/*
+ * 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.internal.metadata;
+
+import java.util.Collections;
+import javax.measure.unit.SI;
+import org.opengis.util.RecordType;
+import org.opengis.util.InternationalString;
+import org.opengis.metadata.quality.PositionalAccuracy;
+import org.opengis.metadata.quality.EvaluationMethodType;
+import org.apache.sis.internal.util.Constants;
+import org.apache.sis.metadata.iso.quality.DefaultQuantitativeResult;
+import org.apache.sis.metadata.iso.quality.DefaultAbsoluteExternalPositionalAccuracy;
+import org.apache.sis.util.iso.DefaultRecordSchema;
+import org.apache.sis.util.resources.Vocabulary;
+import org.apache.sis.util.Static;
+import org.apache.sis.util.iso.DefaultRecord;
+
+
+/**
+ * Creates a record reporting coordinate transformation accuracy.
+ *
+ * @author  Martin Desruisseaux (Geomatys)
+ * @since   0.7
+ * @version 0.7
+ * @module
+ */
+public final class TransformationAccuracy extends Static {
+    /**
+     * The name for the transformation accuracy metadata.
+     */
+    private static final InternationalString TRANSFORMATION_ACCURACY =
+            Vocabulary.formatInternational(Vocabulary.Keys.TransformationAccuracy);
+
+    /**
+     * The type of record instances which will hold coordinate transformation accuracy values.
+     */
+    private static final RecordType TYPE;
+    static {
+        final DefaultRecordSchema schema = new DefaultRecordSchema(null, null, Constants.SIS);
+        TYPE = schema.createRecordType("Real", Collections.<CharSequence,Class<?>>singletonMap(
+                Vocabulary.formatInternational(Vocabulary.Keys.Value), Double.class));
+    }
+
+    /**
+     * Do not allow instantiation of this class.
+     */
+    private TransformationAccuracy() {
+    }
+
+    /**
+     * Creates a positional accuracy for the given value, in metres.
+     *
+     * @param accuracy The accuracy in metres.
+     * @return A positional accuracy with the given value.
+     */
+    public static PositionalAccuracy create(final Double accuracy) {
+        final DefaultRecord record = new DefaultRecord(TYPE);
+        record.setAll(accuracy);
+
+        final DefaultQuantitativeResult result = new DefaultQuantitativeResult();
+        result.setValues(Collections.singletonList(record));
+        result.setValueUnit(SI.METRE);              // In metres by definition in the EPSG database.
+        result.setValueType(TYPE);
+
+        final DefaultAbsoluteExternalPositionalAccuracy element =
+                new DefaultAbsoluteExternalPositionalAccuracy(result);
+        element.setNamesOfMeasure(Collections.singleton(TRANSFORMATION_ACCURACY));
+        element.setEvaluationMethodType(EvaluationMethodType.DIRECT_EXTERNAL);
+        element.freeze();
+        return element;
+    }
+}

Propchange: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/TransformationAccuracy.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain;charset=UTF-8

Modified: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java?rev=1720864&r1=1720863&r2=1720864&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/GeodeticObjectParser.java [UTF-8] Sat Dec 19 00:22:32 2015
@@ -67,6 +67,7 @@ import org.apache.sis.internal.metadata.
 import org.apache.sis.internal.metadata.WKTKeywords;
 import org.apache.sis.internal.metadata.VerticalDatumTypes;
 import org.apache.sis.internal.metadata.ReferencingServices;
+import org.apache.sis.internal.metadata.TransformationAccuracy;
 import org.apache.sis.internal.util.LocalizedParseException;
 import org.apache.sis.internal.system.DefaultFactories;
 import org.apache.sis.util.CharSequences;
@@ -86,7 +87,7 @@ import static java.util.Collections.sing
  * @author  Rémi Eve (IRD)
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @since   0.6
- * @version 0.6
+ * @version 0.7
  * @module
  */
 final class GeodeticObjectParser extends MathTransformParser implements Comparator<CoordinateSystemAxis> {
@@ -2103,7 +2104,8 @@ final class GeodeticObjectParser extends
         parseParameters(element, parameters, null, null);
         properties.put(ReferencingServices.PARAMETERS_KEY, parameters);
         if (accuracy != null) {
-            accuracy.pullDouble("accuracy");    // TODO: share the code from EPSG factory.
+            properties.put(CoordinateOperation.COORDINATE_OPERATION_ACCURACY_KEY,
+                    TransformationAccuracy.create(accuracy.pullDouble("accuracy")));
             accuracy.close(ignoredElements);
         }
         try {

Modified: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeTableView.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeTableView.java?rev=1720864&r1=1720863&r2=1720864&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeTableView.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeTableView.java [UTF-8] Sat Dec 19 00:22:32 2015
@@ -108,8 +108,9 @@ final class TreeTableView implements Tre
      * Returns the columns included in this tree table.
      */
     @Override
+    @SuppressWarnings("ReturnOfCollectionOrArrayField")
     public List<TableColumn<?>> getColumns() {
-        return COLUMNS;
+        return COLUMNS;     // Unmodifiable
     }
 
     /**

Modified: sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java?rev=1720864&r1=1720863&r2=1720864&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/quality/DefaultQuantitativeResult.java [UTF-8] Sat Dec 19 00:22:32 2015
@@ -143,23 +143,43 @@ public class DefaultQuantitativeResult e
      *
      * @param newValues The new values.
      */
-    public void setValues(final List<Record> newValues) {
+    public void setValues(final List<? extends Record> newValues) {
         values = writeList(newValues, values, Record.class);
     }
 
     /**
      * Return the value type for reporting a data quality result.
      *
+     * <div class="section">Default value</div>
+     * If no type has been set but all {@linkplain #getValues() values} are of the same type,
+     * then this method defaults to that type. Otherwise this method returns {@code null}.
+     *
      * @return Value type for reporting a data quality result, or {@code null}.
      */
     @Override
     @XmlElement(name = "valueType")
     public RecordType getValueType()  {
-        return valueType;
+        RecordType type = valueType;
+        if (type == null && values != null) {
+            for (final Record value : values) {
+                if (value != null) {
+                    final RecordType t = value.getRecordType();
+                    if (t == null) {
+                        return null;
+                    } else if (type == null) {
+                        type = t;
+                    } else if (type != t) {
+                        return null;
+                    }
+                }
+            }
+        }
+        return type;
     }
 
     /**
      * Sets the value type for reporting a data quality result.
+     * A {@code null} value restores the default value documented in {@link #getValueType()}.
      *
      * @param newValue The new value type.
      */

Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java?rev=1720864&r1=1720863&r2=1720864&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java [UTF-8] Sat Dec 19 00:22:32 2015
@@ -162,7 +162,7 @@ public abstract class GeodeticAuthorityF
      * {@linkplain org.apache.sis.referencing.crs.DefaultGeographicCRS geographic coordinate reference system}).
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * Two frequently used authorities are "CRS" and "EPSG", which include the following codes:
      *
@@ -202,7 +202,7 @@ public abstract class GeodeticAuthorityF
      * for a large portion of the earth's surface.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * Two frequently used authorities are "CRS" and "EPSG", which include the following codes:
      *
@@ -246,7 +246,7 @@ public abstract class GeodeticAuthorityF
      * the need to model the earth's curvature.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -280,7 +280,7 @@ public abstract class GeodeticAuthorityF
      * that are a close match to actual field values.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which contains more than 4000 codes for projected CRS.
      * Some of them are:
@@ -313,7 +313,7 @@ public abstract class GeodeticAuthorityF
      * but the relationship with gravity may not be straightforward.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -362,7 +362,7 @@ public abstract class GeodeticAuthorityF
      * Creates a CRS describing the position of points through two or more independent coordinate reference systems.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -410,7 +410,7 @@ public abstract class GeodeticAuthorityF
      * Creates a 1-, 2- or 3-dimensional contextually local coordinate reference system.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -460,7 +460,7 @@ public abstract class GeodeticAuthorityF
      * If the datum is known at compile time, it is recommended to invoke the most precise method instead of this one.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which contains hundred of datum. Some of them are:
      *
@@ -494,7 +494,7 @@ public abstract class GeodeticAuthorityF
      * centered in the ellipsoid (or sphere).
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which contains hundred of datum. Some of them are:
      *
@@ -528,7 +528,7 @@ public abstract class GeodeticAuthorityF
      * it is combined to create a vertical CRS.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -581,7 +581,7 @@ public abstract class GeodeticAuthorityF
      * This origin can be fixed with respect to the earth or be a defined point on a moving vehicle.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -631,7 +631,7 @@ public abstract class GeodeticAuthorityF
      * In mathematical terms, it is a surface formed by the rotation of an ellipse about its minor axis.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -662,7 +662,7 @@ public abstract class GeodeticAuthorityF
      * Creates a prime meridian defining the origin from which longitude values are determined.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -695,7 +695,7 @@ public abstract class GeodeticAuthorityF
      * Creates information about spatial, vertical, and temporal extent (usually a domain of validity) from a code.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -727,7 +727,7 @@ public abstract class GeodeticAuthorityF
      * method instead of this one.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -760,7 +760,7 @@ public abstract class GeodeticAuthorityF
      * sometime with ellipsoidal height.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -791,7 +791,7 @@ public abstract class GeodeticAuthorityF
      * Creates a 1-dimensional coordinate system for heights or depths of points.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -840,7 +840,7 @@ public abstract class GeodeticAuthorityF
      * All axes shall have the same linear unit of measure.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -872,7 +872,7 @@ public abstract class GeodeticAuthorityF
      * Not to be confused with an ellipsoidal coordinate system based on an ellipsoid "degenerated" into a sphere.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -938,7 +938,7 @@ public abstract class GeodeticAuthorityF
      * Creates a coordinate system axis with name, direction, unit and range of values.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -971,7 +971,7 @@ public abstract class GeodeticAuthorityF
      * Creates an unit of measurement from a code.
      *
      * <div class="note"><b>Example:</b>
-     * the {@linkplain #getAuthorityCodes(java.lang.Class) set of available codes} depends on the defining
+     * the {@linkplain #getAuthorityCodes(Class) set of available codes} depends on the defining
      * {@linkplain #getAuthority() authority} and the {@code GeodeticAuthorityFactory} subclass in use.
      * A frequently used authority is "EPSG", which includes the following codes:
      *
@@ -979,8 +979,12 @@ public abstract class GeodeticAuthorityF
      *   <tr><th>Code</th>       <th>Description</th></tr>
      *   <tr><td>EPSG::9002</td> <td>decimal degree</td></tr>
      *   <tr><td>EPSG::9001</td> <td>metre</td></tr>
+     *   <tr><td>EPSG::9030</td> <td>kilometre</td></tr>
      *   <tr><td>EPSG::1040</td> <td>second</td></tr>
-     * </table></div>
+     *   <tr><td>EPSG::1029</td> <td>year</td></tr>
+     * </table>
+     *
+     * See {@link org.apache.sis.measure.Units#valueOfEPSG(int)} for a more complete list of codes.</div>
      *
      * <div class="section">Default implementation</div>
      * The default implementation delegates to {@link #createObject(String)} and casts the result.
@@ -1018,10 +1022,15 @@ public abstract class GeodeticAuthorityF
     }
 
     /**
-     * Creates  description of the algorithm and parameters used to perform a coordinate operation.
+     * Creates description of the algorithm and parameters used to perform a coordinate operation.
      * An {@code OperationMethod} is a kind of metadata: it does not perform any coordinate operation
      * (e.g. map projection) by itself, but tells us what is needed in order to perform such operation.
      *
+     * <p>Available methods depend both on the {@linkplain #getAuthorityCodes(Class) set declared by the authority} and on the
+     * <a href="http://sis.apache.org/book/tables/CoordinateOperationMethods.html">list of methods implemented in Apache SIS</a>.
+     * In order to be supported, an operation method must have its formulas coded in the Java programming language.
+     * See {@link org.apache.sis.referencing.operation.transform.MathTransformProvider} for more information.</p>
+     *
      * <div class="section">Default implementation</div>
      * The default implementation delegates to {@link #createObject(String)} and casts the result.
      * If the result can not be casted, then a {@link NoSuchAuthorityCodeException} is thrown.
@@ -1032,6 +1041,7 @@ public abstract class GeodeticAuthorityF
      * @throws FactoryException if the object creation failed for some other reason.
      *
      * @see org.apache.sis.referencing.operation.DefaultOperationMethod
+     * @see <a href="http://sis.apache.org/book/tables/CoordinateOperationMethods.html">List of supported methods</a>
      */
     public OperationMethod createOperationMethod(final String code) throws NoSuchAuthorityCodeException, FactoryException {
         return cast(OperationMethod.class, createObject(code), code);