Revision: 4636
          http://sourceforge.net/p/jump-pilot/code/4636
Author:   michaudm
Date:     2015-12-19 11:14:54 +0000 (Sat, 19 Dec 2015)
Log Message:
-----------
Add support to H2GIS database

Modified Paths:
--------------
    core/trunk/ChangeLog
    core/trunk/scripts/default-plugins.xml
    
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
    
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/datastore/ConnectionManagerPanel.java

Added Paths:
-----------
    core/trunk/src/com/vividsolutions/jump/datastore/h2/
    core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSConnection.java
    core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSMetadata.java
    core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreDriver.java
    
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreExtension.java
    
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2FeatureInputStream.java
    
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ResultSetConverter.java
    core/trunk/src/com/vividsolutions/jump/datastore/h2/H2SQLBuilder.java
    
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ServerDataStoreDriver.java
    
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ValueConverterFactory.java
    core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png
    core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2015-12-18 13:55:48 UTC (rev 4635)
+++ core/trunk/ChangeLog        2015-12-19 11:14:54 UTC (rev 4636)
@@ -1,6 +1,9 @@
 # for display continuity sake please use 2 spaces instead of tabs, also make  #
 # sure that lines break at 80 chars for constricted dispaly situations        #
 
+2015-12-19 mmichaud <m.michael.mich...@orange.fr>
+  * Add support to H2GIS spatial database
+
 2015-12-18 bertazza
   * Raster symbologies now saved in and restored from project file
 

Modified: core/trunk/scripts/default-plugins.xml
===================================================================
--- core/trunk/scripts/default-plugins.xml      2015-12-18 13:55:48 UTC (rev 
4635)
+++ core/trunk/scripts/default-plugins.xml      2015-12-19 11:14:54 UTC (rev 
4636)
@@ -22,9 +22,6 @@
                <!-- shows selection summary in status bar time field -->
                org.openjump.core.ui.plugin.view.ShowFullPathPlugIn
        </plug-in>
-       <plug-in>
-               
org.openjump.core.ui.plugin.datastore.postgis.SaveToPostGISPlugIn
-       </plug-in>
        <extension>
                
com.vividsolutions.jump.datastore.oracle.OracleDataStoreExtension
        </extension>
@@ -35,7 +32,13 @@
        <extension>
                
com.vividsolutions.jump.datastore.spatialite.SpatialiteDataStoreExtension
        </extension>
+       <extension>
+               com.vividsolutions.jump.datastore.h2.H2DataStoreExtension
+       </extension>
        <plug-in>
+               
org.openjump.core.ui.plugin.datastore.postgis.SaveToPostGISPlugIn
+       </plug-in>
+       <plug-in>
                
org.openjump.core.ccordsys.srid.EnsureAllLayersHaveSRIDStylePlugIn
        </plug-in>
        <plug-in>

