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