Author: desruisseaux
Date: Fri Apr 13 18:45:24 2018
New Revision: 1829094
URL: http://svn.apache.org/viewvc?rev=1829094&view=rev
Log:
Now that the Java Topology Suite (JTS) is available under Eclipse Distribution
License 1.0 (a BSD-style license), replace Java reflection by direct call to
JTS methods.
The JTS library stay optional, as well as the ESRI library. Apache SIS
fallbacks on Java2D if neither JTS or ESRI library is available on the
classpath.
Modified:
sis/branches/JDK8/core/sis-feature/pom.xml
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/package-info.java
sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
sis/branches/JDK8/pom.xml
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
Modified: sis/branches/JDK8/core/sis-feature/pom.xml
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/pom.xml?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-feature/pom.xml (original)
+++ sis/branches/JDK8/core/sis-feature/pom.xml Fri Apr 13 18:45:24 2018
@@ -124,6 +124,11 @@
<artifactId>esri-geometry-api</artifactId>
<optional>true</optional>
</dependency>
+ <dependency>
+ <groupId>org.locationtech.jts</groupId>
+ <artifactId>jts-core</artifactId>
+ <optional>true</optional>
+ </dependency>
<!-- Test dependencies -->
<dependency>
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/ESRI.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -33,8 +33,7 @@ import org.apache.sis.util.Classes;
/**
* Centralizes some usages of ESRI geometry API by Apache SIS.
- * We use this class for isolating dependencies from the {@code
org.apache.feature} package
- * to ESRI's API or to Java Topology Suite (JTS) API.
+ * We use this class for isolating dependencies from the {@code
org.apache.feature} package to ESRI's API.
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
@@ -51,7 +50,7 @@ final class ESRI extends Geometries<Geom
}
/**
- * If the given object is a JTS geometry, returns a short string
representation the class name.
+ * If the given object is an ESRI geometry, returns a short string
representation the class name.
*/
@Override
final String tryGetLabel(Object geometry) {
@@ -147,7 +146,7 @@ final class ESRI extends Geometries<Geom
/**
* Merges a sequence of points or paths if the first instance is an
implementation of this library.
*
- * @throws ClassCastException if an element in the iterator is not a JTS
geometry.
+ * @throws ClassCastException if an element in the iterator is not an ESRI
geometry.
*/
@Override
final Geometry tryMergePolylines(Object next, final Iterator<?> polylines)
{
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/JTS.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -17,9 +17,13 @@
package org.apache.sis.internal.feature;
import java.util.Iterator;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Envelope;
import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.math.Vector;
import org.apache.sis.util.Classes;
@@ -31,35 +35,16 @@ import org.apache.sis.util.Classes;
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.7
* @module
- *
- * @todo avoid use of reflection and use JTS API directly after JTS released
- * a new version of the library under BSD-like license.
*/
-final class JTS extends Geometries<Object> {
- /**
- * Getter methods on JTS envelopes.
- * Each methods take no argument and return a {@code double} value.
- */
- private final Method getEnvelopeInternal, getMinX, getMinY, getMaxX,
getMaxY;
-
+final class JTS extends Geometries<Geometry> {
/**
* Creates the singleton instance.
*/
JTS() throws ClassNotFoundException, NoSuchMethodException {
- super(/*GeometryLibrary.JTS, */ null, //
TODO
- (Class) Class.forName("com.vividsolutions.jts.geom.Geometry"),
// TODO
- Class.forName("com.vividsolutions.jts.geom.Point"),
- Class.forName("com.vividsolutions.jts.geom.LineString"),
- Class.forName("com.vividsolutions.jts.geom.Polygon"));
- getEnvelopeInternal = rootClass.getMethod("getEnvelopeInternal",
(Class[]) null);
- final Class<?> envt = getEnvelopeInternal.getReturnType();
- getMinX = envt.getMethod("getMinX", (Class[]) null);
- getMinY = envt.getMethod("getMinY", (Class[]) null);
- getMaxX = envt.getMethod("getMaxX", (Class[]) null);
- getMaxY = envt.getMethod("getMaxY", (Class[]) null);
+ super(GeometryLibrary.JTS, Geometry.class, Point.class,
LineString.class, Polygon.class);
}
/**
@@ -67,7 +52,7 @@ final class JTS extends Geometries<Objec
*/
@Override
final String tryGetLabel(Object geometry) {
- return (rootClass.isInstance(geometry)) ?
Classes.getShortClassName(geometry) : null;
+ return (geometry instanceof Geometry) ?
Classes.getShortClassName(geometry) : null;
}
/**
@@ -80,31 +65,14 @@ final class JTS extends Geometries<Objec
*/
@Override
final GeneralEnvelope tryGetEnvelope(final Object geometry) {
- final double xmin, ymin, xmax, ymax;
- if (rootClass.isInstance(geometry)) {
- try {
- final Object env = getEnvelopeInternal.invoke(geometry,
(Object[]) null);
- xmin = (Double) getMinX.invoke(env, (Object[]) null);
- ymin = (Double) getMinY.invoke(env, (Object[]) null);
- xmax = (Double) getMaxX.invoke(env, (Object[]) null);
- ymax = (Double) getMaxY.invoke(env, (Object[]) null);
- } catch (ReflectiveOperationException e) {
- if (e instanceof InvocationTargetException) {
- final Throwable cause = e.getCause();
- if (cause instanceof RuntimeException) {
- throw (RuntimeException) cause;
- }
- if (cause instanceof Error) {
- throw (Error) cause;
- }
- }
- // Should never happen unless JTS's API changed.
- throw (Error) new
IncompatibleClassChangeError(e.toString()).initCause(e);
- }
+ if (geometry instanceof Geometry) {
+ final Envelope bounds = ((Geometry)
geometry).getEnvelopeInternal();
final GeneralEnvelope env = new GeneralEnvelope(2);
- env.setRange(0, xmin, xmax);
- env.setRange(1, ymin, ymax);
- return env;
+ env.setRange(0, bounds.getMinX(), bounds.getMaxX());
+ env.setRange(1, bounds.getMinY(), bounds.getMaxY());
+ if (!env.isEmpty()) {
+ return env;
+ }
}
return null;
}
@@ -132,7 +100,7 @@ final class JTS extends Geometries<Objec
* The implementation returned by this method must be an instance of
{@link #rootClass}.
*/
@Override
- public Object createPolyline(final int dimension, final Vector...
ordinates) {
+ public Geometry createPolyline(final int dimension, final Vector...
ordinates) {
// TODO - see class javadoc
throw unsupported(dimension);
}
@@ -143,7 +111,7 @@ final class JTS extends Geometries<Objec
* @throws ClassCastException if an element in the iterator is not a JTS
geometry.
*/
@Override
- final Object tryMergePolylines(final Object first, final Iterator<?>
polylines) {
+ final Geometry tryMergePolylines(final Object first, final Iterator<?>
polylines) {
throw unsupported(2); // TODO - see class javadoc
}
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/internal/feature/Java2D.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -31,8 +31,7 @@ import org.apache.sis.util.Classes;
/**
* Centralizes usages of some (not all) Java2D geometry API by Apache SIS.
- * We use this class for isolating dependencies from the {@code
org.apache.feature} package
- * to ESRI's API or to Java Topology Suite (JTS) API.
+ * We use this class for isolating dependencies from the {@code
org.apache.feature} package to Java2D API.
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
Modified:
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/GeometryLibrary.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -28,7 +28,7 @@ import org.opengis.metadata.acquisition.
* All those libraries are optional.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @see OptionKey#GEOMETRY_LIBRARY
* @see
org.apache.sis.feature.builder.FeatureTypeBuilder#addAttribute(GeometryType)
@@ -53,7 +53,7 @@ public enum GeometryLibrary {
*
* @see <a href="http://locationtech.github.io/jts/">JTS home page</a>
*/
-// JTS,
+ JTS,
/**
* The ESRI geometry API library. This library can be used for spatial
vector data processing.
Modified:
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/package-info.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/package-info.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/package-info.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-utility/src/main/java/org/apache/sis/setup/package-info.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -23,7 +23,7 @@
* is created.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
Modified: sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
--- sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
[ISO-8859-1] (original)
+++ sis/branches/JDK8/ide-project/NetBeans/nbproject/project.properties
[ISO-8859-1] Fri Apr 13 18:45:24 2018
@@ -101,7 +101,8 @@ project.GeoAPI = ../../../../GeoAP
#
jsr363.version = 1.0
jama.version = 1.0.3
-geometry.version = 2.0.0
+esri.api.version = 2.1.0
+jts.version = 1.15.0
georss.version = 0.9.8
rome.version = 0.9
jdom1.version = 1.0
@@ -130,7 +131,8 @@ endorsed.classpath=
javac.classpath=\
${project.GeoAPI}/dist/geoapi.jar:\
${maven.repository}/javax/measure/unit-api/${jsr363.version}/unit-api-${jsr363.version}.jar:\
-
${maven.repository}/com/esri/geometry/esri-geometry-api/${geometry.version}/esri-geometry-api-${geometry.version}.jar:\
+
${maven.repository}/com/esri/geometry/esri-geometry-api/${esri.api.version}/esri-geometry-api-${esri.api.version}.jar:\
+
${maven.repository}/org/locationtech/jts/jts-core/${jts.version}/jts-core-${jts.version}.jar:\
${maven.repository}/org/geonames/georss-rome/${georss.version}/georss-rome-${georss.version}.jar:\
${maven.repository}/rome/rome/${rome.version}/rome-${rome.version}.jar:\
${maven.repository}/jdom/jdom/${jdom1.version}/jdom-${jdom1.version}.jar:\
Modified: sis/branches/JDK8/pom.xml
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/pom.xml?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
--- sis/branches/JDK8/pom.xml (original)
+++ sis/branches/JDK8/pom.xml Fri Apr 13 18:45:24 2018
@@ -415,7 +415,13 @@
<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
- <version>2.0.0</version>
+ <version>2.1.0</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.locationtech.jts</groupId>
+ <artifactId>jts-core</artifactId>
+ <version>1.15.0</version>
<optional>true</optional>
</dependency>
<dependency>
Modified:
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java?rev=1829094&r1=1829093&r2=1829094&view=diff
==============================================================================
---
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
[UTF-8] (original)
+++
sis/branches/JDK8/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/xml/AbstractProvider.java
[UTF-8] Fri Apr 13 18:45:24 2018
@@ -67,6 +67,8 @@ public abstract class AbstractProvider e
* mimeForNameSpaces.put("http://www.isotc211.org/2005/gmd",
"application/vnd.iso.19139+xml");
* mimeForNameSpaces.put("http://www.opengis.net/cat/csw/2.0.2",
"application/vnd.ogc.csw_xml");
* }</div>
+ *
+ * @todo replace by {@code Map.of(…)} on JDK9 branch.
*/
protected final Map<String,String> mimeForNameSpaces;
@@ -78,6 +80,8 @@ public abstract class AbstractProvider e
* public MyDataStore() {
* mimeForRootElements.put("MD_Metadata",
"application/vnd.iso.19139+xml");
* }</div>
+ *
+ * @todo replace by {@code Map.of(…)} on JDK9 branch.
*/
protected final Map<String,String> mimeForRootElements;