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;
 


Reply via email to