Added: core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSConnection.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSConnection.java     
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSConnection.java     
2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,87 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.I18N;
+import com.vividsolutions.jump.datastore.AdhocQuery;
+import com.vividsolutions.jump.datastore.FilterQuery;
+import com.vividsolutions.jump.datastore.SpatialReferenceSystemID;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDSConnection;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesSQLBuilder;
+import com.vividsolutions.jump.feature.FeatureSchema;
+import com.vividsolutions.jump.io.FeatureInputStream;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+/**
+ * Created by UMichael on 16/12/2015.
+ */
+public class H2DSConnection extends SpatialDatabasesDSConnection {
+
+    public H2DSConnection(Connection con) {
+        super(con); // ?
+        connection = con;
+        this.dbMetadata = new H2DSMetadata(this);
+    }
+
+    @Override
+    public SpatialDatabasesSQLBuilder getSqlBuilder(SpatialReferenceSystemID 
srid, String[] colNames) {
+        return new H2SQLBuilder(this.dbMetadata, srid, colNames);
+    }
+
+    /**
+     * Executes a filter query.
+     *
+     * The SRID is optional for queries - it will be determined automatically
+     * from the table metadata if not supplied.
+     * 13 dec 2015: query is now tested before execution, to prevent adding an 
empty
+     * layer built from invalid WHERE clause, for instance.
+     *
+     * @param query the query to execute
+     * @return the results of the query
+     * @throws SQLException
+     */
+    @Override
+    public FeatureInputStream executeFilterQuery(FilterQuery query) throws 
SQLException {
+        SpatialReferenceSystemID srid = 
dbMetadata.getSRID(query.getDatasetName(), query.getGeometryAttributeName());
+        String[] colNames = dbMetadata.getColumnNames(query.getDatasetName());
+
+        H2SQLBuilder builder = (H2SQLBuilder)this.getSqlBuilder(srid, 
colNames);
+        String queryString = builder.getSQL(query);
+
+        // [mmichaud 2013-08-07] add a parameter for database primary key name
+        return new H2FeatureInputStream(connection, queryString, 
query.getPrimaryKey());
+    }
+
+    /**
+     * Executes an adhoc query.
+     *
+     * The SRID is optional for queries - it will be determined automatically
+     * from the table metadata if not supplied.
+     *
+     * @param query the query to execute
+     * @return the results of the query
+     * @throws SQLException
+     */
+    @Override
+    public FeatureInputStream executeAdhocQuery(AdhocQuery query) throws 
Exception {
+        String queryString = query.getQuery();
+        H2FeatureInputStream ifs = new H2FeatureInputStream(connection, 
queryString, query.getPrimaryKey());
+
+        // Nicolas Ribot: getting FeatureSchema here actually runs the query: 
if an error occurs, must trap it here
+        FeatureSchema fs = null;
+        try {
+            fs = ifs.getFeatureSchema();
+        } catch (Exception e) {
+            throw new Exception(
+                    I18N.get(SpatialDatabasesDSConnection.class.getName()
+                            + ".SQL-error") + e.getMessage());
+        }
+
+        if (fs.getGeometryIndex() < 0) {
+            throw new 
Exception(I18N.get(SpatialDatabasesDSConnection.class.getName()
+                    +".resultset-must-have-a-geometry-column"));
+        }
+        return ifs;
+
+    }
+}

