sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1776531 [2/4] - in /sis/branches/JDK8: application/sis-console/src/main/java/org/apache/sis/console/ core/sis-feature/src/main/java/org/apache/sis/feature/ core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ core/sis-metadata...
Date Fri, 30 Dec 2016 09:23:26 GMT
Modified: sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -296,7 +296,7 @@ public class DefaultMathTransformFactory
      *   </li>
      * </ul>
      *
-     * @param methods The operation methods to use, stored by reference (not copied).
+     * @param  methods  the operation methods to use, stored by reference (not copied).
      */
     public DefaultMathTransformFactory(final Iterable<? extends OperationMethod> methods) {
         ArgumentChecks.ensureNonNull("methods", methods);
@@ -329,7 +329,7 @@ public class DefaultMathTransformFactory
      * @param  type <code>{@linkplain SingleOperation}.class</code> for fetching all operation methods,
      *         <code>{@linkplain org.opengis.referencing.operation.Projection}.class</code> for fetching
      *         only map projection methods, <i>etc</i>.
-     * @return Methods available in this factory for coordinate operations of the given type.
+     * @return methods available in this factory for coordinate operations of the given type.
      *
      * @see #getDefaultParameters(String)
      * @see #createParameterizedTransform(ParameterValueGroup, Context)
@@ -374,8 +374,8 @@ public class DefaultMathTransformFactory
      * non-{@linkplain org.apache.sis.util.Deprecable#isDeprecated() deprecated} matching method is returned.
      * If all matching methods are deprecated, the first one is returned.</p>
      *
-     * @param  identifier The name or identifier of the operation method to search.
-     * @return The coordinate operation method for the given name or identifier.
+     * @param  identifier  the name or identifier of the operation method to search.
+     * @return the coordinate operation method for the given name or identifier.
      * @throws NoSuchIdentifierException if there is no operation method registered for the specified identifier.
      *
      * @see org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory#getOperationMethod(String)
@@ -414,8 +414,8 @@ public class DefaultMathTransformFactory
      * Parameters are intended to be modified by the user before to be given to the
      * {@link #createParameterizedTransform createParameterizedTransform(…)} method.</p>
      *
-     * @param  method The case insensitive name of the coordinate operation method to search for.
-     * @return A new group of parameter values for the {@code OperationMethod} identified by the given name.
+     * @param  method  the case insensitive name of the coordinate operation method to search for.
+     * @return a new group of parameter values for the {@code OperationMethod} identified by the given name.
      * @throws NoSuchIdentifierException if there is no method registered for the given name or identifier.
      *
      * @see #getAvailableMethods(Class)
@@ -431,9 +431,9 @@ public class DefaultMathTransformFactory
      * Creates a transform from a group of parameters.
      * The set of expected parameters varies for each operation.
      *
-     * @param  parameters The parameter values. The {@linkplain ParameterDescriptorGroup#getName() parameter group name}
+     * @param  parameters  the parameter values. The {@linkplain ParameterDescriptorGroup#getName() parameter group name}
      *         shall be the name of the desired {@linkplain DefaultOperationMethod operation method}.
-     * @return The transform created from the given parameters.
+     * @return the transform created from the given parameters.
      * @throws NoSuchIdentifierException if there is no method for the given parameter group name.
      * @throws FactoryException if the object creation failed. This exception is thrown
      *         if some required parameter has not been supplied, or has illegal value.
@@ -514,7 +514,7 @@ public class DefaultMathTransformFactory
          * Sets the source coordinate system to the given value.
          * The source ellipsoid is unconditionally set to {@code null}.
          *
-         * @param cs The coordinate system to set as the source (can be {@code null}).
+         * @param  cs  the coordinate system to set as the source (can be {@code null}).
          */
         public void setSource(final CoordinateSystem cs) {
             sourceCS = cs;
@@ -533,8 +533,8 @@ public class DefaultMathTransformFactory
          * of prime meridian), see {@link org.apache.sis.referencing.operation.DefaultCoordinateOperationFactory}.
          * This policy helps to enforce a separation of concerns.</div>
          *
-         * @param cs The coordinate system to set as the source, or {@code null}.
-         * @param ellipsoid The ellipsoid associated to the given coordinate system, or {@code null}.
+         * @param  cs        the coordinate system to set as the source, or {@code null}.
+         * @param ellipsoid  the ellipsoid associated to the given coordinate system, or {@code null}.
          */
         public void setSource(final EllipsoidalCS cs, final Ellipsoid ellipsoid) {
             sourceCS = cs;
@@ -545,7 +545,7 @@ public class DefaultMathTransformFactory
          * Sets the target coordinate system to the given value.
          * The target ellipsoid is unconditionally set to {@code null}.
          *
-         * @param cs The coordinate system to set as the target (can be {@code null}).
+         * @param  cs  the coordinate system to set as the target (can be {@code null}).
          */
         public void setTarget(final CoordinateSystem cs) {
             targetCS = cs;
@@ -558,8 +558,8 @@ public class DefaultMathTransformFactory
          * <div class="note"><b>Design note:</b>
          * see {@link #setSource(EllipsoidalCS, Ellipsoid)}.</div>
          *
-         * @param cs The coordinate system to set as the source, or {@code null}.
-         * @param ellipsoid The ellipsoid associated to the given coordinate system, or {@code null}.
+         * @param  cs         the coordinate system to set as the source, or {@code null}.
+         * @param  ellipsoid  the ellipsoid associated to the given coordinate system, or {@code null}.
          */
         public void setTarget(final EllipsoidalCS cs, final Ellipsoid ellipsoid) {
             targetCS = cs;
@@ -569,7 +569,7 @@ public class DefaultMathTransformFactory
         /**
          * Returns the source coordinate system, or {@code null} if unspecified.
          *
-         * @return The source coordinate system, or {@code null}.
+         * @return the source coordinate system, or {@code null}.
          */
         public CoordinateSystem getSourceCS() {
             return sourceCS;
@@ -588,7 +588,7 @@ public class DefaultMathTransformFactory
         /**
          * Returns the target coordinate system, or {@code null} if unspecified.
          *
-         * @return The target coordinate system, or {@code null}.
+         * @return the target coordinate system, or {@code null}.
          */
         public CoordinateSystem getTargetCS() {
             return targetCS;
@@ -630,8 +630,8 @@ public class DefaultMathTransformFactory
          * This method is invoked by {@link DefaultMathTransformFactory#swapAndScaleAxes(MathTransform, Context)}.
          * Users an override this method if they need to customize the normalization process.
          *
-         * @param  role Whether the normalization or denormalization matrix is desired.
-         * @return The requested matrix, or {@code null} if this {@code Context} has no information about the coordinate system.
+         * @param  role  whether the normalization or denormalization matrix is desired.
+         * @return the requested matrix, or {@code null} if this {@code Context} has no information about the coordinate system.
          * @throws FactoryException if an error occurred while computing the matrix.
          *
          * @see DefaultMathTransformFactory#createAffineTransform(Matrix)
@@ -668,7 +668,7 @@ public class DefaultMathTransformFactory
          * Returns the parameter values used for the math transform creation, including the parameters completed
          * by the factory.
          *
-         * @return The parameter values used by the factory.
+         * @return the parameter values used by the factory.
          * @throws IllegalStateException if {@link DefaultMathTransformFactory#createParameterizedTransform(ParameterValueGroup, Context)}
          *         has not yet been invoked.
          */
@@ -689,9 +689,9 @@ public class DefaultMathTransformFactory
          * parameter value validity. This may result in an {@link InvalidParameterNameException}
          * or {@link InvalidParameterValueException} to be thrown.</p>
          *
-         * @param writable {@code true} if this method should also check that the parameters group is not
-         *        an instance of {@link UnmodifiableParameterValueGroup}. Current implementation assumes
-         *        that modifiable parameters are instances of {@link DefaultParameterValueGroup}.
+         * @param  writable  {@code true} if this method should also check that the parameters group is not
+         *         an instance of {@link UnmodifiableParameterValueGroup}. Current implementation assumes
+         *         that modifiable parameters are instances of {@link DefaultParameterValueGroup}.
          * @throws IllegalArgumentException if the copy can not be performed because a parameter has
          *         a unrecognized name or an illegal value.
          */
@@ -726,11 +726,11 @@ public class DefaultMathTransformFactory
          *       but its value is compared to the given one for consistency.</li>
          * </ul>
          *
-         * @param parameter The parameter which must have a value.
-         * @param actual    The current parameter value, or {@code NaN} if none.
-         * @param expected  The expected parameter value, derived from the ellipsoid.
-         * @param unit      The unit of {@code value}.
-         * @param tolerance Maximal difference (in unit of {@code unit}) for considering the two values as equivalent.
+         * @param  parameter  the parameter which must have a value.
+         * @param  actual     the current parameter value, or {@code NaN} if none.
+         * @param  expected   the expected parameter value, derived from the ellipsoid.
+         * @param  unit       the unit of {@code value}.
+         * @param  tolerance  maximal difference (in unit of {@code unit}) for considering the two values as equivalent.
          * @return {@code true} if there is a mismatch between the actual value and the expected one.
          */
         private static boolean ensureSet(final ParameterValue<?> parameter, final double actual,
@@ -751,11 +751,11 @@ public class DefaultMathTransformFactory
          * if available. This method writes semi-major and semi-minor parameter values only if they do not
          * already exists in the given parameters.
          *
-         * @param  ellipsoid  The ellipsoid from which to get axis lengths of flattening factor, or {@code null}.
+         * @param  ellipsoid  the ellipsoid from which to get axis lengths of flattening factor, or {@code null}.
          * @param  semiMajor  {@code "semi_major}, {@code "src_semi_major} or {@code "tgt_semi_major} parameter name.
          * @param  semiMinor  {@code "semi_minor}, {@code "src_semi_minor} or {@code "tgt_semi_minor} parameter name.
          * @param  inverseFlattening {@code true} if this method can try to set the {@code "inverse_flattening"} parameter.
-         * @return The exception if the operation failed, or {@code null} if none. This exception is not thrown now
+         * @return the exception if the operation failed, or {@code null} if none. This exception is not thrown now
          *         because the caller may succeed in creating the transform anyway, or otherwise may produce a more
          *         informative exception.
          */
@@ -847,8 +847,8 @@ public class DefaultMathTransformFactory
          * <p>The given method and parameters are stored in the {@link #provider} and {@link #parameters}
          * fields respectively. The actual stored values may differ from the values given to this method.</p>
          *
-         * @param  method Description of the transform to be created, or {@code null} if unknown.
-         * @return The exception if the operation failed, or {@code null} if none. This exception is not thrown now
+         * @param  method  description of the transform to be created, or {@code null} if unknown.
+         * @return the exception if the operation failed, or {@code null} if none. This exception is not thrown now
          *         because the caller may succeed in creating the transform anyway, or otherwise may produce a more
          *         informative exception.
          * @throws IllegalArgumentException if the operation fails because a parameter has a unrecognized name or an
@@ -959,11 +959,11 @@ public class DefaultMathTransformFactory
      * <p>The {@code OperationMethod} instance used by this constructor can be obtained by a call to
      * {@link #getLastMethodUsed()}.</p>
      *
-     * @param  parameters The parameter values. The {@linkplain ParameterDescriptorGroup#getName() parameter group name}
-     *         shall be the name of the desired {@linkplain DefaultOperationMethod operation method}.
-     * @param  context Information about the context (for example source and target coordinate systems)
-     *         in which the new transform is going to be used, or {@code null} if none.
-     * @return The transform created from the given parameters.
+     * @param  parameters  the parameter values. The {@linkplain ParameterDescriptorGroup#getName() parameter group name}
+     *                     shall be the name of the desired {@linkplain DefaultOperationMethod operation method}.
+     * @param  context     information about the context (for example source and target coordinate systems)
+     *                     in which the new transform is going to be used, or {@code null} if none.
+     * @return the transform created from the given parameters.
      * @throws NoSuchIdentifierException if there is no method for the given parameter group name.
      * @throws FactoryException if the object creation failed. This exception is thrown
      *         if some required parameter has not been supplied, or has illegal value.
@@ -1076,9 +1076,9 @@ public class DefaultMathTransformFactory
      * Users who need a different normalized space than the default one way find more convenient to
      * override the {@link Context#getMatrix Context.getMatrix(ContextualParameters.MatrixRole)} method.
      *
-     * @param  parameterized A transform for normalized input and output coordinates.
-     * @param  context Source and target coordinate systems in which the transform is going to be used.
-     * @return A transform taking in account unit conversions and axis swapping.
+     * @param  parameterized  a transform for normalized input and output coordinates.
+     * @param  context        source and target coordinate systems in which the transform is going to be used.
+     * @return a transform taking in account unit conversions and axis swapping.
      * @throws FactoryException if the object creation failed.
      *
      * @see org.apache.sis.referencing.cs.AxesConvention#NORMALIZED
@@ -1156,10 +1156,10 @@ public class DefaultMathTransformFactory
      * allowing the caller to get back the complete parameter values.
      * However this method only fills missing values, it never modify existing values.
      *
-     * @param  baseCRS    The source coordinate reference system.
-     * @param  parameters The parameter values for the transform.
-     * @param  derivedCS  The target coordinate system.
-     * @return The parameterized transform from {@code baseCRS} to {@code derivedCS},
+     * @param  baseCRS     the source coordinate reference system.
+     * @param  parameters  the parameter values for the transform.
+     * @param  derivedCS   the target coordinate system.
+     * @return the parameterized transform from {@code baseCRS} to {@code derivedCS},
      *         including unit conversions and axis swapping.
      * @throws NoSuchIdentifierException if there is no transform registered for the coordinate operation method.
      * @throws FactoryException if the object creation failed. This exception is thrown
@@ -1184,8 +1184,8 @@ public class DefaultMathTransformFactory
     /**
      * Creates a math transform that represent a change of coordinate system.
      *
-     * @param source the source coordinate system.
-     * @param target the target coordinate system.
+     * @param  source  the source coordinate system.
+     * @param  target  the target coordinate system.
      * @return a conversion from the given source to the given target coordinate system.
      * @throws FactoryException if the conversion can not be created.
      *
@@ -1208,8 +1208,8 @@ public class DefaultMathTransformFactory
      * {@code [i][N]} element of the matrix will be 0 for <var>i</var> less than {@code M}, and 1
      * for <var>i</var> equals {@code M}.
      *
-     * @param  matrix The matrix used to define the affine transform.
-     * @return The affine transform.
+     * @param  matrix  the matrix used to define the affine transform.
+     * @return the affine transform.
      * @throws FactoryException if the object creation failed.
      *
      * @see MathTransforms#linear(Matrix)
@@ -1231,9 +1231,9 @@ public class DefaultMathTransformFactory
      * <p>The dimension of the output space of the first transform must match the dimension of the input space
      * in the second transform. In order to concatenate more than two transforms, use this constructor repeatedly.</p>
      *
-     * @param  tr1 The first transform to apply to points.
-     * @param  tr2 The second transform to apply to points.
-     * @return The concatenated transform.
+     * @param  tr1  the first transform to apply to points.
+     * @param  tr2  the second transform to apply to points.
+     * @return the concatenated transform.
      * @throws FactoryException if the object creation failed.
      *
      * @see MathTransforms#concatenate(MathTransform, MathTransform)
@@ -1272,11 +1272,11 @@ public class DefaultMathTransformFactory
      *     Target: firstAffectedOrdinate + subTransform.getTargetDimensions() + numTrailingOrdinates
      * }
      *
-     * @param  firstAffectedOrdinate The lowest index of the affected ordinates.
-     * @param  subTransform Transform to use for affected ordinates.
-     * @param  numTrailingOrdinates  Number of trailing ordinates to pass through. Affected ordinates will range
+     * @param  firstAffectedOrdinate  the lowest index of the affected ordinates.
+     * @param  subTransform           transform to use for affected ordinates.
+     * @param  numTrailingOrdinates   number of trailing ordinates to pass through. Affected ordinates will range
      *         from {@code firstAffectedOrdinate} inclusive to {@code dimTarget-numTrailingOrdinates} exclusive.
-     * @return A pass through transform.
+     * @return a pass through transform.
      * @throws FactoryException if the object creation failed.
      */
     @Override
@@ -1298,7 +1298,7 @@ public class DefaultMathTransformFactory
     /**
      * There is no XML format for math transforms.
      *
-     * @param  xml Math transform encoded in XML format.
+     * @param  xml  math transform encoded in XML format.
      * @throws FactoryException if the object creation failed.
      */
     @Override
@@ -1313,8 +1313,8 @@ public class DefaultMathTransformFactory
      * <a href="http://www.geoapi.org/snapshot/javadoc/org/opengis/referencing/doc-files/WKT.html"><cite>Well
      * Known Text</cite> (WKT)</a>.
      *
-     * @param  text Math transform encoded in Well-Known Text format.
-     * @return The math transform (never {@code null}).
+     * @param  text  math transform encoded in Well-Known Text format.
+     * @return the math transform (never {@code null}).
      * @throws FactoryException if the Well-Known Text can not be parsed,
      *         or if the math transform creation failed from some other reason.
      */
@@ -1355,7 +1355,7 @@ public class DefaultMathTransformFactory
             Throwable cause = e.getCause();
             while (cause != null) {
                 if (cause instanceof ParameterNotFoundException) {
-                    throw new InvalidGeodeticParameterException(e.getMessage(), cause);     // More accurate exception.
+                    throw new InvalidGeodeticParameterException(e.getLocalizedMessage(), cause);
                 }
                 cause = cause.getCause();
             }
@@ -1379,7 +1379,7 @@ public class DefaultMathTransformFactory
      * <p>Invoking {@code getLastMethodUsed()} can be useful after a call to
      * {@link #createParameterizedTransform createParameterizedTransform(…)}.</p>
      *
-     * @return The last method used by a {@code create(…)} constructor, or {@code null} if unknown of unsupported.
+     * @return the last method used by a {@code create(…)} constructor, or {@code null} if unknown of unsupported.
      *
      * @see #createParameterizedTransform(ParameterValueGroup, Context)
      */

Modified: sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-referencing/src/test/java/org/apache/sis/referencing/report/CoordinateReferenceSystems.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -689,7 +689,7 @@ public final strictfp class CoordinateRe
             row.remark = "Projected";
             ((ByName) row).setup(CommonCRS.WGS84.datum(), unusedDatumMapping);
         } else {
-            row.remark = exception.getMessage();
+            row.remark = exception.getLocalizedMessage();
             ((ByName) row).setup(null, unusedDatumMapping);
         }
         return row;

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/jaxb/gml/TM_Primitive.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -48,7 +48,7 @@ public final class TM_Primitive extends
     /**
      * Wraps a Temporal Primitive value at marshalling-time.
      *
-     * @param metadata The metadata value to marshal.
+     * @param metadata  the metadata value to marshal.
      */
     private TM_Primitive(final TemporalPrimitive metadata) {
         super(metadata);
@@ -57,8 +57,8 @@ public final class TM_Primitive extends
     /**
      * Returns the Vertical CRS value wrapped by a temporal primitive element.
      *
-     * @param  value The value to marshal.
-     * @return The adapter which wraps the metadata value.
+     * @param  value  the value to marshal.
+     * @return the adapter which wraps the metadata value.
      */
     @Override
     protected TM_Primitive wrap(final TemporalPrimitive value) {
@@ -79,7 +79,7 @@ public final class TM_Primitive extends
      * Returns the {@code TimePeriod} generated from the metadata value.
      * This method is systematically called at marshalling-time by JAXB.
      *
-     * @return The time period, or {@code null}.
+     * @return the time period, or {@code null}.
      */
     @XmlElement(name = "TimePeriod")
     public TimePeriod getTimePeriod() {
@@ -91,7 +91,7 @@ public final class TM_Primitive extends
      * Returns the {@link TimeInstant} generated from the metadata value.
      * This method is systematically called at marshalling-time by JAXB.
      *
-     * @return The time instant, or {@code null}.
+     * @return the time instant, or {@code null}.
      */
     @XmlElement(name = "TimeInstant")
     public TimeInstant getTimeInstant() {
@@ -103,10 +103,10 @@ public final class TM_Primitive extends
      * Sets the value from the {@link TimePeriod}.
      * This method is called at unmarshalling-time by JAXB.
      *
-     * @param period The wrapper to set.
+     * @param  period  the wrapper to set.
      */
     public void setTimePeriod(final TimePeriod period) {
-        metadata = null; // Cleaned first in case of failure.
+        metadata = null;                                        // Cleaned first in case of failure.
         if (period != null) {
             final Context context = Context.current();
             final Date begin = toDate(context, period.begin);
@@ -135,10 +135,10 @@ public final class TM_Primitive extends
      * Sets the value from the {@link TimeInstant}.
      * This method is called at unmarshalling-time by JAXB.
      *
-     * @param instant The wrapper to set.
+     * @param  instant  the wrapper to set.
      */
     public void setTimeInstant(final TimeInstant instant) {
-        metadata = null; // Cleaned first in case of failure.
+        metadata = null;                                        // Cleaned first in case of failure.
         if (instant != null) {
             final Date position = XmlUtilities.toDate(Context.current(), instant.timePosition);
             if (position != null) try {
@@ -160,7 +160,7 @@ public final class TM_Primitive extends
     /**
      * Reports a warning for the given exception.
      *
-     * @param method The name of the method to declare in the log record.
+     * @param method  the name of the method to declare in the log record.
      * @param e the exception.
      */
     private static void warningOccured(final String method, final Exception e) {

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedParseException.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedParseException.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedParseException.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedParseException.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -19,15 +19,16 @@ package org.apache.sis.internal.util;
 import java.util.Locale;
 import java.text.ParsePosition;
 import java.text.ParseException;
+import org.opengis.util.InternationalString;
 import org.apache.sis.util.Workaround;
-import org.apache.sis.util.Localized;
 import org.apache.sis.util.CharSequences;
 import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.LocalizedException;
 
 
 /**
- * A {@link ParseException} in which {@link #getLocalizedMessage()} returns the message in the
- * parser locale. This exception contains the error message in two languages:
+ * A {@link ParseException} in which {@link #getLocalizedMessage()} returns the message in the parser locale.
+ * This exception contains the error message in two languages:
  *
  * <ul>
  *   <li>{@link ParseException#getMessage()} returns the message in the default locale.</li>
@@ -40,21 +41,16 @@ import org.apache.sis.util.resources.Err
  *
  * @author  Martin Desruisseaux (Geomatys)
  * @since   0.3
- * @version 0.7
+ * @version 0.8
  * @module
  */
-public final class LocalizedParseException extends ParseException implements LocalizedException, Localized {
+public final class LocalizedParseException extends ParseException implements LocalizedException {
     /**
      * For cross-version compatibility.
      */
     private static final long serialVersionUID = -1467571540435486742L;
 
     /**
-     * The locale to use for formatting the localized error message, or {@code null} for the default.
-     */
-    private final Locale locale;
-
-    /**
      * The resources key as one of the {@code Errors.Keys} constant.
      */
     private final short key;
@@ -65,8 +61,8 @@ public final class LocalizedParseExcepti
     private final Object[] arguments;
 
     /**
-     * Constructs a {@code ParseException} with a message formatted from the given resource key
-     * and message arguments. This is the most generic constructor.
+     * Constructs a {@code ParseException} with a message formatted from the given resource key and message arguments.
+     * This is the most generic constructor.
      *
      * @param  locale       the locale for {@link #getLocalizedMessage()}, or {@code null} for the default.
      * @param  key          the resource key as one of the {@code Errors.Keys} constant.
@@ -74,16 +70,15 @@ public final class LocalizedParseExcepti
      * @param  errorOffset  the position where the error is found while parsing.
      */
     public LocalizedParseException(final Locale locale, final short key, final Object[] arguments, final int errorOffset) {
-        super(Errors.format(key, arguments), errorOffset);
-        this.locale    = locale;
+        super(Errors.getResources(locale).getString(key, arguments), errorOffset);
         this.arguments = arguments;
         this.key       = key;
     }
 
     /**
-     * Constructs a {@code ParseException} with a message formatted from the given resource key
-     * and unparsable string. This convenience constructor fetches the word starting at the error
-     * index, and uses that word as the single argument associated to the resource key.
+     * Constructs a {@code ParseException} with a message formatted from the given resource key and unparsable string.
+     * This convenience constructor fetches the word starting at the error index,
+     * and uses that word as the single argument associated to the resource key.
      *
      * @param  locale       the locale for {@link #getLocalizedMessage()}, or {@code null} for the default.
      * @param  key          the resource key as one of the {@code Errors.Keys} constant.
@@ -95,9 +90,9 @@ public final class LocalizedParseExcepti
     }
 
     /**
-     * Creates a {@link ParseException} with a localized message built from the given parsing
-     * information. This convenience constructor creates a message of the kind <cite>"Can not
-     * parse string "text" as an object of type 'type'"</cite>.
+     * Creates a {@link ParseException} with a localized message built from the given parsing information.
+     * This convenience constructor creates a message of the kind <cite>"Can not parse string "text" as an
+     * object of type 'type'"</cite>.
      *
      * @param  locale  the locale for {@link #getLocalizedMessage()}, or {@code null} for the default.
      * @param  type    the type of objects parsed by the {@link java.text.Format}.
@@ -170,26 +165,32 @@ public final class LocalizedParseExcepti
     }
 
     /**
-     * {@inheritDoc}
+     * Returns the exception message in the default locale, typically for system administrator.
+     *
+     * @return the message of this exception.
      */
     @Override
-    public Locale getLocale() {
-        return (locale != null) ? locale : Locale.getDefault();
+    public String getMessage() {
+        return Errors.format(key, arguments);
     }
 
     /**
-     * {@inheritDoc}
+     * Returns a localized version of the exception message, typically for final user.
+     *
+     * @return the localized message of this exception.
      */
     @Override
     public String getLocalizedMessage() {
-        return Errors.getResources(locale).getString(key, arguments);
+        return super.getMessage();
     }
 
     /**
-     * {@inheritDoc}
+     * Return the message in various locales.
+     *
+     * @return the exception message.
      */
     @Override
-    public String getLocalizedMessage(final Locale locale) {
-        return Errors.getResources(locale).getString(key, arguments);
+    public InternationalString getInternationalMessage() {
+        return Errors.formatInternational(key, arguments);
     }
 }

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/measure/Angle.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/measure/Angle.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/measure/Angle.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/measure/Angle.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -88,7 +88,7 @@ public class Angle implements Comparable
     /**
      * Constructs a new angle with the specified value in decimal degrees.
      *
-     * @param θ Angle in decimal degrees.
+     * @param  θ  angle in decimal degrees.
      */
     public Angle(final double θ) {
         this.θ = θ;
@@ -103,16 +103,16 @@ public class Angle implements Comparable
      * locale. Developers should consider using {@link AngleFormat} for end-user applications
      * instead than this constructor.</p>
      *
-     * @param  string A string to be converted to an {@code Angle}.
+     * @param  text  a string to be converted to an {@code Angle}.
      * @throws NumberFormatException if the string does not contain a parsable angle.
      *
      * @see AngleFormat#parse(String)
      */
-    public Angle(final String string) throws NumberFormatException {
+    public Angle(final String text) throws NumberFormatException {
         final Object angle;
         try {
             synchronized (Angle.class) {
-                angle = getAngleFormat().parseObject(string);
+                angle = getAngleFormat().parseObject(text);
             }
         } catch (ParseException exception) {
             /*
@@ -129,14 +129,14 @@ public class Angle implements Comparable
         if (type == Angle.class || getClass().isAssignableFrom(type)) {
             this.θ = ((Angle) angle).θ;
         } else {
-            throw new NumberFormatException(string);
+            throw new NumberFormatException(text);
         }
     }
 
     /**
      * Returns the angle value in decimal degrees.
      *
-     * @return The angle value in decimal degrees.
+     * @return the angle value in decimal degrees.
      */
     public double degrees() {
         return θ;
@@ -145,7 +145,7 @@ public class Angle implements Comparable
     /**
      * Returns the angle value in radians.
      *
-     * @return The angle value in radians.
+     * @return the angle value in radians.
      */
     public double radians() {
         return Math.toRadians(θ);
@@ -163,7 +163,7 @@ public class Angle implements Comparable
     /**
      * Compares the specified object with this angle for equality.
      *
-     * @param object The object to compare with this angle for equality.
+     * @param  object  the object to compare with this angle for equality.
      * @return {@code true} if the given object is equal to this angle.
      */
     @Override
@@ -181,7 +181,7 @@ public class Angle implements Comparable
      * Compares two {@code Angle} objects numerically. The comparison
      * is done as if by the {@link Double#compare(double, double)} method.
      *
-     * @param that The angle to compare with this object for order.
+     * @param  that  the angle to compare with this object for order.
      * @return -1 if this angle is smaller than the given one, +1 if greater or 0 if equals.
      */
     @Override
@@ -217,11 +217,11 @@ public class Angle implements Comparable
     public String toString() {
         StringBuffer buffer = new StringBuffer();
         double m = Math.abs(θ);
-        final boolean isSmall = m <= (1 / 3600E+3); // 1E-3 arc-second.
+        final boolean isSmall = m <= (1 / 3600E+3);                     // 1E-3 arc-second.
         if (isSmall || m > maximum()) {
             final char h = hemisphere(isNegative(θ));
             if (h == 0) {
-                m = θ;  // Restore the sign.
+                m = θ;                                                  // Restore the sign.
             }
             char symbol = '°';
             if (isSmall) {
@@ -273,10 +273,10 @@ public class Angle implements Comparable
      *   <li>Otherwise the precision, if positive, is given to {@link AngleFormat#setMaximumWidth(int)}.</li>
      * </ul>
      *
-     * @param formatter The formatter in which to format this angle.
-     * @param flags     {@link FormattableFlags#LEFT_JUSTIFY} for left alignment, or 0 for right alignment.
-     * @param width     Minimal number of characters to write, padding with {@code ' '} if necessary.
-     * @param precision Maximal number of characters to write, or -1 if no limit.
+     * @param  formatter  the formatter in which to format this angle.
+     * @param  flags      {@link FormattableFlags#LEFT_JUSTIFY} for left alignment, or 0 for right alignment.
+     * @param  width      minimal number of characters to write, padding with {@code ' '} if necessary.
+     * @param  precision  maximal number of characters to write, or -1 if no limit.
      */
     @Override
     public void formatTo(final Formatter formatter, final int flags, final int width, final int precision) {
@@ -285,7 +285,7 @@ public class Angle implements Comparable
             value = "";
         } else {
             final char h;
-            int w = precision; // To be decremented only if we may truncate and an hemisphere symbol exist.
+            int w = precision;      // To be decremented only if we may truncate and an hemisphere symbol exist.
             if (w > 0 && (h = hemisphere(isNegative(θ))) != 0 && --w == 0) {
                 value = Character.toString(h);
             } else {

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/About.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/About.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/About.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/About.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -164,7 +164,7 @@ public enum About {
      *     return configuration(EnumSet.allOf(About.class), null, null);
      * }
      *
-     * @return Configuration information, as a tree for grouping some configuration by sections.
+     * @return configuration information, as a tree for grouping some configuration by sections.
      */
     public static TreeTable configuration() {
         return configuration(EnumSet.allOf(About.class), null, null);
@@ -173,10 +173,10 @@ public enum About {
     /**
      * Returns a subset of the information about the current Apache SIS running environment.
      *
-     * @param  sections The section for which information are desired.
-     * @param  locale   The locale to use for formatting the texts in the tree, or {@code null} for the default.
-     * @param  timezone The timezone to use for formatting the dates, or {@code null} for the default.
-     * @return Configuration information, as a tree for grouping some configuration by sections.
+     * @param  sections  the section for which information are desired.
+     * @param  locale    the locale to use for formatting the texts in the tree, or {@code null} for the default.
+     * @param  timezone  the timezone to use for formatting the dates, or {@code null} for the default.
+     * @return configuration information, as a tree for grouping some configuration by sections.
      */
     public static TreeTable configuration(final Set<About> sections, Locale locale, final TimeZone timezone) {
         ArgumentChecks.ensureNonNull("sections", sections);
@@ -499,9 +499,9 @@ pathTree:   for (int j=0; ; j++) {
      * Returns a map of all JAR files or class directories found in the given paths,
      * associated to a description obtained from their {@code META-INF/MANIFEST.MF}.
      *
-     * @param  paths         The paths using the {@link File#pathSeparatorChar} separator.
-     * @param  asDirectories {@code true} if the paths are directories, or {@code false} for JAR files.
-     * @return The paths, or {@code null} if none.
+     * @param  paths          the paths using the {@link File#pathSeparatorChar} separator.
+     * @param  asDirectories  {@code true} if the paths are directories, or {@code false} for JAR files.
+     * @return the paths, or {@code null} if none.
      */
     private static Map<File,CharSequence> classpath(final String paths, final boolean asDirectories) {
         final Map<File,CharSequence> files = new LinkedHashMap<>();
@@ -520,10 +520,10 @@ pathTree:   for (int j=0; ; j++) {
      *       a {@code MANIFEST.MF} attribute using space as the path separator.</li>
      * </ul>
      *
-     * @param  paths         The paths using the separator described above.
-     * @param  directory     The directory of {@code MANIFEST.MF} classpath, or {@code null}.
-     * @param  asDirectories {@code true} if the paths are directories, or {@code false} for JAR files.
-     * @param  files         Where to add the paths.
+     * @param  paths          the paths using the separator described above.
+     * @param  directory      the directory of {@code MANIFEST.MF} classpath, or {@code null}.
+     * @param  asDirectories  {@code true} if the paths are directories, or {@code false} for JAR files.
+     * @param  files          where to add the paths.
      * @return {@code true} if the given map has been changed as a result of this method call.
      */
     private static boolean classpath(final String paths, final File directory,
@@ -650,9 +650,9 @@ pathTree:   for (int j=0; ; j++) {
      * In particular, note that this implementation assumes that children collections are {@link List} (this is
      * guaranteed for {@link DefaultTreeTable.Node} implementations).</p>
      *
-     * @param  node The root of the node to simplify.
-     * @param  skip {@code true} for disabling concatenation of root node.
-     * @return The root of the simplified tree. May be the given {@code node} or a child.
+     * @param  node  the root of the node to simplify.
+     * @param  skip  {@code true} for disabling concatenation of root node.
+     * @return the root of the simplified tree. May be the given {@code node} or a child.
      */
     private static TreeTable.Node concatenateSingletons(final TreeTable.Node node, final boolean skip) {
         // DefaultTreeTable.Node instances are known to handle their children in a List.
@@ -679,10 +679,10 @@ pathTree:   for (int j=0; ; j++) {
      * Concatenates the given strings in the format "main (complement)".
      * Any of the given strings can be null.
      *
-     * @param  main        The main string to show first, or {@code null}.
-     * @param  complement  The string to show after the main one, or {@code null}.
-     * @param  parenthesis {@code true} for writing the complement between parenthesis, or {@code null}.
-     * @return The concatenated string, or {@code null} if all components are null.
+     * @param  main         the main string to show first, or {@code null}.
+     * @param  complement   the string to show after the main one, or {@code null}.
+     * @param  parenthesis  {@code true} for writing the complement between parenthesis, or {@code null}.
+     * @return the concatenated string, or {@code null} if all components are null.
      */
     private static CharSequence concatenate(final CharSequence main, final CharSequence complement, final boolean parenthesis) {
         if (main != null && main.length() != 0) {
@@ -725,10 +725,10 @@ pathTree:   for (int j=0; ; j++) {
      * Formats the given value preceded by a plus or minus sign.
      * This method is used for formatting timezone offset.
      *
-     * @param df     The {@link DateFormat} to use for formatting the offset.
-     * @param offset The offset to format, as a positive or negative value.
-     * @param buffer The buffer where to format the offset.
-     * @return       The given buffer, returned for convenience.
+     * @param  df      the {@link DateFormat} to use for formatting the offset.
+     * @param  offset  the offset to format, as a positive or negative value.
+     * @param  buffer  the buffer where to format the offset.
+     * @return the given buffer, returned for convenience.
      */
     private static StringBuffer format(final Format df, final int offset, final StringBuffer buffer) {
         return df.format(Math.abs(offset), buffer.append(offset < 0 ? '-' : '+').append(' '), new FieldPosition(0));
@@ -747,9 +747,9 @@ pathTree:   for (int j=0; ; j++) {
      * Returns the given file relative to the given root, or {@code null} if the root is not
      * a parent of that file.
      *
-     * @param  root The root directory (typically Java home or user home directory).
-     * @param  file The file to make relative to the root.
-     * @return The file relative to the given root, or {@code null} if none.
+     * @param  root  the root directory (typically Java home or user home directory).
+     * @param  file  the file to make relative to the root.
+     * @return the file relative to the given root, or {@code null} if none.
      */
     private static File relativize(final File root, final File file) {
         File parent = file.getParentFile();

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -20,10 +20,8 @@ import java.util.List;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.sql.SQLException;
-import org.apache.sis.internal.util.LocalizedException;
-
+import org.opengis.util.InternationalString;
 import org.apache.sis.util.resources.Vocabulary;
-import static org.apache.sis.util.CharSequences.trimWhitespaces;
 
 
 /**
@@ -31,7 +29,7 @@ import static org.apache.sis.util.CharSe
  *
  * @author  Martin Desruisseaux (IRD, Geomatys)
  * @since   0.3
- * @version 0.7
+ * @version 0.8
  * @module
  */
 public final class Exceptions extends Static {
@@ -44,21 +42,43 @@ public final class Exceptions extends St
     /**
      * Returns the message of the given exception, localized in the given locale if possible.
      * Some exceptions created by SIS can format a message in different locales. This method
-     * will return such localized message if possible, or fallback on the standard
-     * {@link Throwable#getLocalizedMessage()} method otherwise. Note that by default,
-     * {@code getLocalizedMessage()} itself fallback on {@link Throwable#getMessage()}.
-     *
-     * @param  exception The exception from which to get the localize message, or {@code null}.
-     * @param  locale    The locale for the message, or {@code null} for the default locale.
-     * @return The message in the given locale if possible, or {@code null} if the {@code exception}
-     *         argument was {@code null} or the exception does not contain a message.
+     * returns such localized message if possible, or fallback on the standard JDK methods otherwise.
+     * More specifically:
+     *
+     * <ul>
+     *   <li>If the given {@code exception} is null, then this method returns {@code null}.</li>
+     *   <li>Otherwise if the given {@code locale} is null, then this method returns {@link Exception#getMessage()}.
+     *       This is consistent with the {@link Localized} policy saying that null locale stands for "unlocalized"
+     *       message (usually in English) or message in the JVM {@linkplain Locale#getDefault() default locale}.</li>
+     *   <li>Otherwise if the given {@code exception} is an instance of {@link LocalizedException} providing
+     *       a non-null {@linkplain LocalizedException#getInternationalMessage() international message},
+     *       then this method returns the result of {@link InternationalString#toString(Locale)}.</li>
+     *   <li>Otherwise this method returns {@link Exception#getLocalizedMessage()}.</li>
+     * </ul>
+     *
+     * @param  exception  the exception from which to get the localize message, or {@code null}.
+     * @param  locale     the preferred locale for the message, or {@code null} for the JVM default locale.
+     *                    This locale is honored on a <cite>best-effort</cite> basis only.
+     * @return the message in the given locale if possible, or {@code null} if the {@code exception}
+     *         argument was {@code null} or if the exception does not contain a message.
+     *
+     * @see LocalizedException#getLocalizedMessage()
      */
     public static String getLocalizedMessage(final Throwable exception, final Locale locale) {
         if (exception == null) {
             return null;
         }
-        if (locale != null && exception instanceof LocalizedException) {
-            return ((LocalizedException) exception).getLocalizedMessage(locale);
+        if (locale == null) {
+            return exception.getMessage();      // See the policy documented in LocalizedException.getMessage()
+        }
+        if (exception instanceof LocalizedException) {
+            final InternationalString i18n = ((LocalizedException) exception).getInternationalMessage();
+            if (i18n != null) {
+                final String message = i18n.toString(locale);
+                if (message != null) {
+                    return message;
+                }
+            }
         }
         return exception.getLocalizedMessage();
     }
@@ -75,20 +95,20 @@ public final class Exceptions extends St
      * exception class does not provide such constructor, then the given exception is returned
      * unchanged.</p>
      *
-     * @param <T>       The type of the exception.
-     * @param exception The exception to copy with a different message.
-     * @param message   The message to set in the exception to be returned.
-     * @param append    If {@code true}, the existing message in the original exception (if any)
-     *                  will be happened after the provided message.
-     * @return A new exception with the given message, or the given exception if the exception
+     * @param <T>        the type of the exception.
+     * @param exception  the exception to copy with a different message.
+     * @param message    the message to set in the exception to be returned.
+     * @param append     if {@code true}, the existing message in the original exception (if any)
+     *                   will be happened after the provided message.
+     * @return a new exception with the given message, or the given exception if the exception
      *         class does not provide public {@code Exception(String)} constructor.
      */
     @SuppressWarnings("unchecked")
     public static <T extends Throwable> T setMessage(final T exception, String message, final boolean append) {
         if (append) {
-            final String em = trimWhitespaces(exception.getLocalizedMessage());
+            final String em = CharSequences.trimWhitespaces(exception.getLocalizedMessage());
             if (em != null && !em.isEmpty()) {
-                final StringBuilder buffer = new StringBuilder(trimWhitespaces(message));
+                final StringBuilder buffer = new StringBuilder(CharSequences.trimWhitespaces(message));
                 final int length = buffer.length();
                 if (length != 0 && Character.isLetterOrDigit(buffer.charAt(length-1))) {
                     buffer.append(". ");
@@ -108,7 +128,7 @@ public final class Exceptions extends St
 
     /**
      * Returns a string which contain the given message on the first line, followed by the
-     * {@linkplain Throwable#getLocalizedMessage() localized message} of the given exception
+     * {@linkplain #getLocalizedMessage(Throwable, Locale) localized message} of the given exception
      * on the next line. If the exception has a {@linkplain Throwable#getCause() causes}, then
      * the class name and the localized message of the cause are formatted on the next line
      * and the process is repeated for the whole cause chain, omitting duplicated messages.
@@ -118,36 +138,38 @@ public final class Exceptions extends St
      *
      * <p>This method does not format the stack trace.</p>
      *
-     * @param  locale The preferred locale for the exception message, or {@code null}.
-     * @param  header The message to insert on the first line, or {@code null} if none.
-     * @param  cause  The exception, or {@code null} if none.
-     * @return The formatted message, or {@code null} if both the header was {@code null}
+     * @param  locale  the preferred locale for the exception message, or {@code null}.
+     * @param  header  the message to insert on the first line, or {@code null} if none.
+     * @param  cause   the exception, or {@code null} if none.
+     * @return the formatted message, or {@code null} if both the header was {@code null}
      *         and no exception provide a message.
      */
-    public static String formatChainedMessages(final Locale locale, String header, Throwable cause) {
+    public static String formatChainedMessages(final Locale locale, final String header, Throwable cause) {
         final List<String> previousLines = new ArrayList<>();
-        final String lineSeparator = System.lineSeparator();
         StringBuilder buffer = null;
         Vocabulary resources = null;
         while (cause != null) {
-            final String message = trimWhitespaces(getLocalizedMessage(cause, locale));
+            final String message = CharSequences.trimWhitespaces(getLocalizedMessage(cause, locale));
             if (message != null && !message.isEmpty()) {
                 if (buffer == null) {
                     buffer = new StringBuilder(128);
-                    header = trimWhitespaces(header);
-                    if (header != null && !header.isEmpty()) {
-                        buffer.append(header);
+                    if (header != null) {
+                        final int length = CharSequences.skipTrailingWhitespaces(header, 0, header.length());
+                        if (length > 0) {
+                            buffer.append(header, 0, length);
+                        }
                         previousLines.add(header);
                     }
                 }
                 if (!contains(previousLines, message)) {
                     previousLines.add(message);
                     if (buffer.length() != 0) {
-                        buffer.append(lineSeparator);
                         if (resources == null) {
                             resources = Vocabulary.getResources(locale);
                         }
-                        buffer.append(resources.getString(Vocabulary.Keys.CausedBy_1, cause.getClass())).append(": ");
+                        buffer.append(System.lineSeparator())
+                              .append(resources.getString(Vocabulary.Keys.CausedBy_1, cause.getClass()))
+                              .append(": ");
                     }
                     buffer.append(message);
                 }
@@ -161,17 +183,14 @@ public final class Exceptions extends St
             }
             cause = cause.getCause();
         }
-        if (buffer != null) {
-            header = buffer.toString();
-        }
-        return header;
+        return (buffer != null) ? buffer.toString() : header;
     }
 
     /**
      * Returns {@code true} if a previous line contains the given exception message.
      */
     private static boolean contains(final List<String> previousLines, final String message) {
-        for (int i=previousLines.size(); --i>=0;) {
+        for (int i = previousLines.size(); --i >= 0;) {
             if (previousLines.get(i).contains(message)) {
                 return true;
             }

Copied: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/LocalizedException.java (from r1776530, sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedException.java)
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/LocalizedException.java?p2=sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/LocalizedException.java&p1=sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedException.java&r1=1776530&r2=1776531&rev=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/internal/util/LocalizedException.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/LocalizedException.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -14,58 +14,69 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sis.internal.util;
+package org.apache.sis.util;
 
 import java.util.Locale;
-import org.apache.sis.util.Localized;
+import org.opengis.util.InternationalString;
 
 
 /**
- * An exception which can produce an error message in the given locale.
- * Exceptions implementing this interface use the following policy:
+ * An exception which can produce an error message in the client locale.
+ * Exceptions implementing this interface apply the following policy:
  *
  * <ul>
- *   <li>{@link Throwable#getMessage()} returns the message in the {@linkplain Locale#getDefault() default locale}.
+ *   <li>{@link #getMessage()} returns the message in the {@linkplain Locale#getDefault() default locale}.
  *       In a client-server architecture, this is often the locale on the server side.</li>
- *   <li>{@link Throwable#getLocalizedMessage()} returns the message in a locale that depends on the context
+ *   <li>{@link #getLocalizedMessage()} returns the message in a locale that depends on the context
  *       in which the exception has been thrown. This is often the locale used by a {@link java.text.Format}
- *       object for example, and can be presumed to be the locale on the client side.</li>
- *   <li>{@link #getLocalizedMessage(Locale)} returns the message in the given locale.
- *       This method is specific to Apache SIS however.</li>
+ *       or {@link org.apache.sis.storage.DataStore} instance,
+ *       and can be presumed to be the locale on the client side.</li>
+ *   <li>{@link #getInternationalMessage()} may return the message in arbitrary locale (optional operation).
+ *       This method is specific to Apache SIS.</li>
  * </ul>
  *
+ * <div class="note"><b>Example:</b>
+ * if an error occurred while a Japanese client connected to an European server, the localized message may be sent
+ * to the client in Japanese language while the same error may be logged on the server side in the French language.
+ * This allows system administrator to analyze the issue without the need to understand client's language.</div>
+ *
+ * The above policy is applied on a <em>best-effort</em> basis only. For example exceptions that
+ * do not implement {@code LocalizedException} may use any locale (not necessarily the default one),
+ * and {@code LocalizedException} used as {@linkplain Exception#Exception(Throwable) wrappers} around
+ * other exception usually lost their localization capability.
+ *
  * @author  Martin Desruisseaux (Geomatys)
- * @since   0.3
- * @version 0.7
+ * @since   0.8
+ * @version 0.8
  * @module
  *
- * @see org.apache.sis.util.Exceptions#getLocalizedMessage(Throwable, Locale)
+ * @see Exceptions#getLocalizedMessage(Throwable, Locale)
+ * @see org.apache.sis.storage.DataStore#setLocale(Locale)
  */
 public interface LocalizedException {
     /**
      * Returns the message in the {@linkplain Locale#getDefault() default locale}.
+     * In a client-server architecture, this is usually the locale on the server side.
+     * This is the recommended language for logging messages to be read by system administrators.
      *
-     * @return the exception message in the default locale.
+     * @return the exception message in the JVM {@linkplain Locale#getDefault() default locale}.
      */
     String getMessage();
 
     /**
      * Returns the message in the locale that depends on the context in which this exception has been thrown.
      * For example it may be the local of a client application connected to a distant server.
+     * This is the recommended language to show in widgets.
      *
-     * <p>If the context locale is known, then this {@code LocalizedException} instance will also implement
-     * the {@link Localized} interface and the context locale can be obtained by a call to
-     * {@link Localized#getLocale()}.</p>
-     *
-     * @return the localized exception message.
+     * @return the exception message in the locale of a service configured for a particular client.
      */
     String getLocalizedMessage();
 
     /**
-     * Returns the message in the given locale.
+     * If this exception is capable to return the message in various locales, returns that message.
+     * Otherwise returns {@code null}.
      *
-     * @param  locale  the locale of the message to produce, or {@code null} for the default locale.
-     * @return the exception message in the given locale.
+     * @return the exception message, or {@code null} if this exception can not produce international message.
      */
-    String getLocalizedMessage(Locale locale);
+    InternationalString getInternationalMessage();
 }

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/collection/TreeTableFormat.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -167,9 +167,9 @@ public class TreeTableFormat extends Tab
     /**
      * Creates a new tree table format.
      *
-     * @param locale   The locale to use for numbers, dates and angles formatting,
-     *                 or {@code null} for the {@linkplain Locale#ROOT root locale}.
-     * @param timezone The timezone, or {@code null} for UTC.
+     * @param locale    the locale to use for numbers, dates and angles formatting,
+     *                  or {@code null} for the {@linkplain Locale#ROOT root locale}.
+     * @param timezone  the timezone, or {@code null} for UTC.
      */
     public TreeTableFormat(final Locale locale, final TimeZone timezone) {
         super(locale, timezone);
@@ -212,7 +212,7 @@ public class TreeTableFormat extends Tab
      *   <li>On formatting, {@linkplain TreeTable#getColumns() all <code>TreeTable</code> columns}.</li>
      * </ul>
      *
-     * @return The table columns to parse and format, or {@code null} for the default.
+     * @return the table columns to parse and format, or {@code null} for the default.
      */
     public TableColumn<?>[] getColumns() {
         return (columnIndices != null) ? DefaultTreeTable.getColumns(columnIndices) : null;
@@ -222,8 +222,8 @@ public class TreeTableFormat extends Tab
      * Sets the table columns to parse and format. A {@code null} value means to use the default
      * list of columns, as defined in the {@link #getColumns()} method.
      *
-     * @param  columns The table columns to parse and format, or {@code null} for the default.
-     * @throws IllegalArgumentException If the given array is empty, contains a null element
+     * @param  columns  the table columns to parse and format, or {@code null} for the default.
+     * @throws IllegalArgumentException if the given array is empty, contains a null element
      *         or a duplicated value.
      */
     public void setColumns(final TableColumn<?>... columns) throws IllegalArgumentException {
@@ -241,7 +241,7 @@ public class TreeTableFormat extends Tab
      * Returns the number of spaces to add on the left margin for each indentation level.
      * The default value is 4.
      *
-     * @return The current indentation.
+     * @return the current indentation.
      */
     public int getIndentation() {
         return indentation;
@@ -252,8 +252,8 @@ public class TreeTableFormat extends Tab
      * If the new indentation is smaller than the {@linkplain #getVerticalLinePosition()
      * vertical line position}, then the later is also set to the given indentation value.
      *
-     * @param  indentation The new indentation.
-     * @throws IllegalArgumentException If the given value is negative.
+     * @param  indentation  the new indentation.
+     * @throws IllegalArgumentException if the given value is negative.
      */
     public void setIndentation(final int indentation) throws IllegalArgumentException {
         ArgumentChecks.ensurePositive("indentation", indentation);
@@ -269,7 +269,7 @@ public class TreeTableFormat extends Tab
      * The default value is 2, which means that the vertical line is drawn below the third
      * letter of the root label.
      *
-     * @return The current vertical line position.
+     * @return the current vertical line position.
      */
     public int getVerticalLinePosition() {
         return verticalLinePosition;
@@ -279,8 +279,8 @@ public class TreeTableFormat extends Tab
      * Sets the position of the vertical line, relative to the position of the root label.
      * The given value can not be greater than the {@linkplain #getIndentation() indentation}.
      *
-     * @param  verticalLinePosition The new vertical line position.
-     * @throws IllegalArgumentException If the given value is negative or greater than the indentation.
+     * @param  verticalLinePosition  the new vertical line position.
+     * @throws IllegalArgumentException if the given value is negative or greater than the indentation.
      */
     public void setVerticalLinePosition(final int verticalLinePosition) throws IllegalArgumentException {
         ArgumentChecks.ensureBetween("verticalLinePosition", 0, indentation, verticalLinePosition);
@@ -300,9 +300,9 @@ public class TreeTableFormat extends Tab
      * The returned array may contain {@code null} elements, which means that the values
      * in that column can be stored as {@code String}s.
      *
-     * @param  mandatoy {@code true} if an exception shall be thrown for unrecognized types,
-     *         or {@code false} for storing a {@code null} value in the array instead.
-     * @throws IllegalStateException If {@code mandatory} is {@code true} and a column
+     * @param  mandatoy  {@code true} if an exception shall be thrown for unrecognized types, or
+     *                   {@code false} for storing a {@code null} value in the array instead.
+     * @throws IllegalStateException if {@code mandatory} is {@code true} and a column
      *         contains values of an unsupported type.
      */
     final Format[] getFormats(final TableColumn<?>[] columns, final boolean mandatory) throws IllegalStateException {
@@ -341,10 +341,10 @@ public class TreeTableFormat extends Tab
      *   <li>Parsing stops at first empty line (ignoring whitespaces), or at the end of the given text.</li>
      * </ul>
      *
-     * @param  text The character sequence for the tree to parse.
-     * @param  pos  The position where to start the parsing.
-     * @return The parsed tree, or {@code null} if the given character sequence can not be parsed.
-     * @throws ParseException If an error occurred while parsing a node value.
+     * @param  text  the character sequence for the tree to parse.
+     * @param  pos   the position where to start the parsing.
+     * @return the parsed tree, or {@code null} if the given character sequence can not be parsed.
+     * @throws ParseException if an error occurred while parsing a node value.
      */
     @Override
     @SuppressWarnings("null")
@@ -365,7 +365,7 @@ public class TreeTableFormat extends Tab
             while (endOfLine > indexOfLineStart) {
                 final int c = text.charAt(endOfLine-1);
                 if (c != '\r' && c != '\n') break;
-                endOfLine--; // Skip trailing '\r' and '\n'.
+                endOfLine--;                                    // Skip trailing '\r' and '\n'.
             }
             /*
              * Skip leading spaces using Character.isSpaceChar(…) instead than isWhitespace(…)
@@ -373,7 +373,7 @@ public class TreeTableFormat extends Tab
              * need to consider line feeds since they were handled by the lines just above.
              */
             boolean hasChar = false;
-            int i; // The indentation of current line.
+            int i;                                              // The indentation of current line.
             for (i=indexOfLineStart; i<endOfLine;) {
                 final int c = Character.codePointAt(text, i);
                 if (!Character.isSpaceChar(c)) {
@@ -385,7 +385,7 @@ public class TreeTableFormat extends Tab
                 i += Character.charCount(c);
             }
             if (!hasChar) {
-                break; // The line contains only whitespaces.
+                break;                                          // The line contains only whitespaces.
             }
             /*
              * Go back to the fist non-space character (should be '─'). We do that in case the
@@ -480,12 +480,12 @@ public class TreeTableFormat extends Tab
      * Parses the given string using a format appropriate for the type of values in
      * the given column, and stores the value in the given node.
      *
-     * @param  V        The type of values in the given column.
-     * @param  node     The node in which to set the value.
-     * @param  column   The column in which to set the value.
-     * @param  format   The format to use for parsing the value, or {@code null}.
-     * @param  text     The textual representation of the value.
-     * @throws ParseException If an error occurred while parsing.
+     * @param  V        the type of values in the given column.
+     * @param  node     the node in which to set the value.
+     * @param  column   the column in which to set the value.
+     * @param  format   the format to use for parsing the value, or {@code null}.
+     * @param  text     the textual representation of the value.
+     * @throws ParseException if an error occurred while parsing.
      */
     private <V> void parseValue(final TreeTable.Node node, final TableColumn<V> column,
             final Format format, final String text) throws ParseException
@@ -607,9 +607,9 @@ public class TreeTableFormat extends Tab
         /**
          * Creates a new instance which will write to the given appendable.
          *
-         * @param out           Where to format the tree.
-         * @param column        The columns of the tree table to format.
-         * @param parentObjects An initially empty {@link IdentityHashMap}.
+         * @param  out            where to format the tree.
+         * @param  column         the columns of the tree table to format.
+         * @param  parentObjects  an initially empty {@link IdentityHashMap}.
          */
         Writer(final Appendable out, final TableColumn<?>[] columns, final Map<Object,Object> parentObjects) {
             super(columns.length >= 2 ? new TableAppender(out, "") : out);
@@ -646,13 +646,13 @@ public class TreeTableFormat extends Tab
         /**
          * Appends a textual representation of the given value.
          *
-         * @param  value     The value to format (may be {@code null}).
-         * @param  recursive {@code true} if this method is invoking itself for writing collection values.
+         * @param  value      the value to format (may be {@code null}).
+         * @param  recursive  {@code true} if this method is invoking itself for writing collection values.
          */
         private void formatValue(final Object value, final boolean recursive) throws IOException {
             final CharSequence text;
             if (value == null) {
-                text = " "; // String for missing value.
+                text = " ";                                             // String for missing value.
             } else if (columnFormat != null) {
                 if (columnFormat instanceof CompoundFormat<?>) {
                     formatValue((CompoundFormat<?>) columnFormat, value);
@@ -741,8 +741,8 @@ public class TreeTableFormat extends Tab
          * Appends the string representation of the given node and all its children.
          * This method invokes itself recursively.
          *
-         * @param node  The node to format.
-         * @param level Indentation level. The first level is 0.
+         * @param  node   the node to format.
+         * @param  level  indentation level. The first level is 0.
          */
         final void format(final TreeTable.Node node, final int level) throws IOException {
             for (int i=0; i<level; i++) {
@@ -812,9 +812,9 @@ public class TreeTableFormat extends Tab
      * representation of the {@linkplain TreeTable.Node#getValue(TableColumn) value in that column}
      * using the formatter obtained by a call to {@link #getFormat(Class)}.
      *
-     * @param  tree        The tree to format.
-     * @param  toAppendTo  Where to format the tree.
-     * @throws IOException If an error occurred while writing to the given appendable.
+     * @param  tree        the tree to format.
+     * @param  toAppendTo  where to format the tree.
+     * @throws IOException if an error occurred while writing to the given appendable.
      *
      * @see TreeTables#toString(TreeTable)
      */

Modified: sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/AbstractInternationalString.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/AbstractInternationalString.java?rev=1776531&r1=1776530&r2=1776531&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/AbstractInternationalString.java [UTF-8] (original)
+++ sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/util/iso/AbstractInternationalString.java [UTF-8] Fri Dec 30 09:23:24 2016
@@ -79,7 +79,7 @@ public abstract class AbstractInternatio
      * Returns the length of the string in the {@linkplain Locale#getDefault() default locale}.
      * This is the length of the string returned by {@link #toString()}.
      *
-     * @return Length of the string in the default locale.
+     * @return length of the string in the default locale.
      */
     @Override
     public int length() {
@@ -90,8 +90,8 @@ public abstract class AbstractInternatio
      * Returns the character of the string in the {@linkplain Locale#getDefault() default locale}
      * at the specified index. This is a character of the string returned by {@link #toString()}.
      *
-     * @param  index The index of the character.
-     * @return The character at the specified index.
+     * @param  index  the index of the character.
+     * @return the character at the specified index.
      * @throws IndexOutOfBoundsException if the specified index is out of bounds.
      */
     @Override
@@ -104,9 +104,9 @@ public abstract class AbstractInternatio
      * The subsequence is a {@link String} object starting with the character value at the specified
      * index and ending with the character value at index {@code end - 1}.
      *
-     * @param   start The start index, inclusive.
-     * @param   end   The end index, exclusive.
-     * @return  The specified subsequence.
+     * @param   start  the start index, inclusive.
+     * @param   end    the end index, exclusive.
+     * @return  the specified subsequence.
      * @throws  IndexOutOfBoundsException if {@code start} or {@code end} is out of range.
      */
     @Override
@@ -134,8 +134,8 @@ public abstract class AbstractInternatio
      * other subclasses will take {@code null} as a synonymous of the root locale. In order to
      * ensure determinist behavior, client code are encouraged to specify only non-null values.
      *
-     * @param  locale The desired locale for the string to be returned.
-     * @return The string in the given locale if available, or in an
+     * @param  locale  the desired locale for the string to be returned.
+     * @return the string in the given locale if available, or in an
      *         implementation-dependent fallback locale otherwise.
      *
      * @see Locale#getDefault()
@@ -151,7 +151,7 @@ public abstract class AbstractInternatio
      * <p>All methods from {@link CharSequence} operate on this string.
      * This string is also used as the criterion for {@linkplain Comparable natural ordering}.</p>
      *
-     * @return The string in the default locale.
+     * @return the string in the default locale.
      */
     @Override
     public synchronized String toString() {
@@ -174,11 +174,11 @@ public abstract class AbstractInternatio
      * {@linkplain #toString(Locale) toString}(formatter.{@linkplain Formatter#locale()})
      * </code></blockquote>
      *
-     * @param formatter The formatter to use for formatting this string.
-     * @param flags     A bitmask of {@link FormattableFlags} values.
-     * @param width     The minimum number of characters, or -1 if none.
-     * @param precision The maximum number of characters (before expanding to the {@code width}),
-     *                  or -1 for no restriction.
+     * @param formatter  the formatter to use for formatting this string.
+     * @param flags      a bitmask of {@link FormattableFlags} values.
+     * @param width      the minimum number of characters, or -1 if none.
+     * @param precision  the maximum number of characters (before expanding to the {@code width}),
+     *                   or -1 for no restriction.
      */
     @Override
     public void formatTo(final Formatter formatter, final int flags, final int width, final int precision) {
@@ -190,9 +190,9 @@ public abstract class AbstractInternatio
      * the string in the {@linkplain Locale#getDefault() default locale}, as returned
      * by {@link #toString()}.
      *
-     * @param  object The string to compare with this string.
-     * @return A negative number if this string is before the given string, a positive
-     *         number if after, or 0 if equals.
+     * @param  object  the string to compare with this string.
+     * @return a negative number if this string is before the given string,
+     *         a positive number if after, or 0 if equals.
      */
     @Override
     public int compareTo(final InternationalString object) {



Mime
View raw message