/*
* Copyright (c) 2015 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.io.jdbc.spatialite.internal;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryCollection;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
/**
* {@link SpatiaLiteSupport} implementation supporting SpatiaLite version 3.1.0
* or lower.
*
* @author Stefano Costa, GeoSolutions
*/
public class SpatiaLiteSupportVersion3 extends AbstractSpatiaLiteSupport {
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getGeometryTypeMetadataSQL()
*/
@Override
protected String getGeometryTypeMetadataSQL() {
return "SELECT srid, type, coord_dimension FROM geometry_columns WHERE f_table_name = ? AND f_geometry_column = ?";
}
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getSrsMetadataSQL()
*/
@Override
protected String getSrsMetadataSQL() {
return "SELECT auth_srid, auth_name, srs_wkt AS srtext FROM spatial_ref_sys WHERE srid = ?";
}
@Override
protected String getSrsMetadataFromAuthSQL() {
return "SELECT auth_srid, auth_name, srs_wkt AS srtext, srid FROM spatial_ref_sys WHERE auth_name = ? AND auth_srid = ?";
}
@Override
protected int getCoordDimensionAsInt(Object coordDimension) {
String coordDimensionAsString = String.class.cast(coordDimension);
if ("XY".equals(coordDimensionAsString)) {
return 2;
}
else if ("XYZ".equals(coordDimensionAsString) || "XYM".equals(coordDimensionAsString)) {
return 3;
}
else if ("XYZM".equals(coordDimensionAsString)) {
return 4;
}
else {
// should never happen
return -1;
}
}
@Override
protected Class<? extends Geometry> getGeometryType(Object type) {
String geomType = String.class.cast(type);
if ("MultiPoint".equalsIgnoreCase(geomType)) {
return MultiPoint.class;
}
else if ("MultiLineString".equalsIgnoreCase(geomType)) {
return MultiLineString.class;
}
else if ("MultiPolygon".equalsIgnoreCase(geomType)) {
return MultiPolygon.class;
}
else if ("Point".equalsIgnoreCase(geomType)) {
return Point.class;
}
else if ("LineString".equalsIgnoreCase(geomType)) {
return LinearRing.class;
}
else if ("Polygon".equalsIgnoreCase(geomType)) {
return Polygon.class;
}
else if ("GeometryCollection".equalsIgnoreCase(geomType)) {
return GeometryCollection.class;
}
else if ("Geometry".equalsIgnoreCase(geomType)) {
return Geometry.class;
}
else {
// should never happen
return null;
}
}
}