Added: core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSMetadata.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSMetadata.java       
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DSMetadata.java       
2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,52 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.datastore.DataStoreConnection;
+import com.vividsolutions.jump.datastore.GeometryColumn;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDSMetadata;
+
+import java.util.List;
+
+/**
+ * Metadata for a H2 Database
+ */
+public class H2DSMetadata extends SpatialDatabasesDSMetadata {
+
+    public H2DSMetadata(DataStoreConnection con) {
+        conn = con;
+        // TODO: use bind parameters to avoid SQL injection
+        datasetNameQuery = "SELECT DISTINCT f_table_schema, f_table_name FROM 
geometry_columns";
+        defaultSchemaName = "PUBLIC";
+        spatialDbName = "H2";
+        //spatialExtentQuery1 = "SELECT ST_AsBinary(ST_Estimated_Extent( '%s', 
'%s', '%s' ))";
+        spatialExtentQuery1 = "SELECT ST_AsBinary(ST_Envelope(ST_Extent(%s))) 
FROM %s.%s";
+        geoColumnsQuery = "SELECT f_geometry_column, srid, type FROM 
geometry_columns where f_table_schema = '%s' and f_table_name = '%s'";
+        sridQuery = "SELECT srid FROM geometry_columns where f_table_schema = 
'%s' and f_table_name = '%s' and f_geometry_column = '%s'";
+    }
+
+    @Override
+    public String getSpatialExtentQuery1(String schema, String table, String 
attributeName) {
+        return String.format(this.spatialExtentQuery1, schema, table, 
attributeName);
+    }
+
+    @Override
+    public String getSpatialExtentQuery2(String schema, String table, String 
attributeName) {
+        return String.format(this.spatialExtentQuery1, attributeName, schema, 
table);
+    }
+
+    @Override
+    public String getGeoColumnsQuery(String datasetName) {
+        return String.format(this.geoColumnsQuery, getSchemaName(datasetName), 
getTableName(datasetName));
+    }
+
+    @Override
+    public String getSridQuery(String schemaName, String tableName, String 
colName) {
+        // TODO
+        return String.format(this.sridQuery, schemaName, tableName, colName);
+    }
+
+    @Override
+    public List<GeometryColumn> getGeometryAttributes(String datasetName) {
+        String sql = this.getGeoColumnsQuery(datasetName);
+        return getGeometryAttributes(sql, datasetName);
+    }
+}

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreDriver.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreDriver.java  
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreDriver.java  
2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,17 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDataStoreDriver;
+
+/**
+ * A driver for supplying {@link 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDSConnection}s
+ */
+public class H2DataStoreDriver extends SpatialDatabasesDataStoreDriver {
+
+        public final static String JDBC_CLASS = "org.h2.Driver";
+
+        public H2DataStoreDriver() {
+        this.driverName = "H2GIS";
+        this.jdbcClass = "org.h2.Driver";
+        this.urlPrefix = "jdbc:h2:";
+    }
+}

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreExtension.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreExtension.java   
                            (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2DataStoreExtension.java   
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,60 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.datastore.DataStoreDriver;
+import com.vividsolutions.jump.datastore.mariadb.MariadbDataStoreDriver;
+import com.vividsolutions.jump.workbench.WorkbenchContext;
+import com.vividsolutions.jump.workbench.plugin.Extension;
+import com.vividsolutions.jump.workbench.plugin.PlugInContext;
+
+import java.sql.Driver;
+import java.sql.DriverManager;
+
+import static 
com.vividsolutions.jump.datastore.mariadb.MariadbDataStoreDriver.JDBC_CLASS;
+
+/**
+ * Created by UMichael on 17/12/2015.
+ */
+public class H2DataStoreExtension extends Extension {
+    private static boolean disabled = false;
+
+    public String getName() {
+        return "H2GIS Datastore Extension";
+    }
+
+    public String getVersion() {
+        return "0.1 (2015-12-20)";
+    }
+
+    public String getMessage() {
+        return disabled ? "Disabled: Missing h2-<version>.jar in classpath"
+                : "";
+    }
+
+    public void configure(PlugInContext context) throws Exception {
+        WorkbenchContext wbc = context.getWorkbenchContext();
+
+        // registers the H2DataStore driver to the system:
+        try {
+            ClassLoader pluginLoader = wbc.getWorkbench().getPlugInManager()
+                    .getClassLoader();
+            // check for h2-<version>.jar
+            DriverManager.registerDriver(
+                    (Driver) Class.forName(JDBC_CLASS, true, 
pluginLoader).newInstance());
+
+            // register the datastore
+            
wbc.getRegistry().createEntry(DataStoreDriver.REGISTRY_CLASSIFICATION,
+                    new H2DataStoreDriver());
+
+            
wbc.getRegistry().createEntry(DataStoreDriver.REGISTRY_CLASSIFICATION,
+                    new H2ServerDataStoreDriver());
+        } catch (Exception e) {
+            disabled = true;
+            wbc.getWorkbench()
+                    .getFrame()
+                    .log(
+                            "H2GIS Data Store disabled:\n\t" + e.toString()
+                                    + "\n\tH2 JDBC Driver (h2-<version>.jar) 
must exist in the classpath !", this.getClass());
+        }
+    }
+
+}
\ No newline at end of file

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2FeatureInputStream.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2FeatureInputStream.java   
                            (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2FeatureInputStream.java   
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,43 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.datastore.postgis.PostgisResultSetConverter;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesFeatureInputStream;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesResultSetConverter;
+import com.vividsolutions.jump.workbench.JUMPWorkbench;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * H2FeatureInputStream
+ */
+public class H2FeatureInputStream extends SpatialDatabasesFeatureInputStream {
+
+    public H2FeatureInputStream(Connection conn, String queryString) {
+        this(conn, queryString, null);
+    }
+
+    public H2FeatureInputStream(Connection conn, String queryString, String 
externalIdentifier) {
+        super(conn, queryString, externalIdentifier);
+        try {
+            JUMPWorkbench.getInstance().getFrame().log("creating a 
H2FeatureInputStream (class:" + this.getClass()
+                    + " ) (driver: " + conn.getMetaData().getDriverName() + ") 
id"
+                    + this.hashCode(), this.getClass());
+        } catch (SQLException ex) {
+            
Logger.getLogger(H2FeatureInputStream.class.getName()).log(Level.SEVERE, null, 
ex);
+        }
+    }
+
+    /**
+     * Returns a H2ResultSetConverter
+     * @param rs
+     * @return
+     */
+    @Override
+    protected SpatialDatabasesResultSetConverter 
getResultSetConverter(ResultSet rs) {
+        return new H2ResultSetConverter(conn, rs);
+    }
+}

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ResultSetConverter.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ResultSetConverter.java   
                            (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ResultSetConverter.java   
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,24 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.datastore.postgis.PostgisValueConverterFactory;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesResultSetConverter;
+import com.vividsolutions.jump.feature.Feature;
+import com.vividsolutions.jump.feature.FeatureSchema;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+
+/**
+ * Implements the mapping between a result set and a {@link FeatureSchema} and
+ * {@link Feature} set.
+ *
+ * This is a transient worker class, whose lifetime should be no longer than 
the
+ * lifetime of the provided ResultSet
+ */
+public class H2ResultSetConverter extends SpatialDatabasesResultSetConverter {
+
+    public H2ResultSetConverter(Connection conn, ResultSet rs) {
+        this.rs = rs;
+        this.odm = new H2ValueConverterFactory(conn);
+    }
+}
\ No newline at end of file

Added: core/trunk/src/com/vividsolutions/jump/datastore/h2/H2SQLBuilder.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/datastore/h2/H2SQLBuilder.java       
                        (rev 0)
+++ core/trunk/src/com/vividsolutions/jump/datastore/h2/H2SQLBuilder.java       
2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,89 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jump.datastore.FilterQuery;
+import com.vividsolutions.jump.datastore.SpatialReferenceSystemID;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDSMetadata;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesSQLBuilder;
+
+/**
+ * Created by UMichael on 17/12/2015.
+ */
+public class H2SQLBuilder  extends SpatialDatabasesSQLBuilder {
+
+    public H2SQLBuilder(SpatialDatabasesDSMetadata dbMetadata,
+                             SpatialReferenceSystemID defaultSRID, String[] 
colNames) {
+        super(dbMetadata, defaultSRID, colNames);
+    }
+
+    /**
+     * Builds a valid SQL spatial query with the given spatial filter.
+     * @param query
+     * @return a SQL query to get column names
+     * //TODO: refactor like Oracle code: queries as variable placeholders: 
put it in base class.
+     */
+    @Override
+    public String getSQL(FilterQuery query) {
+        StringBuilder qs = new StringBuilder();
+        //HACK
+        qs.append("SELECT ");
+        qs.append(getColumnListSpecifier(colNames, 
query.getGeometryAttributeName()));
+        qs.append(" FROM ");
+        // fixed by mmichaud on 2010-05-27 for mixed case dataset names
+        
qs.append("\"").append(query.getDatasetName().replaceAll("\\.","\".\"")).append("\"");
+        qs.append(" t WHERE ");
+        qs.append(buildBoxFilter(query));
+
+        String whereCond = query.getCondition();
+        if (whereCond != null) {
+            qs.append(" AND ");
+            qs.append(whereCond);
+        }
+        int limit = query.getLimit();
+        if (limit != 0 && limit != Integer.MAX_VALUE) {
+            qs.append(" LIMIT ").append(limit);
+        }
+        return qs.toString();
+    };
+
+    /**
+     * Returns the string representing a SQL column definition.
+     * Implementors should take care of column names (case, quotes)
+     * @param colNames
+     * @param geomColName
+     * @return column list
+     */
+    @Override
+    protected String getColumnListSpecifier(String[] colNames, String 
geomColName) {
+        // Added double quotes around each column name in order to read mixed 
case table names
+        // correctly [mmichaud 2007-05-13]
+        StringBuilder buf = new StringBuilder();
+        // fixed by mmichaud using a patch from jaakko [2008-05-21]
+        // query geomColName as geomColName instead of geomColName as 
geomColName + "_wkb"
+        //buf.append("ST_AsBinary(\"").append(geomColName).append("\") as 
").append("\"").append(geomColName).append("\"");
+        buf.append("\"").append(geomColName).append("\"");
+        for (String colName : colNames) {
+            if (! geomColName.equalsIgnoreCase(colName)) {
+                buf.append(",\"").append(colName).append("\"");
+            }
+        }
+        return buf.toString();
+    }
+
+    @Override
+    protected String buildBoxFilter(FilterQuery query) {
+        Envelope env = query.getFilterGeometry().getEnvelopeInternal();
+        String bbox = query.getFilterGeometry().getEnvelope().toString();
+
+        // Example of Postgis SQL: GEOM && SetSRID('BOX3D(191232 243117,191232 
243119)'::box3d,-1);
+        StringBuilder buf = new StringBuilder();
+        // fixed by mmichaud on 2010-05-27 for mixed case geometryColName names
+        buf.append("\"").append(query.getGeometryAttributeName()).append("\" 
&& ST_GeomFromText('" + bbox + "', ");
+        // [mmichaud 2012-03-14] make windows srid homogeneous with geometry 
srid
+        // in case it is not defined
+        String srid = getSRID(query.getSRSName());
+        srid = srid==null? "ST_SRID(\"" + query.getGeometryAttributeName() + 
"\")" : srid;
+        buf.append(srid).append(")");
+        return buf.toString();
+    }
+}
\ No newline at end of file

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ServerDataStoreDriver.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ServerDataStoreDriver.java
                            (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ServerDataStoreDriver.java
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,17 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesDataStoreDriver;
+
+/**
+ * Created by UMichael on 18/12/2015.
+ */
+public class H2ServerDataStoreDriver extends SpatialDatabasesDataStoreDriver {
+
+    public final static String JDBC_CLASS = "org.h2.Driver";
+
+    public H2ServerDataStoreDriver() {
+        this.driverName = "H2GIS Server";
+        this.jdbcClass = "org.h2.Driver";
+        this.urlPrefix = "jdbc:h2:tcp://";
+    }
+}
\ No newline at end of file

Added: 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ValueConverterFactory.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ValueConverterFactory.java
                            (rev 0)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/h2/H2ValueConverterFactory.java
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -0,0 +1,40 @@
+package com.vividsolutions.jump.datastore.h2;
+
+import com.vividsolutions.jump.datastore.jdbc.ValueConverter;
+import com.vividsolutions.jump.datastore.jdbc.ValueConverterFactory;
+import 
com.vividsolutions.jump.datastore.spatialdatabases.SpatialDatabasesValueConverterFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+/**
+ * Factory to convert Postgis geometric data type.
+ */
+public class H2ValueConverterFactory extends 
SpatialDatabasesValueConverterFactory {
+
+    public H2ValueConverterFactory(Connection conn) {
+        super(conn);
+    }
+
+    @Override
+    public ValueConverter getConverter(ResultSetMetaData rsm, int columnIndex)
+            throws SQLException {
+        String dbTypeName = rsm.getColumnTypeName(columnIndex);
+        //System.out.println(dbTypeName + " " + rsm.getColumnType(columnIndex) 
+ " " + rsm.getColumnClassName(columnIndex));
+
+        // manages 2 cases: type retrieved from Database metadata (DataStore 
Panel)
+        // and from direct Adhoc query (type of the column resultset).
+        if ("GEOMETRY".equalsIgnoreCase(dbTypeName)) {
+            return WKB_GEOMETRY_MAPPER;
+        }
+
+        // handle the standard types
+        ValueConverter stdConverter = ValueConverterFactory.getConverter(rsm, 
columnIndex);
+        if (stdConverter != null) {
+            return stdConverter;
+        }
+        // default - can always show it as a string!
+        return ValueConverterFactory.STRING_MAPPER;
+    }
+}

Modified: 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
      2015-12-18 13:55:48 UTC (rev 4635)
+++ 
core/trunk/src/com/vividsolutions/jump/datastore/spatialdatabases/SpatialDatabasesDataStoreDriver.java
      2015-12-19 11:14:54 UTC (rev 4636)
@@ -6,6 +6,7 @@
 
 import com.vividsolutions.jump.datastore.DataStoreConnection;
 import com.vividsolutions.jump.datastore.DataStoreDriver;
+import com.vividsolutions.jump.datastore.h2.H2DSConnection;
 import com.vividsolutions.jump.datastore.jdbc.DelegatingDriver;
 import com.vividsolutions.jump.datastore.mariadb.MariadbDSConnection;
 import com.vividsolutions.jump.datastore.oracle.OracleDSConnection;
@@ -177,6 +178,8 @@
       return new MariadbDSConnection(conn);
     } else if (url.startsWith("jdbc:sqlite")) {
       return new SpatialiteDSConnection(conn);
+    } else if (url.startsWith("jdbc:h2")) {
+      return new H2DSConnection(conn);
     } else {
       // TODO: should not pass here
       System.err.println("ERROR: Returning a SpatialDatabasesDSConnection for 
url: " + url + ". Should not happen...");

Added: core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png
===================================================================
(Binary files differ)

Index: core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png        
2015-12-18 13:55:48 UTC (rev 4635)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png        
2015-12-19 11:14:54 UTC (rev 4636)

Property changes on: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ko_h2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png
===================================================================
(Binary files differ)

Index: core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png
===================================================================
--- core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png        
2015-12-18 13:55:48 UTC (rev 4635)
+++ core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png        
2015-12-19 11:14:54 UTC (rev 4636)

Property changes on: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/images/ok_h2.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/datastore/ConnectionManagerPanel.java
===================================================================
--- 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/datastore/ConnectionManagerPanel.java
    2015-12-18 13:55:48 UTC (rev 4635)
+++ 
core/trunk/src/com/vividsolutions/jump/workbench/ui/plugin/datastore/ConnectionManagerPanel.java
    2015-12-19 11:14:54 UTC (rev 4636)
@@ -54,6 +54,8 @@
   private static final Icon DISCONNECTED_ICON = 
IconLoader.icon("disconnect.png");
   private static final Icon PG_CONNECTED_ICON = IconLoader.icon("ok_pg.png");
   private static final Icon PG_DISCONNECTED_ICON = 
IconLoader.icon("ko_pg.png");
+  private static final Icon H2_CONNECTED_ICON = IconLoader.icon("ok_h2.png");
+  private static final Icon H2_DISCONNECTED_ICON = 
IconLoader.icon("ko_h2.png");
   private static final Icon ORA_CONNECTED_ICON = 
IconLoader.icon("ok_oracle.png");
   private static final Icon ORA_DISCONNECTED_ICON = 
IconLoader.icon("ko_oracle.png");
   private static final Icon MARIA_CONNECTED_ICON = 
IconLoader.icon("ok_mariadb.png");
@@ -491,6 +493,10 @@
         return isClosed ? MARIA_DISCONNECTED_ICON : MARIA_CONNECTED_ICON;
       } else if ( 
driverClassName.equals("com.vividsolutions.jump.datastore.spatialite.SpatialiteDataStoreDriver"))
 {
         return isClosed ? SQLITE_DISCONNECTED_ICON : SQLITE_CONNECTED_ICON;
+      } else if ( 
driverClassName.equals("com.vividsolutions.jump.datastore.h2.H2DataStoreDriver"))
 {
+        return isClosed ? H2_DISCONNECTED_ICON : H2_CONNECTED_ICON;
+      } else if ( 
driverClassName.equals("com.vividsolutions.jump.datastore.h2.H2ServerDataStoreDriver"))
 {
+        return isClosed ? H2_DISCONNECTED_ICON : H2_CONNECTED_ICON;
       }
       //Default
       return isClosed ? DISCONNECTED_ICON : CONNECTED_ICON;


------------------------------------------------------------------------------
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to