Revision 445 trunk/org.gvsig.postgresql/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLHelper.java
PostgreSQLHelper.java | ||
---|---|---|
2 | 2 |
package org.gvsig.postgresql.dal; |
3 | 3 |
|
4 | 4 |
import java.sql.Connection; |
5 |
import java.sql.PreparedStatement; |
|
6 | 5 |
import java.sql.SQLException; |
7 |
import java.util.ArrayList; |
|
8 |
import java.util.List; |
|
9 | 6 |
import org.apache.commons.dbcp.BasicDataSource; |
10 | 7 |
import org.apache.commons.lang3.BooleanUtils; |
11 | 8 |
import org.apache.commons.lang3.StringUtils; |
12 |
import org.gvsig.fmap.dal.DataTypes; |
|
13 |
import org.gvsig.fmap.dal.ExpressionBuilder; |
|
14 | 9 |
import org.gvsig.fmap.dal.SQLBuilder; |
15 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
|
16 |
import org.gvsig.fmap.dal.feature.FeatureType; |
|
17 |
import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
|
18 | 10 |
import org.gvsig.fmap.dal.resource.exception.AccessResourceException; |
19 | 11 |
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters; |
20 | 12 |
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters; |
... | ... | |
25 | 17 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase; |
26 | 18 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
27 | 19 |
import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolverBase; |
28 |
import org.gvsig.fmap.geom.Geometry; |
|
29 |
import org.gvsig.fmap.geom.aggregate.MultiLine; |
|
30 |
import org.gvsig.fmap.geom.aggregate.MultiPoint; |
|
31 |
import org.gvsig.fmap.geom.aggregate.MultiPolygon; |
|
32 |
import org.gvsig.fmap.geom.exception.CreateGeometryException; |
|
33 |
import org.gvsig.fmap.geom.primitive.Primitive; |
|
34 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
35 | 20 |
import org.gvsig.postgresql.dal.operations.PostgreSQLOperationsFactory; |
36 |
import org.gvsig.tools.dispose.Disposable; |
|
37 | 21 |
import org.slf4j.Logger; |
38 | 22 |
import org.slf4j.LoggerFactory; |
39 | 23 |
|
... | ... | |
220 | 204 |
this.connectionProvider.closeConnection(connection); |
221 | 205 |
} |
222 | 206 |
|
223 |
|
|
224 |
|
|
225 | 207 |
@Override |
226 | 208 |
public PostgreSQLConnectionParameters getConnectionParameters() { |
227 | 209 |
return (PostgreSQLConnectionParameters) super.getConnectionParameters(); |
... | ... | |
311 | 293 |
public JDBCServerExplorerParameters createServerExplorerParameters() { |
312 | 294 |
return new PostgreSQLServerExplorerParameters(); |
313 | 295 |
} |
314 |
|
|
315 |
public Disposable setPreparedStatementParameters(PreparedStatement st, JDBCSQLBuilderBase sqlbuilder, FeatureType type, FeatureProvider feature) { |
|
316 |
try { |
|
317 |
List<Object> values = new ArrayList<>(); |
|
318 |
for (ExpressionBuilder.Parameter parameter : sqlbuilder.getParameters()) { |
|
319 |
Object value; |
|
320 |
if (parameter.is_constant()) { |
|
321 |
value = parameter.getValue(); |
|
322 |
} else { |
|
323 |
String name = parameter.getName(); |
|
324 |
value = feature.get(name); |
|
325 |
FeatureAttributeDescriptor attr = type.getAttributeDescriptor(name); |
|
326 |
if( attr.getType()==DataTypes.GEOMETRY ) { |
|
327 |
value = forceGeometry(attr.getGeomType(), (Geometry) value); |
|
328 |
} |
|
329 |
} |
|
330 |
values.add(value); |
|
331 |
} |
|
332 |
return sqlbuilder.setStatementParameters(st, values, sqlbuilder.geometry_support_type()); |
|
333 |
} catch (Exception ex) { |
|
334 |
String f = "unknow"; |
|
335 |
try { |
|
336 |
f = feature.toString(); |
|
337 |
} catch (Exception ex2) { |
|
338 |
// Do nothing |
|
339 |
} |
|
340 |
throw new RuntimeException("Can't set parameters to prepared statement from the feature (" + f + ")", ex); |
|
341 |
} |
|
342 |
} |
|
343 |
|
|
344 |
private Geometry forceGeometry(GeometryType geomtype, Geometry geom) throws CreateGeometryException { |
|
345 |
if( geom == null ) { |
|
346 |
return null; |
|
347 |
} |
|
348 |
switch( geomtype.getType() ) { |
|
349 |
case Geometry.TYPES.MULTIPOLYGON: |
|
350 |
if( geom.getType()==Geometry.TYPES.POLYGON ) { |
|
351 |
MultiPolygon x = getGeometryManager().createMultiPolygon(geomtype.getSubType()); |
|
352 |
x.addPrimitive((Primitive) geom); |
|
353 |
geom = x; |
|
354 |
} |
|
355 |
break; |
|
356 |
case Geometry.TYPES.MULTILINE: |
|
357 |
if( geom.getType()==Geometry.TYPES.LINE ) { |
|
358 |
MultiLine x = getGeometryManager().createMultiLine(geomtype.getSubType()); |
|
359 |
x.addPrimitive((Primitive) geom); |
|
360 |
geom = x; |
|
361 |
} |
|
362 |
break; |
|
363 |
case Geometry.TYPES.MULTIPOINT: |
|
364 |
if( geom.getType()==Geometry.TYPES.POINT ) { |
|
365 |
MultiLine x = getGeometryManager().createMultiLine(geomtype.getSubType()); |
|
366 |
x.addPrimitive((Primitive) geom); |
|
367 |
geom = x; |
|
368 |
} |
|
369 |
break; |
|
370 |
case Geometry.TYPES.POLYGON: |
|
371 |
if( geom.getType()==Geometry.TYPES.MULTIPOLYGON ) { |
|
372 |
MultiPolygon x = (MultiPolygon) geom; |
|
373 |
if( x.getPrimitivesNumber()==1 ) { |
|
374 |
geom = x.getPrimitiveAt(0); |
|
375 |
} |
|
376 |
} |
|
377 |
break; |
|
378 |
case Geometry.TYPES.LINE: |
|
379 |
if( geom.getType()==Geometry.TYPES.MULTILINE ) { |
|
380 |
MultiLine x = (MultiLine) geom; |
|
381 |
if( x.getPrimitivesNumber()==1 ) { |
|
382 |
geom = x.getPrimitiveAt(0); |
|
383 |
} |
|
384 |
} |
|
385 |
break; |
|
386 |
case Geometry.TYPES.POINT: |
|
387 |
if( geom.getType()==Geometry.TYPES.MULTIPOINT ) { |
|
388 |
MultiPoint x = (MultiPoint) geom; |
|
389 |
if( x.getPrimitivesNumber()==1 ) { |
|
390 |
geom = x.getPrimitiveAt(0); |
|
391 |
} |
|
392 |
} |
|
393 |
} |
|
394 |
return geom; |
|
395 |
} |
|
396 |
|
|
397 |
|
|
398 | 296 |
} |
Also available in: Unified diff