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