001: /*
002: * Geotools2 - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002, Geotools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: */
017: package org.geotools.data.geometryless;
018:
019: import java.io.IOException;
020:
021: import org.geotools.data.FeatureReader;
022: import org.geotools.data.jdbc.JDBCTextFeatureWriter;
023: import org.geotools.data.jdbc.QueryData;
024:
025: import com.vividsolutions.jts.geom.Geometry;
026: import com.vividsolutions.jts.geom.GeometryCollection;
027: import com.vividsolutions.jts.geom.LineString;
028: import com.vividsolutions.jts.geom.MultiLineString;
029: import com.vividsolutions.jts.geom.MultiPoint;
030: import com.vividsolutions.jts.geom.MultiPolygon;
031: import com.vividsolutions.jts.geom.Point;
032: import com.vividsolutions.jts.geom.Polygon;
033: import com.vividsolutions.jts.io.WKTWriter;
034:
035: /**
036: * Feature writer handling specific geometric function from MySQL 4.1
037: *
038: * TODO This ought to handle MySQL 4.1's geometric datatypes, but it does not work.
039: * This is because 4.1 sends geometric data in a different packet format than other
040: * datatypes, and because of this the MySQL driver does not allow ResultSet objects
041: * with geometric data to be updatable. I have not found anything about this MySQL
042: * bug in the MySQL bug database, so I will add a new bug there. In the meantime,
043: * this package should work fine for writing non-geometric data.
044: * @author Gary Sheppard garysheppard@psu.edu
045:
046: *
047: * @author wolf
048: * @author Gary Sheppard garysheppard@psu.edu
049: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/unsupported/geometryless/src/main/java/org/geotools/data/geometryless/GeometrylessFeatureWriter.java $
050: */
051: public class GeometrylessFeatureWriter extends JDBCTextFeatureWriter {
052: private static WKTWriter geometryWriter = new WKTWriter();
053:
054: public GeometrylessFeatureWriter(FeatureReader fReader,
055: QueryData queryData) throws IOException {
056: super (fReader, queryData);
057: }
058:
059: /**
060: * @see org.geotools.data.jdbc.JDBCTextFeatureWriter#getGeometryInsertText(com.vividsolutions.jts.geom.Geometry,
061: * int)
062: */
063: protected String getGeometryInsertText(Geometry geom, int srid) {
064: if (geom == null) {
065: return "NULL";
066: }
067:
068: String geoText = geometryWriter.write(geom);
069: String sql = null;
070:
071: if (GeometryCollection.class.isAssignableFrom(geom.getClass())) {
072: if (MultiPoint.class.isAssignableFrom(geom.getClass())) {
073: sql = "MultiPointFromText";
074: } else if (MultiLineString.class.isAssignableFrom(geom
075: .getClass())) {
076: sql = "MultiLineStringFromText";
077: } else if (MultiPolygon.class.isAssignableFrom(geom
078: .getClass())) {
079: sql = "MultiPolygonFromText";
080: } else {
081: sql = "GeometryCollectionFromText";
082: }
083: } else {
084: if (Point.class.isAssignableFrom(geom.getClass())) {
085: sql = "PointFromText";
086: } else if (LineString.class.isAssignableFrom(geom
087: .getClass())) {
088: sql = "LineStringFromText";
089: } else if (Polygon.class.isAssignableFrom(geom.getClass())) {
090: sql = "PolygonFromText";
091: } else {
092: sql = "GeometryFromText";
093: }
094: }
095:
096: sql += ("('" + geoText + "', " + srid + ")");
097:
098: return sql;
099: }
100: }
|