Revision 25239 trunk/extensions/extJDBC/src/com/iver/cit/gvsig/fmap/drivers/jdbc/postgis/PostGisDriver.java

View differences:

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