You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2014/02/05 22:32:36 UTC
svn commit: r1564941 - in /sis/branches/JDK7: ./
core/sis-metadata/src/main/java/org/apache/sis/io/wkt/
core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/
core/sis-metadata/src/test/java/org/apache/sis/io/wkt/
core/sis-metadata/src/test/java/...
Author: desruisseaux
Date: Wed Feb 5 21:32:35 2014
New Revision: 1564941
URL: http://svn.apache.org/r1564941
Log:
Moved some Formatter code to the appropriate FormattableObject subclasses,
in order to reduce the size of Formatter.
Modified:
sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/FormattableObject.java
sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/io/wkt/FormatterTest.java
sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java
sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java
sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
sis/branches/JDK7/pom.xml
Modified: sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/FormattableObject.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/FormattableObject.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/FormattableObject.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/FormattableObject.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -28,7 +28,7 @@ import org.apache.sis.internal.util.X364
/**
* Base class for objects that can be formatted as <cite>Well Known Text</cite> (WKT).
- * {@link WKTFormat} checks for this interface at formatting time for each element to format.
+ * {@link WKTFormat} checks for this class at formatting time for each element to format.
* When a {@code FormattableObject} element is found, its {@link #formatTo(Formatter)} method
* is invoked for allowing the element to control its formatting.
*
@@ -38,10 +38,9 @@ import org.apache.sis.internal.util.X364
* <ul>
* <li>{@link #toWKT()} returns a strictly compliant WKT or throws {@link UnformattableObjectException}
* if this object contains elements not defined by the ISO 19162 standard.</li>
- * <li>{@link #toString()} returns a WKT with some rules relaxed in order to never throw exception,
- * using non-standard representation if necessary. In some cases {@code toString()} may also use
- * an alternative text representation for better readability, for example a matrix instead of
- * a list of {@code PARAMETER["elt_…", …]} elements for linear transforms.</li>
+ * <li>{@link #toString()} returns a WKT with some redundant information omitted and some constraints relaxed.
+ * This method never throw {@code UnformattableObjectException};
+ * it will rather use non-standard representation if necessary.</li>
* </ul>
*
* {@section Syntax coloring}
@@ -55,7 +54,7 @@ import org.apache.sis.internal.util.X364
* @module
*/
@XmlTransient
-public class FormattableObject {
+public abstract class FormattableObject {
/**
* The formatter for the {@link #toWKT()} and {@link #toString()} methods. Formatters are not
* thread-safe, consequently we must make sure that only one thread uses a given instance.
@@ -203,22 +202,20 @@ public class FormattableObject {
* (insertion point)
* }
*
- * The default implementation declares that this object produces an invalid WKT.
- * Subclasses shall override this method for proper WKT formatting and shall <strong>not</strong>
- * invoke {@code super.formatTo(formatter)} if they can use a standard WKT syntax.
+ * {@section Declaring the WKT as invalid}
+ * If the implementation can not format a strictly compliant WKT, then it shall declare the WKT
+ * as invalid using <em>one</em> of the following ways:
+ *
+ * <ul>
+ * <li>invoke one of the {@link Formatter#setInvalidWKT(Class) Formatter#setInvalidWKT(…)} methods, or</li>
+ * <li>returns {@code null}.</li>
+ * </ul>
*
* @param formatter The formatter where to format the inner content of this WKT element.
- * @return The WKT element keyword (e.g. {@code "GEOGCS"}).
+ * @return The WKT element keyword (e.g. {@code "GEOGCS"}), or {@code null} if none.
*
* @see #toWKT()
* @see #toString()
*/
- protected String formatTo(final Formatter formatter) {
- formatter.setInvalidWKT(getClass());
- String name = formatter.invalidElement;
- if (name == null) { // May happen if the user override Formatter.setInvalidWKT(Class).
- name = "UNKNOWN";
- }
- return name;
- }
+ protected abstract String formatTo(Formatter formatter);
}
Modified: sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -33,7 +33,6 @@ import javax.measure.quantity.Angle;
import javax.measure.quantity.Length;
import org.opengis.util.InternationalString;
-import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.extent.Extent;
import org.opengis.metadata.extent.GeographicBoundingBox;
@@ -63,6 +62,7 @@ import org.apache.sis.internal.metadata.
import org.apache.sis.internal.metadata.ReferencingUtilities;
import org.apache.sis.measure.Range;
import org.apache.sis.measure.MeasurementRange;
+import org.apache.sis.metadata.iso.ImmutableIdentifier;
import org.apache.sis.metadata.iso.extent.Extents;
@@ -249,7 +249,7 @@ public class Formatter {
* @see #isInvalidWKT()
* @see #getErrorMessage()
*/
- String invalidElement;
+ private String invalidElement;
/**
* Error that occurred during WKT formatting, or {@code null} if none.
@@ -378,12 +378,12 @@ public class Formatter {
* @param info The object to look for a preferred identifier, or {@code null} if none.
* @return The preferred identifier, or {@code null} if none.
*/
- public Identifier getIdentifier(final IdentifiedObject info) {
- Identifier first = null;
+ public ReferenceIdentifier getIdentifier(final IdentifiedObject info) {
+ ReferenceIdentifier first = null;
if (info != null) {
- final Collection<? extends Identifier> identifiers = info.getIdentifiers();
+ final Collection<ReferenceIdentifier> identifiers = info.getIdentifiers();
if (identifiers != null) {
- for (final Identifier id : identifiers) {
+ for (final ReferenceIdentifier id : identifiers) {
if (Citations.identifierMatches(authority, id.getAuthority())) {
return id;
}
@@ -499,31 +499,13 @@ public class Formatter {
return;
}
final StringBuffer buffer = this.buffer;
- /*
- * Formats the opening bracket and the object name (e.g. "NAD27").
- * The WKT entity name (e.g. "PROJCS") will be formatted later.
- * The result of this code portion looks like the following:
- *
- * <previous text>,
- * ["NAD27 / Idaho Central"
- */
- appendSeparator(true);
+ appendSeparator(requestNewLine || !(object instanceof ReferenceIdentifier));
int base = buffer.length();
buffer.appendCodePoint(symbols.getOpeningBracket(0));
final IdentifiedObject info = (object instanceof IdentifiedObject) ? (IdentifiedObject) object : null;
- if (info != null) {
- final ElementKind type = ElementKind.forType(info.getClass());
- if (type != null) {
- setColor(type);
- }
- quote(getName(info));
- if (type != null) {
- resetColor();
- }
- }
/*
- * Formats the part after the object name, then insert the WKT element name in front of them.
- * The result of this code portion looks like the following:
+ * Formats the inner part, then prepend the WKT keyword.
+ * The result looks like the following:
*
* <previous text>,
* PROJCS["NAD27 / Idaho Central",
@@ -533,6 +515,15 @@ public class Formatter {
indent(+1);
requestNewLine = false;
String keyword = object.formatTo(this);
+ if (keyword == null) {
+ if (info != null) {
+ setInvalidWKT(info);
+ keyword = getName(info.getClass());
+ } else {
+ setInvalidWKT(object.getClass());
+ keyword = invalidElement;
+ }
+ }
if (colors != null && highlightError) {
highlightError = false;
final String color = colors.getAnsiSequence(ElementKind.ERROR);
@@ -561,7 +552,11 @@ public class Formatter {
* ID["EPSG", 26769]]
*/
if (!ID_EXCLUDE.isInstance(info)) {
- append(getIdentifier(info));
+ ReferenceIdentifier id = getIdentifier(info);
+ if (!(id instanceof FormattableObject)) {
+ id = ImmutableIdentifier.castOrCopy(id);
+ }
+ append((FormattableObject) id);
}
/*
* Format remarks if any, and close the element.
@@ -647,58 +642,6 @@ public class Formatter {
}
/**
- * Appends the given identifier in an {@code ID[…]} (WKT 2) or {@code AUTHORITY[…]} (WKT 1) element.
- * The identifier may be added on the same line then the previous element or in a new line depending
- * on the enclosing element.
- *
- * {@example Identifier added on the same line:
- * <blockquote><pre>SPHEROID["Clarke 1866", …, <b>ID["EPSG", 7008]</b>]</pre></blockquote>}
- *
- * {@example Identifier added on a new line:
- * <blockquote><pre>PROJCS["NAD27 / Idaho Central",
- * GEOGCS[...etc...],
- * ...etc...
- * <b>ID["EPSG", 26769]</b>]</pre></blockquote>}
- *
- * @param identifier The identifier to append to the WKT, or {@code null} if none.
- */
- public void append(final Identifier identifier) {
- if (identifier != null) {
- final String code = identifier.getCode();
- if (code != null) {
- String citation = Citations.getIdentifier(identifier.getAuthority());
- String codeSpace = null;
- if (identifier instanceof ReferenceIdentifier) {
- codeSpace = ((ReferenceIdentifier) identifier).getCodeSpace();
- }
- if (codeSpace == null) {
- codeSpace = citation;
- citation = null;
- }
- if (codeSpace != null) {
- if (convention.isWKT1()) {
- openElement("AUTHORITY");
- append(codeSpace);
- append(code);
- } else {
- openElement("ID");
- append(codeSpace);
- appendIntegerOrText(code);
- if (identifier instanceof ReferenceIdentifier) {
- final String version = ((ReferenceIdentifier) identifier).getVersion();
- if (version != null) {
- appendIntegerOrText(version);
- append(citation);
- }
- }
- }
- closeElement();
- }
- }
- }
- }
-
- /**
* Appends the given geographic bounding box in a {@code BBOX[…]} element.
* Longitude and latitude values will be formatted in decimal degrees.
* Longitudes are relative to the Greenwich meridian, with values increasing toward East.
@@ -884,7 +827,7 @@ public class Formatter {
append(((Boolean) value).booleanValue());
} else {
append((value instanceof InternationalString) ?
- ((InternationalString) value).toString(locale) : value.toString());
+ ((InternationalString) value).toString(locale) : value.toString(), null);
}
}
@@ -907,11 +850,14 @@ public class Formatter {
* The {@linkplain Symbols#getSeparator() element separator} will be written before the text if needed.
*
* @param text The string to format to the WKT, or {@code null} if none.
+ * @param type The key of the colors to apply if syntax coloring is enabled.
*/
- public void append(final String text) {
+ public void append(final String text, final ElementKind type) {
if (text != null) {
appendSeparator(false);
+ setColor(type);
quote(text);
+ resetColor();
}
}
@@ -979,25 +925,6 @@ public class Formatter {
}
/**
- * Appends the given text as an integer if possible, or as a text otherwise.
- *
- * {@note ISO 19162 specifies "number or text". In Apache SIS, we restrict the numbers to integers
- * because handling version numbers like "8.2" as floating point numbers can be confusing.}
- */
- private void appendIntegerOrText(final String text) {
- if (text != null) {
- final long n;
- try {
- n = Long.parseLong(text);
- } catch (NumberFormatException e) {
- append(text);
- return;
- }
- append(n);
- }
- }
-
- /**
* Appends a date.
* The {@linkplain Symbols#getSeparator() element separator} will be written before the date if needed.
*
@@ -1206,12 +1133,11 @@ public class Formatter {
public void setInvalidWKT(final IdentifiedObject unformattable) {
ArgumentChecks.ensureNonNull("unformattable", unformattable);
String name = getName(unformattable);
- if (name != null) {
- invalidElement = name;
- highlightError = true;
- } else {
- setInvalidWKT(unformattable.getClass());
+ if (name == null) {
+ name = getName(unformattable.getClass());
}
+ invalidElement = name;
+ highlightError = true;
}
/**
@@ -1221,8 +1147,17 @@ public class Formatter {
*
* @param unformattable The class of the object that can not be formatted,
*/
- public void setInvalidWKT(Class<?> unformattable) {
+ public void setInvalidWKT(final Class<?> unformattable) {
ArgumentChecks.ensureNonNull("unformattable", unformattable);
+ invalidElement = getName(unformattable);
+ highlightError = true;
+ }
+
+ /**
+ * Returns the name of the GeoAPI interface implemented by the given class.
+ * If no GeoAPI interface is found, fallback on the class name.
+ */
+ private static String getName(Class<?> unformattable) {
if (!unformattable.isInterface()) {
for (final Class<?> candidate : unformattable.getInterfaces()) {
if (candidate.getName().startsWith("org.opengis.")) {
@@ -1231,8 +1166,7 @@ public class Formatter {
}
}
}
- invalidElement = Classes.getShortName(unformattable);
- highlightError = true;
+ return Classes.getShortName(unformattable);
}
/**
Modified: sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ImmutableIdentifier.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -21,17 +21,16 @@ import java.util.Locale;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.parameter.InvalidParameterValueException;
import org.opengis.referencing.ReferenceIdentifier;
import org.opengis.util.InternationalString;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Deprecable;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.iso.Types;
import org.apache.sis.metadata.iso.citation.Citations;
-import org.apache.sis.internal.simple.SimpleIdentifiedObject;
+import org.apache.sis.io.wkt.FormattableObject;
+import org.apache.sis.io.wkt.Formatter;
import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
import static org.apache.sis.util.CharSequences.trimWhitespaces;
@@ -125,7 +124,7 @@ import java.util.Objects;
* @see DefaultIdentifier
*/
@XmlRootElement(name = "RS_Identifier")
-public class ImmutableIdentifier implements ReferenceIdentifier, Deprecable, Serializable {
+public class ImmutableIdentifier extends FormattableObject implements ReferenceIdentifier, Deprecable, Serializable {
/**
* For cross-version compatibility.
*/
@@ -524,19 +523,58 @@ public class ImmutableIdentifier impleme
}
/**
- * Returns a string representation of this identifier.
- * The string representation is mostly for debugging purpose and may change in any future SIS version.
- * The default implementation returns a pseudo-WKT format.
+ * Formats a <cite>Well Known Text</cite> representation of this identifier.
*
- * {@note The <code>NamedIdentifier</code> subclass overrides this method with a different behavior,
- * in order to be compliant with the contract of the <code>GenericName</code> interface.}
- *
- * @see org.apache.sis.referencing.IdentifiedObjects#toString(Identifier)
- * @see org.apache.sis.referencing.NamedIdentifier#toString()
+ * @param formatter The formatter where to format the inner content of this WKT element.
+ * @return The WKT keyword: {@code "ID"} (WKT 2) or {@code "AUTHORITY"} (WKT 1).
*/
- @Debug
@Override
- public String toString() {
- return SimpleIdentifiedObject.toString("IDENTIFIER", authority, codeSpace, code, isDeprecated());
+ protected String formatTo(Formatter formatter) {
+ String keyword = null;
+ final String code = getCode();
+ if (code != null) {
+ String citation = Citations.getIdentifier(getAuthority());
+ String codeSpace = getCodeSpace();
+ if (codeSpace == null) {
+ codeSpace = citation;
+ citation = null;
+ }
+ if (codeSpace != null) {
+ if (formatter.getConvention().isWKT1()) {
+ keyword = "AUTHORITY";
+ formatter.append(codeSpace, null);
+ formatter.append(code, null);
+ } else {
+ keyword = "ID";
+ formatter.append(codeSpace, null);
+ append(formatter, code);
+ final String version = getVersion();
+ if (version != null) {
+ append(formatter, version);
+ formatter.append(citation, null);
+ }
+ }
+ }
+ }
+ return keyword;
+ }
+
+ /**
+ * Appends the given text as an integer if possible, or as a text otherwise.
+ *
+ * {@note ISO 19162 specifies "number or text". In Apache SIS, we restrict the numbers to integers
+ * because handling version numbers like "8.2" as floating point numbers can be confusing.}
+ */
+ private static void append(final Formatter formatter, final String text) {
+ if (text != null) {
+ final long n;
+ try {
+ n = Long.parseLong(text);
+ } catch (NumberFormatException e) {
+ formatter.append(text, null);
+ return;
+ }
+ formatter.append(n);
+ }
}
}
Modified: sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/io/wkt/FormatterTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/io/wkt/FormatterTest.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/io/wkt/FormatterTest.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/io/wkt/FormatterTest.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -57,7 +57,7 @@ public final strictfp class FormatterTes
}
/**
- * Tests {@link Formatter#append(Matrix)}.
+ * Tests (indirectly) {@link Formatter#append(Matrix)}.
*/
@Test
public void testAppendMatrix() {
Modified: sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/ImmutableIdentifierTest.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -22,14 +22,16 @@ import java.util.Locale;
import javax.xml.bind.JAXBException;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.metadata.iso.citation.DefaultCitation;
+import org.apache.sis.metadata.iso.citation.HardCodedCitations;
import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.io.wkt.Convention;
import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.TestCase;
import org.opengis.test.Validators;
import org.apache.sis.test.DependsOn;
import org.junit.Test;
-import static org.junit.Assert.*;
+import static org.apache.sis.test.MetadataAssert.*;
import static org.opengis.referencing.ReferenceIdentifier.*;
@@ -167,4 +169,14 @@ public final strictfp class ImmutableIde
final ImmutableIdentifier identifier = new ImmutableIdentifier(new DefaultCitation("EPSG"), null, "4326");
new DefaultIdentifierTest().testMarshal("RS_Identifier", identifier);
}
+
+ /**
+ * Tests WKT formatting.
+ */
+ @Test
+ public void testWKT() {
+ final ImmutableIdentifier id = new ImmutableIdentifier(HardCodedCitations.OGP, "EPSG", "4326", "8.2", null);
+ assertWktEquals(Convention.WKT2, "ID[“EPSG”, 4326, “8.2”, “OGP”]", id);
+ assertWktEquals(Convention.WKT1, "AUTHORITY[“EPSG”, “4326”]", id);
+ }
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -43,6 +43,8 @@ import org.apache.sis.internal.jaxb.refe
import org.apache.sis.internal.util.Numerics;
import org.apache.sis.internal.util.UnmodifiableArrayList;
import org.apache.sis.io.wkt.FormattableObject;
+import org.apache.sis.io.wkt.Formatter;
+import org.apache.sis.io.wkt.ElementKind;
import org.apache.sis.xml.Namespaces;
import org.apache.sis.util.Deprecable;
import org.apache.sis.util.ComparisonMode;
@@ -892,4 +894,40 @@ public class AbstractIdentifiedObject ex
protected long computeHashCode() {
return Objects.hash(name, nonNull(alias), nonNull(identifiers), remarks) ^ getInterface().hashCode();
}
+
+ /**
+ * Formats the inner part of this <cite>Well Known Text</cite> (WKT) element into the given formatter.
+ * The default implementation writes the following elements:
+ *
+ * <ul>
+ * <li>The object {@linkplain #getName() name}.</li>
+ * </ul>
+ *
+ * <p>Keywords and authority codes shall not be formatted here.
+ * For example if this formattable element is for a {@code GEOGCS} element,
+ * then this method shall write the content starting at the insertion point shows below:</p>
+ *
+ * {@preformat text
+ * GEOGCS["WGS 84", ID["EPSG", 4326]]
+ * ↑
+ * (insertion point)
+ * }
+ *
+ * {@section Declaring the WKT as invalid}
+ * If the implementation can not format a strictly compliant WKT, then it shall declare the WKT
+ * as invalid using <em>one</em> of the following ways:
+ *
+ * <ul>
+ * <li>Invoke one of the {@link Formatter#setInvalidWKT(Class) Formatter#setInvalidWKT(…)} methods, or</li>
+ * <li>Returns {@code null}.</li>
+ * </ul>
+ *
+ * @param formatter The formatter where to format the inner content of this WKT element.
+ * @return The WKT element keyword (e.g. {@code "GEOGCS"}), or {@code null} if none.
+ */
+ @Override
+ protected String formatTo(final Formatter formatter) {
+ formatter.append(formatter.getName(this), ElementKind.forType(getClass()));
+ return null;
+ }
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/AbstractCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -401,6 +401,7 @@ public class AbstractCRS extends Abstrac
* The default implementation writes the following elements:
*
* <ul>
+ * <li>The object {@linkplain #getName() name}.</li>
* <li>The datum, if any.</li>
* <li>The unit if all axes use the same unit. Otherwise the unit is omitted and the WKT format
* is {@linkplain Formatter#setInvalidWKT(IdentifiedObject) flagged as invalid}.</li>
@@ -412,16 +413,7 @@ public class AbstractCRS extends Abstrac
*/
@Override
protected String formatTo(final Formatter formatter) {
- formatDefaultWKT(formatter);
- // Will declares the WKT as invalid.
- return super.formatTo(formatter);
- }
-
- /**
- * Default implementation of {@link #formatTo(Formatter)}.
- * For {@link DefaultEngineeringCRS} and {@link DefaultVerticalCRS} use only.
- */
- final void formatDefaultWKT(final Formatter formatter) {
+ final String keyword = super.formatTo(formatter);
formatter.append(getDatum());
final Unit<?> unit = getUnit();
formatter.append(unit);
@@ -433,5 +425,6 @@ public class AbstractCRS extends Abstrac
if (unit == null) {
formatter.setInvalidWKT(cs);
}
+ return keyword;
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultCompoundCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -388,6 +388,7 @@ public class DefaultCompoundCRS extends
*/
@Override
protected String formatTo(final Formatter formatter) {
+ formatter.append(formatter.getName(this), null);
for (final CoordinateReferenceSystem element : components) {
formatter.append(element);
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultEngineeringCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -258,8 +258,8 @@ public class DefaultEngineeringCRS exten
* @return The name of the WKT element type, which is {@code "LOCAL_CS"}.
*/
@Override
- public String formatTo(final Formatter formatter) { // TODO: should be protected.
- formatDefaultWKT(formatter);
+ protected String formatTo(final Formatter formatter) {
+ super.formatTo(formatter);
return "LOCAL_CS";
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeocentricCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -218,6 +218,7 @@ public class DefaultGeocentricCRS extend
*/
@Override
protected String formatTo(final Formatter formatter) {
+ formatter.append(formatter.getName(this), null);
final Unit<?> unit = getUnit();
final GeodeticDatum datum = getDatum();
formatter.append(datum);
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultGeographicCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -223,6 +223,7 @@ public class DefaultGeographicCRS extend
*/
@Override
protected String formatTo(final Formatter formatter) {
+ formatter.append(formatter.getName(this), null);
final Unit<Angle> oldUnit = formatter.getAngularUnit();
final Unit<Angle> unit = getAngularUnit(getCoordinateSystem());
final GeodeticDatum datum = getDatum();
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/crs/DefaultVerticalCRS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -236,7 +236,7 @@ public class DefaultVerticalCRS extends
*/
@Override
protected String formatTo(final Formatter formatter) {
- formatDefaultWKT(formatter);
+ super.formatTo(formatter);
return "VERT_CS";
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/AbstractCS.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -421,9 +421,10 @@ public class AbstractCS extends Abstract
*/
@Override
protected String formatTo(final Formatter formatter) {
+ final String keyword = super.formatTo(formatter);
for (final CoordinateSystemAxis axe : axes) {
formatter.append(axe);
}
- return super.formatTo(formatter);
+ return keyword;
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DefaultCoordinateSystemAxis.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -693,6 +693,7 @@ public class DefaultCoordinateSystemAxis
*/
@Override
protected String formatTo(final Formatter formatter) {
+ super.formatTo(formatter);
formatter.append(direction);
return "AXIS";
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/AbstractDatum.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -31,7 +31,6 @@ import org.apache.sis.referencing.Abstra
import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.io.wkt.Formatter;
import org.apache.sis.util.iso.Types;
-import org.apache.sis.util.Classes;
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.internal.metadata.MetadataUtilities;
@@ -450,7 +449,8 @@ public class AbstractDatum extends Abstr
*/
@Override
protected String formatTo(final Formatter formatter) {
+ final String keyword = super.formatTo(formatter);
formatter.append(getLegacyDatumType());
- return Classes.getShortClassName(this);
+ return keyword;
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -641,12 +641,12 @@ public class BursaWolfParameters extends
if (isToWGS84()) {
return "TOWGS84";
}
- String keyword = super.formatTo(formatter); // Declare the WKT as invalid.
- final String name = IdentifiedObjects.getUnicodeIdentifier(targetDatum);
- if (name != null) {
- // We may try to build something better here in future SIS versions, if there is a need for that.
- keyword = "TO" + name;
+ formatter.setInvalidWKT(BursaWolfParameters.class);
+ String name = IdentifiedObjects.getUnicodeIdentifier(targetDatum);
+ if (name == null) {
+ name = "Unknown";
}
- return keyword;
+ // We may try to build something better here in future SIS versions, if there is a need for that.
+ return "To" + name;
}
}
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultEllipsoid.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -759,6 +759,7 @@ public class DefaultEllipsoid extends Ab
*/
@Override
protected String formatTo(final Formatter formatter) {
+ super.formatTo(formatter);
final double ivf = getInverseFlattening();
formatter.append(getAxisUnit().getConverterTo(SI.METRE).convert(getSemiMajorAxis()));
formatter.append(isInfinite(ivf) ? 0 : ivf);
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultGeodeticDatum.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -39,6 +39,7 @@ import org.apache.sis.util.logging.Loggi
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.io.wkt.Formatter;
import org.apache.sis.io.wkt.FormattableObject;
+import org.apache.sis.io.wkt.ElementKind;
import static org.apache.sis.util.Utilities.deepEquals;
import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
@@ -506,6 +507,7 @@ public class DefaultGeodeticDatum extend
protected String formatTo(final Formatter formatter) {
// Do NOT invokes the super-class method, because
// horizontal datum do not write the datum type.
+ formatter.append(formatter.getName(this), ElementKind.DATUM);
formatter.append(ellipsoid instanceof FormattableObject ? (FormattableObject) ellipsoid :
DefaultEllipsoid.castOrCopy(ellipsoid));
if (bursaWolf != null) {
Modified: sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/DefaultPrimeMeridian.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -338,6 +338,7 @@ public class DefaultPrimeMeridian extend
*/
@Override
protected String formatTo(final Formatter formatter) {
+ super.formatTo(formatter);
Unit<Angle> unit = formatter.getAngularUnit();
if (unit == null) {
unit = NonSI.DEGREE_ANGLE;
Modified: sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java [UTF-8] (original)
+++ sis/branches/JDK7/core/sis-utility/src/main/java/org/apache/sis/internal/simple/SimpleIdentifiedObject.java [UTF-8] Wed Feb 5 21:32:35 2014
@@ -206,7 +206,7 @@ public class SimpleIdentifiedObject impl
}
/**
- * Returns a pseudo-WKT representation.
+ * Returns a pseudo-WKT representation for debugging purpose.
*/
@Override
public String toString() {
@@ -222,23 +222,7 @@ public class SimpleIdentifiedObject impl
codespace = null;
authority = null;
}
- return toString("OBJECT", authority, codespace, code, false);
- }
-
- /**
- * Returns a pseudo-WKT representation.
- *
- * @param type The WKT heading text.
- * @param authority The authority to write in the {@code "ID"} element.
- * @param codespace Usually an abbreviation of the authority name.
- * @param code The code to write in the {@code "ID"} element, or {@code null} if none.
- * @param deprecated {@code true} if the object to format is deprecated.
- * @return The pseudo-WKT.
- */
- public static String toString(final String type, final Citation authority,
- final String codespace, final String code, final boolean deprecated)
- {
- final StringBuilder buffer = new StringBuilder(type).append("[\"");
+ final StringBuilder buffer = new StringBuilder("OBJECT[\"");
if (codespace != null) {
buffer.append(codespace).append(DefaultNameSpace.DEFAULT_SEPARATOR);
}
@@ -246,9 +230,6 @@ public class SimpleIdentifiedObject impl
if (authority != null) {
buffer.append(", ID[\"").append(Citations.getIdentifier(authority)).append("\"]");
}
- if (deprecated) {
- buffer.append(", DEPRECATED");
- }
return buffer.append(']').toString();
}
}
Modified: sis/branches/JDK7/pom.xml
URL: http://svn.apache.org/viewvc/sis/branches/JDK7/pom.xml?rev=1564941&r1=1564940&r2=1564941&view=diff
==============================================================================
--- sis/branches/JDK7/pom.xml (original)
+++ sis/branches/JDK7/pom.xml Wed Feb 5 21:32:35 2014
@@ -676,11 +676,11 @@ Apache SIS is a free software, Java lang
</group>
<group>
<title>Metadata</title>
- <packages>org.apache.sis.metadata*:org.apache.sis.io.wkt</packages>
+ <packages>org.apache.sis.metadata*</packages>
</group>
<group>
<title>Utilities</title>
- <packages>org.apache.sis.math*:org.apache.sis.measure*:org.apache.sis.util*:org.apache.sis.io:org.apache.sis.xml*:org.apache.sis.setup*</packages>
+ <packages>org.apache.sis.math*:org.apache.sis.measure*:org.apache.sis.util*:org.apache.sis.io*:org.apache.sis.xml*:org.apache.sis.setup*</packages>
</group>
<group>
<title>Profiles</title>