Revision 25239 trunk/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java
PostGisDriver.java | ||
---|---|---|
73 | 73 |
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition; |
74 | 74 |
import com.iver.cit.gvsig.fmap.drivers.DefaultJDBCDriver; |
75 | 75 |
import com.iver.cit.gvsig.fmap.drivers.DriverAttributes; |
76 |
import com.iver.cit.gvsig.fmap.drivers.FieldDescription; |
|
76 | 77 |
import com.iver.cit.gvsig.fmap.drivers.IConnection; |
77 | 78 |
import com.iver.cit.gvsig.fmap.drivers.IFeatureIterator; |
78 | 79 |
import com.iver.cit.gvsig.fmap.drivers.WKBParser2; |
... | ... | |
322 | 323 |
*/ |
323 | 324 |
public IFeatureIterator getFeatureIterator(String sql) throws ReadDriverException { |
324 | 325 |
PostGisFeatureIterator geomIterator = null; |
326 |
geomIterator = myGetFeatureIterator(sql); |
|
327 |
geomIterator.setLyrDef(getLyrDef()); |
|
328 |
|
|
329 |
return geomIterator; |
|
330 |
} |
|
331 |
|
|
332 |
private PostGisFeatureIterator myGetFeatureIterator(String sql) throws ReadDriverException { |
|
333 |
PostGisFeatureIterator geomIterator = null; |
|
325 | 334 |
try { |
326 | 335 |
// st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, |
327 | 336 |
// ResultSet.CONCUR_READ_ONLY); |
328 | 337 |
|
329 | 338 |
|
339 |
// st = conn.createStatement |
|
330 | 340 |
if (provCursorName != null) { |
331 | 341 |
/* st.execute("BEGIN"); |
332 | 342 |
st.execute("CLOSE " + provCursorName); |
... | ... | |
341 | 351 |
bCursorActivo = true; |
342 | 352 |
// ResultSet rs = st.executeQuery(sql); |
343 | 353 |
geomIterator = new PostGisFeatureIterator(((ConnectionJDBC)conn).getConnection(), provCursorName, sql); |
344 |
geomIterator.setLyrDef(getLyrDef()); |
|
345 | 354 |
} catch (SQLException e) { |
346 | 355 |
// e.printStackTrace(); |
347 | 356 |
// e.printStackTrace(); |
... | ... | |
787 | 796 |
public IFeatureIterator getFeatureIterator(Rectangle2D r, String strEPSG, |
788 | 797 |
String[] alphaNumericFieldsNeeded) throws ReadDriverException { |
789 | 798 |
String sqlAux = null; |
799 |
DBLayerDefinition lyrDef = getLyrDef(); |
|
800 |
DBLayerDefinition clonedLyrDef = cloneLyrDef(lyrDef); |
|
801 |
ArrayList<FieldDescription> myFieldsDesc = new ArrayList<FieldDescription>(); // = new FieldDescription[alphaNumericFieldsNeeded.length+1]; |
|
790 | 802 |
try { |
791 | 803 |
if (workingArea != null) |
792 | 804 |
r = r.createIntersection(workingArea); |
... | ... | |
794 | 806 |
// load(); |
795 | 807 |
// throw new DriverException("Fallo de la conexi?n"); |
796 | 808 |
// } |
797 |
String strAux = getGeometryField(getLyrDef().getFieldGeometry());
|
|
809 |
String strAux = getGeometryField(lyrDef.getFieldGeometry());
|
|
798 | 810 |
|
799 | 811 |
boolean found = false; |
800 | 812 |
if (alphaNumericFieldsNeeded != null) { |
801 | 813 |
for (int i = 0; i < alphaNumericFieldsNeeded.length; i++) { |
802 | 814 |
strAux = strAux + ", " + alphaNumericFieldsNeeded[i]; |
803 |
if (alphaNumericFieldsNeeded[i].equals(getLyrDef() |
|
804 |
.getFieldID())) |
|
815 |
if (alphaNumericFieldsNeeded[i].equals(lyrDef.getFieldID())){ |
|
805 | 816 |
found = true; |
817 |
clonedLyrDef.setIdFieldID(i); |
|
818 |
} |
|
819 |
|
|
820 |
FieldDescription[] fieldsDesc = lyrDef.getFieldsDesc(); |
|
821 |
for (int j =0; j < fieldsDesc.length; j++){ |
|
822 |
if (fieldsDesc[j].getFieldName().equals(alphaNumericFieldsNeeded[i])){ |
|
823 |
myFieldsDesc.add(fieldsDesc[j]); |
|
824 |
} |
|
825 |
} |
|
806 | 826 |
} |
807 | 827 |
} |
808 | 828 |
// Nos aseguramos de pedir siempre el campo ID |
809 |
if (found == false) |
|
810 |
strAux = strAux + ", " + getLyrDef().getFieldID(); |
|
829 |
if (found == false){ |
|
830 |
strAux = strAux + ", " + lyrDef.getFieldID(); |
|
831 |
myFieldsDesc.add(lyrDef.getFieldsDesc()[lyrDef.getIdField( |
|
832 |
lyrDef.getFieldID())]); |
|
833 |
clonedLyrDef.setIdFieldID(myFieldsDesc.size()-1); |
|
834 |
} |
|
835 |
clonedLyrDef.setFieldsDesc( (FieldDescription[])myFieldsDesc.toArray(new FieldDescription[]{}) ); |
|
811 | 836 |
|
812 | 837 |
String sqlProv = "SELECT " + strAux + " FROM " |
813 |
+ getLyrDef().getComposedTableName() + " ";
|
|
838 |
+ lyrDef.getComposedTableName() + " ";
|
|
814 | 839 |
// + getLyrDef().getWhereClause(); |
815 | 840 |
|
816 |
|
|
817 | 841 |
if (canReproject(strEPSG)) { |
818 | 842 |
sqlAux = sqlProv + getCompoundWhere(sqlProv, r, strEPSG); |
819 | 843 |
} else { |
... | ... | |
821 | 845 |
} |
822 | 846 |
|
823 | 847 |
System.out.println("SqlAux getFeatureIterator = " + sqlAux); |
824 |
|
|
825 |
return getFeatureIterator(sqlAux); |
|
848 |
PostGisFeatureIterator geomIterator = null; |
|
849 |
geomIterator = myGetFeatureIterator(sqlAux); |
|
850 |
geomIterator.setLyrDef(clonedLyrDef); |
|
851 |
return geomIterator; |
|
826 | 852 |
} catch (Exception e) { |
827 | 853 |
// e.printStackTrace(); |
828 | 854 |
// SqlDriveExceptionType type = new SqlDriveExceptionType(); |
... | ... | |
936 | 962 |
// } |
937 | 963 |
// } |
938 | 964 |
|
965 |
private DBLayerDefinition cloneLyrDef(DBLayerDefinition lyrDef){ |
|
966 |
DBLayerDefinition clonedLyrDef = new DBLayerDefinition(); |
|
967 |
|
|
968 |
clonedLyrDef.setName(lyrDef.getName()); |
|
969 |
clonedLyrDef.setFieldsDesc(lyrDef.getFieldsDesc()); |
|
970 |
|
|
971 |
clonedLyrDef.setShapeType(lyrDef.getShapeType()); |
|
972 |
clonedLyrDef.setProjection(lyrDef.getProjection()); |
|
973 |
|
|
974 |
clonedLyrDef.setConnection(lyrDef.getConnection()); |
|
975 |
clonedLyrDef.setCatalogName(lyrDef.getCatalogName()); |
|
976 |
clonedLyrDef.setSchema(lyrDef.getSchema()); |
|
977 |
clonedLyrDef.setTableName(lyrDef.getTableName()); |
|
978 |
|
|
979 |
clonedLyrDef.setFieldID(lyrDef.getFieldID()); |
|
980 |
clonedLyrDef.setFieldGeometry(lyrDef.getFieldGeometry()); |
|
981 |
clonedLyrDef.setWhereClause(lyrDef.getWhereClause()); |
|
982 |
clonedLyrDef.setWorkingArea(lyrDef.getWorkingArea()); |
|
983 |
clonedLyrDef.setSRID_EPSG(lyrDef.getSRID_EPSG()); |
|
984 |
clonedLyrDef.setClassToInstantiate(lyrDef.getClassToInstantiate()); |
|
985 |
|
|
986 |
clonedLyrDef.setIdFieldID(lyrDef.getIdFieldID()); |
|
987 |
clonedLyrDef.setDimension(lyrDef.getDimension()); |
|
988 |
clonedLyrDef.setHost(lyrDef.getHost()); |
|
989 |
clonedLyrDef.setPort(lyrDef.getPort()); |
|
990 |
clonedLyrDef.setDataBase(lyrDef.getDataBase()); |
|
991 |
clonedLyrDef.setUser(lyrDef.getUser()); |
|
992 |
clonedLyrDef.setPassword(lyrDef.getPassword()); |
|
993 |
clonedLyrDef.setConnectionName(lyrDef.getConnectionName()); |
|
994 |
return clonedLyrDef; |
|
995 |
} |
|
996 |
|
|
939 | 997 |
} |
Also available in: Unified diff