Author: desruisseaux
Date: Mon Apr 25 16:51:57 2016
New Revision: 1740864

URL: http://svn.apache.org/viewvc?rev=1740864&view=rev
Log:
Complete implementation of the "transform" command-line tools.

Modified:
    
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/MetadataCommand.java
    
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/TransformCommand.java
    
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.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/main/java/org/apache/sis/util/resources/Vocabulary.java
    
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
    
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties

Modified: 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/MetadataCommand.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/MetadataCommand.java?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/MetadataCommand.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/MetadataCommand.java
 [UTF-8] Mon Apr 25 16:51:57 2016
@@ -208,7 +208,7 @@ class MetadataCommand extends CommandRun
      * @throws IOException should never happen, since we are appending to a 
print writer.
      */
     @Override
-    public int run() throws InvalidOptionException, DataStoreException, 
JAXBException, FactoryException, IOException {
+    public int run() throws Exception {
         parseArguments();
         if (convention != null) {
             final String format = outputFormat.name();

Modified: 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/TransformCommand.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/TransformCommand.java?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/TransformCommand.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/application/sis-console/src/main/java/org/apache/sis/console/TransformCommand.java
 [UTF-8] Mon Apr 25 16:51:57 2016
@@ -17,25 +17,57 @@
 package org.apache.sis.console;
 
 import java.util.EnumSet;
+import java.util.Locale;
+import java.io.IOException;
+import java.io.FileReader;
+import java.io.LineNumberReader;
+import java.io.InputStreamReader;
+import java.text.NumberFormat;
+import javax.measure.unit.Unit;
+import javax.measure.unit.NonSI;
+import javax.measure.unit.SI;
+import javax.measure.converter.ConversionException;
 import org.opengis.metadata.Metadata;
+import org.opengis.geometry.MismatchedDimensionException;
+import org.opengis.metadata.extent.GeographicBoundingBox;
 import org.opengis.util.FactoryException;
 import org.opengis.referencing.IdentifiedObject;
 import org.opengis.referencing.ReferenceSystem;
 import org.opengis.referencing.NoSuchAuthorityCodeException;
+import org.opengis.referencing.crs.GeographicCRS;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.cs.CoordinateSystem;
+import org.opengis.referencing.operation.SingleOperation;
 import org.opengis.referencing.operation.CoordinateOperation;
+import org.opengis.referencing.operation.ConcatenatedOperation;
+import org.opengis.referencing.operation.PassThroughOperation;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
+import org.apache.sis.geometry.ImmutableEnvelope;
 import org.apache.sis.internal.referencing.Formulas;
+import org.apache.sis.internal.referencing.DirectPositionView;
+import org.apache.sis.internal.referencing.ReferencingUtilities;
 import org.apache.sis.referencing.IdentifiedObjects;
 import org.apache.sis.referencing.CRS;
 import org.apache.sis.internal.util.X364;
+import org.apache.sis.io.wkt.Colors;
+import org.apache.sis.io.wkt.Convention;
+import org.apache.sis.io.wkt.WKTFormat;
+import org.apache.sis.math.DecimalFunctions;
+import org.apache.sis.math.MathFunctions;
+import org.apache.sis.measure.Units;
 import org.apache.sis.storage.DataStore;
 import org.apache.sis.storage.DataStores;
 import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.util.resources.Vocabulary;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.logging.Logging;
+import org.apache.sis.util.CharSequences;
 
 
 /**
  * The "transform" subcommand.
+ * The output is a comma separated values (CSV) file, with {@code '#'} as the 
first character of comment lines.
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.7
@@ -49,11 +81,56 @@ final class TransformCommand extends Met
     private CoordinateOperation operation;
 
     /**
+     * The coordinate operation domain of validity.
+     * We use the {@code ImmutableEnvelope} type in order to handle envelope 
crossing the anti-meridian.
+     *
+     * @see #computeDomainOfValidity()
+     */
+    private ImmutableEnvelope domainOfValidity;
+
+    /**
+     * The transformation from source CRS to the domain of validity CRS, or 
{@code null} if none.
+     *
+     * @see #computeDomainOfValidity()
+     */
+    private MathTransform toDomainOfValidityCRS;
+
+    /**
+     * Resources for {@link #printHeader(short)}.
+     */
+    private final Vocabulary resources;
+
+    /**
+     * The format to use for writing coordinate values.
+     */
+    private NumberFormat coordinateFormat;
+
+    /**
+     * Width of ordinate values, in number of characters in ordinate {@link 
String} representations.
+     */
+    private int ordinateWidth;
+
+    /**
+     * Suggested number of fraction digits for each ordinate values.
+     */
+    private int[] numFractionDigits;
+
+    /**
+     * We will switch to scientific notation if the ordinate value to format 
is greater than this value.
+     */
+    private double[] thresholdForScientificNotation;
+
+    /**
      * Creates the {@code "transform"} sub-command.
      */
     TransformCommand(final int commandIndex, final String... args) throws 
InvalidOptionException {
-        super(commandIndex, args, EnumSet.of(Option.SOURCE_CRS, 
Option.TARGET_CRS,
+        super(commandIndex, args, EnumSet.of(Option.SOURCE_CRS, 
Option.TARGET_CRS, Option.VERBOSE,
                 Option.LOCALE, Option.TIMEZONE, Option.ENCODING, 
Option.COLORS, Option.HELP, Option.DEBUG));
+
+        // Default output format for CRS.
+        outputFormat = Format.WKT;
+        convention   = Convention.WKT2_SIMPLIFIED;
+        resources    = Vocabulary.getResources(locale);
     }
 
     /**
@@ -95,54 +172,116 @@ final class TransformCommand extends Met
      * Transforms coordinates from the files given in argument or from the 
standard input stream.
      */
     @Override
-    public int run() throws InvalidOptionException, DataStoreException, 
FactoryException {
+    public int run() throws Exception {
         parseArguments();
+        if (outputFormat == Format.XML) {
+            final String format = outputFormat.name();
+            throw new 
InvalidOptionException(Errors.format(Errors.Keys.IncompatibleFormat_2, 
"transform", format), format);
+        }
         operation = CRS.findOperation(fetchCRS(Option.SOURCE_CRS), 
fetchCRS(Option.TARGET_CRS), null);
-        if (!operation.getIdentifiers().isEmpty()) {
-            print("Coordinate operation", operation);
-        } else {
-            print("Source CRS", operation.getSourceCRS());
-            print("Target CRS", operation.getTargetCRS());
+        /*
+         * Prints the header: source CRS, target CRS, operation steps and 
positional accuracy.
+         */
+        printHeader(Vocabulary.Keys.Source);      
printNameAndIdentifier(operation.getSourceCRS());
+        printHeader(Vocabulary.Keys.Destination); 
printNameAndIdentifier(operation.getTargetCRS());
+        printHeader(Vocabulary.Keys.Methods);     printOperationMethods 
(operation, false);
+        out.println();
+        if (options.containsKey(Option.VERBOSE)) {
+            printHeader(Vocabulary.Keys.Details);
+            out.println();
+            final WKTFormat f = new WKTFormat(locale, timezone);
+            f.setConvention(options.containsKey(Option.DEBUG) ? 
Convention.INTERNAL : convention);
+            if (colors) {
+                f.setColors(Colors.DEFAULT);
+            }
+            for (final CharSequence line : 
CharSequences.splitOnEOL(f.format(operation.getMathTransform()))) {
+                printCommentLinePrefix();
+                out.print("  ");
+                out.println(line);
+            }
         }
         double accuracy = CRS.getLinearAccuracy(operation);
         if (accuracy >= 0) {
             if (accuracy == 0) {
                 accuracy = Formulas.LINEAR_TOLERANCE;
             }
-            printHeader("Accuracy");
+            printHeader(Vocabulary.Keys.Accuracy);
+            if (colors) {
+                out.print(X364.FOREGROUND_YELLOW.sequence());       // Same as 
Colors.DEFAULT for ElementKind.NUMBER
+            }
             out.print(accuracy);
+            if (colors) {
+                out.print(X364.FOREGROUND_DEFAULT.sequence());
+            }
             out.println(" metres");
         }
+        /*
+         * At this point we finished to write the header. If there is at least 
one input file,
+         * compute the transformation needed for verifying if the input points 
are inside the
+         * domain of validity. Next we can perform the actual coordinate 
operations.
+         */
+        final boolean useStandardInput = useStandardInput();
+        if (useStandardInput || !files.isEmpty()) {
+            computeDomainOfValidity();
+            ordinateWidth    = 14;                                      // 
Must be set before computeNumFractionDigits(…).
+            coordinateFormat = NumberFormat.getInstance(Locale.US);
+            coordinateFormat.setGroupingUsed(false);
+            
computeNumFractionDigits(operation.getTargetCRS().getCoordinateSystem());
+            out.println();
+            printAxes(operation.getTargetCRS().getCoordinateSystem());
+            out.println();
+            if (useStandardInput) {
+                try (LineNumberReader in = new LineNumberReader(new 
InputStreamReader(System.in))) {
+                    transform(in, "stdin");
+                }
+            } else {
+                for (final String file : files) {
+                    try (LineNumberReader in = new LineNumberReader(new 
FileReader(file))) {
+                        transform(in, file);
+                    }
+                }
+            }
+        }
         return 0;
     }
 
     /**
-     * Prints the given string in bold characters. This is used for formatting
-     * some metadata in the header before to print transformed coordinates.
+     * Prints the character for commented lines.
+     *
+     * @param after  the color to apply after the comment character, if colors 
are enabled.
      */
-    private void printHeader(final String header) {
+    private void printCommentLinePrefix() {
         if (colors) {
-            out.print(X364.BOLD.sequence());
+            out.print(X364.FOREGROUND_GRAY.sequence());
         }
-        out.print(header);
-        out.print(':');
+        out.print("# ");
         if (colors) {
-            out.print(X364.NORMAL.sequence());
+            out.print(X364.FOREGROUND_DEFAULT.sequence());
         }
+    }
+
+    /**
+     * Prints the given string after the prefix comment. This is used for 
formatting
+     * some metadata in the header before to print transformed coordinates.
+     *
+     * @param key  a {@code Vocabulary.Keys} constant for the header to print.
+     */
+    private void printHeader(final short key) {
+        printCommentLinePrefix();
+        out.print(resources.getLabel(key));
         out.print(' ');
     }
 
     /**
      * Prints the name and authority code (if any) of the given object.
      */
-    private void print(final String header, final IdentifiedObject object) {
-        printHeader(header);
+    private void printNameAndIdentifier(final IdentifiedObject object) {
         out.print(object.getName().getCode());
         final String identifier = 
IdentifiedObjects.toString(IdentifiedObjects.getIdentifier(object, null));
         if (identifier != null) {
             out.print(' ');
             if (colors) {
-                out.print(X364.FOREGROUND_YELLOW.sequence());
+                out.print(X364.FOREGROUND_CYAN.sequence());
             }
             out.print('(');
             out.print(identifier);
@@ -153,4 +292,206 @@ final class TransformCommand extends Met
         }
         out.println();
     }
+
+    /**
+     * Prints a summary (currently only the operation method) of the given 
coordinate operation as a list item.
+     * The list will contain many items if the given operation is a 
concatenated operation.
+     *
+     * @param step  the coordinate operation to print as a list of steps.
+     */
+    private void printOperationMethods(final CoordinateOperation step, boolean 
isNext) {
+        if (step instanceof ConcatenatedOperation) {
+            for (final CoordinateOperation op : ((ConcatenatedOperation) 
step).getOperations()) {
+                printOperationMethods(op, isNext);
+                isNext = true;
+            }
+        } else if (step instanceof PassThroughOperation) {
+            printOperationMethods(((PassThroughOperation) 
step).getOperation(), isNext);
+        } else if (step instanceof SingleOperation) {
+            if (isNext) {
+                if (colors) {
+                    out.print(X364.FOREGROUND_GREEN.sequence());
+                }
+                out.print(" → ");
+                if (colors) {
+                    out.print(X364.FOREGROUND_DEFAULT.sequence());
+                }
+            }
+            out.print(((SingleOperation) 
step).getMethod().getName().getCode());
+        }
+    }
+
+    /**
+     * Prints a quoted text in the given color.
+     * If the given text contains the quote character, it will be escaped.
+     */
+    private void printQuotedText(final String text, final X364 color) {
+        if (colors) {
+            out.print(color.sequence());
+        }
+        out.print('"');
+        out.print(text.replace("\"", "\"\""));
+        out.print('"');
+        if (colors) {
+            out.print(X364.FOREGROUND_DEFAULT.sequence());
+        }
+    }
+
+    /*
+     * Prints the names of all coordinate system axes on the first row.
+     * This method does not add EOL character.
+     * This method opportunistically computes the suggested precision for 
formatting values.
+     *
+     * @throws ConversionException should never happen.
+     */
+    private void printAxes(final CoordinateSystem cs) {
+        final int targetDim = cs.getDimension();
+        for (int i=0; i<targetDim; i++) {
+            if (i != 0) {
+                out.print(',');
+            }
+            final String axis = cs.getAxis(i).getName().getCode();
+            out.print(CharSequences.spaces(ordinateWidth - (axis.length() + 
2)));
+            printQuotedText(axis, X364.FOREGROUND_CYAN);
+        }
+    }
+
+    /**
+     * Computes the suggested precision for printing values in the given units.
+     *
+     * @throws ConversionException should never happen.
+     */
+    private void computeNumFractionDigits(final CoordinateSystem cs) throws 
ConversionException {
+        final int dimension = cs.getDimension();
+        numFractionDigits = new int[dimension];
+        thresholdForScientificNotation = new double[dimension];
+        final double thresholdFactor = MathFunctions.pow10(ordinateWidth - 1);
+        for (int i=0; i<dimension; i++) {
+            final Unit<?> unit = cs.getAxis(0).getUnit();
+            final Unit<?> source;
+            double precision;
+            if (Units.isLinear(unit)) {
+                precision = Formulas.LINEAR_TOLERANCE;
+                source = SI.METRE;
+            } else if (Units.isAngular(unit)) {
+                precision = Formulas.ANGULAR_TOLERANCE;
+                source = NonSI.DEGREE_ANGLE;
+            } else {
+                precision = 0.001;
+                source = unit;
+            }
+            precision = source.getConverterToAny(unit).convert(precision);
+            if (precision > 0) {
+                numFractionDigits[i] = 
Math.max(DecimalFunctions.fractionDigitsForDelta(precision, false) + 1, 0);
+            }
+            thresholdForScientificNotation[i] = thresholdFactor * 
MathFunctions.pow10(-numFractionDigits[i]);
+        }
+    }
+
+    /**
+     * Computes the domain validity. This method is a "all or nothing" 
operation; if the domain of validity
+     * can not be computed, then {@link #toDomainOfValidityCRS} and {@link 
#domainOfValidity} stay {@code null}.
+     */
+    private void computeDomainOfValidity() {
+        final GeographicBoundingBox bbox = 
CRS.getGeographicBoundingBox(operation);
+        if (bbox != null) {
+            final GeographicCRS domainOfValidityCRS = 
ReferencingUtilities.toNormalizedGeographicCRS(operation.getSourceCRS());
+            if (domainOfValidityCRS != null) try {
+                toDomainOfValidityCRS = 
CRS.findOperation(operation.getSourceCRS(), domainOfValidityCRS, 
null).getMathTransform();
+                domainOfValidity = new ImmutableEnvelope(bbox);
+            } catch (FactoryException e) {
+                warning(e);
+            }
+        }
+    }
+
+    /**
+     * Transforms the coordinates read from the given stream.
+     * This method ignores empty and comment lines.
+     *
+     * @param  in        the stream from where to read coordinates.
+     * @param  filename  the filename, for error reporting only.
+     * @return the errors that occurred during transformation.
+     */
+    private void transform(final LineNumberReader in, final String filename) 
throws IOException {
+        final int dimension    = 
operation.getSourceCRS().getCoordinateSystem().getDimension();
+        final MathTransform mt = operation.getMathTransform();
+        final double[] result  = new double[mt.getTargetDimensions()];
+        final double[] domainCoordinate;
+        final DirectPositionView positionInDomain;
+        if (toDomainOfValidityCRS != null) {
+            domainCoordinate = new 
double[toDomainOfValidityCRS.getTargetDimensions()];
+            positionInDomain = new DirectPositionView(domainCoordinate, 0, 
domainCoordinate.length);
+        } else {
+            domainCoordinate = null;
+            positionInDomain = null;
+        }
+        try {
+            String line;
+            while ((line = in.readLine()) != null) {
+                final int start = CharSequences.skipLeadingWhitespaces(line, 
0, line.length());
+                if (start < line.length() && line.charAt(start) != '#') {
+                    final double[] coordinates = 
CharSequences.parseDoubles(line, ',');
+                    if (coordinates.length != dimension) {
+                        throw new 
MismatchedDimensionException(Errors.format(Errors.Keys.MismatchedDimensionForCRS_3,
+                                    
operation.getSourceCRS().getName().getCode(), dimension, coordinates.length));
+                    }
+                    /*
+                     * At this point we got the coordinates and they have the 
expected number of dimensions.
+                     * Now perform the coordinate operation and prints each 
ordinate values. We will switch
+                     * to scientific notation if the coordinate is much larger 
than expected.
+                     */
+                    mt.transform(coordinates, 0, result, 0, 1);
+                    for (int i=0; i<result.length; i++) {
+                        if (i != 0) {
+                            out.print(',');
+                        }
+                        final double value = result[i];
+                        final String s;
+                        if (Math.abs(value) >= 
thresholdForScientificNotation[i]) {
+                            s = Double.toString(value);
+                        } else {
+                            
coordinateFormat.setMinimumFractionDigits(numFractionDigits[i]);
+                            
coordinateFormat.setMaximumFractionDigits(numFractionDigits[i]);
+                            s = coordinateFormat.format(value);
+                        }
+                        out.print(CharSequences.spaces(ordinateWidth - 
s.length()));
+                        out.print(s);
+                    }
+                    /*
+                     * Append a warning after the transformed coordinate 
values if the source coordinate was outside
+                     * the domain of validity. A failure to perform a 
coordinate transformation is also considered as
+                     * being out of the domain of valididty.
+                     */
+                    if (domainCoordinate != null) {
+                        boolean inside;
+                        try {
+                            toDomainOfValidityCRS.transform(coordinates, 0, 
domainCoordinate, 0, 1);
+                            inside = 
domainOfValidity.contains(positionInDomain);
+                        } catch (TransformException e) {
+                            inside = false;
+                            warning(e);
+                        }
+                        if (!inside) {
+                            out.print(",    ");
+                            
printQuotedText(Errors.getResources(locale).getString(Errors.Keys.OutsideDomainOfValidity),
 X364.FOREGROUND_RED);
+                        }
+                    }
+                    out.println();
+                }
+            }
+        } catch (NumberFormatException | MismatchedDimensionException | 
TransformException e) {
+            error(Errors.format(Errors.Keys.ErrorInFileAtLine_2, filename, 
in.getLineNumber()), e);
+        }
+    }
+
+    /**
+     * Reports the given exception as an ignorable one. We consider {@link 
FactoryException} or
+     * {@link TransformException} as ignorable exceptions only if they 
occurred while computing
+     * whether a point is inside the domain of validity. Failure to answer 
that question is
+     * considered as an indication that the point is outside the domain of 
validity.
+     */
+    private static void warning(final Exception e) {
+        
Logging.recoverableException(Logging.getLogger("org.apache.sis.console"), 
TransformCommand.class, "run", e);
+    }
 }

Modified: 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/Initializer.java
 [UTF-8] Mon Apr 25 16:51:57 2016
@@ -420,6 +420,8 @@ public abstract class Initializer {
      * @return {@code true} if the exception indicates a successful shutdown.
      */
     static boolean isSuccessfulShutdown(final SQLException e) {
-        return e.getErrorCode() == 45000 && "08006".equals(e.getSQLState());
+        final String state = e.getSQLState();
+        return "08006".equals(state) ||     // Database 'SpatialMetadata' 
shutdown.
+               "XJ004".equals(state);       // Database 'SpatialMetadata' not 
found (may happen if we failed to open it in the first place).
     }
 }

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
 [UTF-8] Mon Apr 25 16:51:57 2016
@@ -579,6 +579,12 @@ public final class Errors extends Indexe
         public static final short MismatchedCRS = 57;
 
         /**
+         * The “{0}” coordinate reference system has {1} 
dimension{1,choice,1#|2#s}, but the given
+         * geometry is {2}-dimensional.
+         */
+        public static final short MismatchedDimensionForCRS_3 = 228;
+
+        /**
          * Mismatched object dimensions: {0}D and {1}D.
          */
         public static final short MismatchedDimension_2 = 58;
@@ -901,6 +907,11 @@ public final class Errors extends Indexe
         public static final short OddArrayLength_1 = 98;
 
         /**
+         * Coordinate is outside the domain of validity.
+         */
+        public static final short OutsideDomainOfValidity = 229;
+
+        /**
          * No parameter named “{1}” has been found in “{0}”.
          */
         public static final short ParameterNotFound_2 = 147;

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
 [ISO-8859-1] Mon Apr 25 16:51:57 2016
@@ -128,6 +128,7 @@ MismatchedArrayLengths            = Mism
 MismatchedCRS                     = The coordinate reference system must be 
the same for all objects.
 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.
+MismatchedDimensionForCRS_3       = The \u201c{0}\u201d coordinate reference 
system has {1} dimension{1,choice,1#|2#s}, but the given geometry is 
{2}-dimensional.
 MismatchedGridGeometry_2          = The grid geometry must be the same for 
\u201c{0}\u201d and \u201c{1}\u201d.
 MismatchedMatrixSize_4            = Mismatched matrix sizes: expected 
{0}\u00d7{1} but got {2}\u00d7{3}.
 MismatchedParameterDescriptor_1   = Mismatched descriptor for \u201c{0}\u201d 
parameter.
@@ -191,6 +192,7 @@ NullMapKey                        = Null
 NullMapValue                      = Null values are not allowed in this 
dictionary.
 NullValueInTable_3                = Unexpected null value in record 
\u201c{2}\u201d for the column \u201c{1}\u201d in table \u201c{0}\u201d.
 OddArrayLength_1                  = Array length is {0}, while we expected an 
even length.
+OutsideDomainOfValidity           = Coordinate is outside the domain of 
validity.
 PropertyAlreadyExists_2           = Property \u201c{1}\u201d already exists in 
\u201c{0}\u201d.
 ParameterNotFound_2               = No parameter named \u201c{1}\u201d has 
been found in \u201c{0}\u201d.
 PropertyNotFound_2                = No property named \u201c{1}\u201d has been 
found in \u201c{0}\u201d.

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
 [ISO-8859-1] Mon Apr 25 16:51:57 2016
@@ -125,6 +125,7 @@ MismatchedArrayLengths            = Les
 MismatchedCRS                     = Le syst\u00e8me de r\u00e9f\u00e9rence des 
coordonn\u00e9es doit \u00eatre le m\u00eame pour tous les objets.
 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}.
+MismatchedDimensionForCRS_3       = Le syst\u00e8me de r\u00e9f\u00e9rence des 
coordonn\u00e9es \u00ab\u202f{0}\u202f\u00bb a {1} dimension{1,choice,1#|2#s}, 
mais la g\u00e9om\u00e9trie donn\u00e9e en a {2}.
 MismatchedGridGeometry_2          = La g\u00e9om\u00e9trie de la grille doit 
\u00eatre la m\u00eame pour \u00ab\u202f{0}\u202f\u00bb et 
\u00ab\u202f{1}\u202f\u00bb.
 MismatchedMatrixSize_4            = Une matrice de taille de {0}\u00d7{1} 
\u00e9tait attendue mais la matrice donn\u00e9e est de taille {2}\u00d7{3}.
 MismatchedParameterDescriptor_1   = Le descripteur du param\u00e8tre 
\u00ab\u202f{0}\u202f\u00bb ne correspond pas.
@@ -187,6 +188,7 @@ NullMapKey                        = La c
 NullMapValue                      = Les valeurs nulles ne sont pas 
autoris\u00e9es dans ce dictionnaire.
 NullValueInTable_3                = Dans la table \u00ab\u202f{0}\u202f\u00bb, 
la colonne \u00ab\u202f{1}\u202f\u00bb de l\u2019enregistrement 
\u00ab\u202f{2}\u202f\u00bb ne devrait pas contenir de valeur nulle.
 OddArrayLength_1                  = La longueur du tableau est {0}, alors 
qu\u2019on attendait une longueur paire.
+OutsideDomainOfValidity           = La coordonn\u00e9e est en dehors du 
domaine de validit\u00e9.
 PropertyAlreadyExists_2           = La propri\u00e9t\u00e9 
\u00ab\u202f{1}\u202f\u00bb existe d\u00e9j\u00e0 dans 
\u00ab\u202f{0}\u202f\u00bb.
 ParameterNotFound_2               = Aucun param\u00e8tre nomm\u00e9 
\u00ab\u202f{1}\u202f\u00bb n\u2019a \u00e9t\u00e9 trouv\u00e9 dans 
\u00ab\u202f{0}\u202f\u00bb.
 PropertyNotFound_2                = Aucune propri\u00e9t\u00e9 nomm\u00e9e 
\u00ab\u202f{1}\u202f\u00bb n\u2019a \u00e9t\u00e9 trouv\u00e9e dans 
\u00ab\u202f{0}\u202f\u00bb.

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
 [UTF-8] Mon Apr 25 16:51:57 2016
@@ -57,6 +57,11 @@ public final class Vocabulary extends In
         }
 
         /**
+         * Accuracy
+         */
+        public static final short Accuracy = 109;
+
+        /**
          * Aliases
          */
         public static final short Aliases = 74;
@@ -207,6 +212,11 @@ public final class Vocabulary extends In
         public static final short Destination = 14;
 
         /**
+         * Details
+         */
+        public static final short Details = 110;
+
+        /**
          * Dimensions
          */
         public static final short Dimensions = 15;
@@ -377,6 +387,11 @@ public final class Vocabulary extends In
         public static final short MeanValue = 34;
 
         /**
+         * Methods
+         */
+        public static final short Methods = 111;
+
+        /**
          * Minimum value
          */
         public static final short MinimumValue = 35;

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
 [ISO-8859-1] Mon Apr 25 16:51:57 2016
@@ -14,6 +14,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+Accuracy                = Accuracy
 Aliases                 = Aliases
 Angle                   = Angle
 AngularDegrees          = Degrees
@@ -44,6 +45,7 @@ DefaultValue            = Default value
 DerivedFrom_1           = Derived from {0}
 Description             = Description
 Destination             = Destination
+Details                 = Details
 Dimensions              = Dimensions
 Directory               = Directory
 DittoMark               = \u2033
@@ -79,6 +81,7 @@ Mandatory               = Mandatory
 MaximumValue            = Maximum value
 MeanValue               = Mean value
 MinimumValue            = Minimum value
+Methods                 = Methods
 ModifiedJulian          = Modified Julian
 Name                    = Name
 None                    = None

Modified: 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties?rev=1740864&r1=1740863&r2=1740864&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
 [ISO-8859-1] (original)
+++ 
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
 [ISO-8859-1] Mon Apr 25 16:51:57 2016
@@ -21,6 +21,7 @@
 #   U+202F NARROW NO-BREAK SPACE  before  ; ! and ?
 #   U+00A0 NO-BREAK SPACE         before  :
 #
+Accuracy                = Pr\u00e9cision
 Aliases                 = Alias
 Angle                   = Angle
 AngularDegrees          = Degr\u00e9s
@@ -51,6 +52,7 @@ DefaultValue            = Valeur par d\u
 DerivedFrom_1           = D\u00e9riv\u00e9 de {0}
 Description             = Description
 Destination             = Destination
+Details                 = D\u00e9tails
 Dimensions              = Dimensions
 Directory               = R\u00e9pertoire
 DittoMark               = \u2033
@@ -86,6 +88,7 @@ Mandatory               = Requis
 MaximumValue            = Valeur maximale
 MeanValue               = Valeur moyenne
 MinimumValue            = Valeur minimale
+Methods                 = M\u00e9thodes
 ModifiedJulian          = Julien modifi\u00e9
 Name                    = Nom
 None                    = Aucun


Reply via email to