Revision 6483

View differences:

trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/panels/FPanelCreateField.java
209 209
					Integer.parseInt(
210 210
							getJTxtFieldPrecision().getText()));
211 211
		}
212
		else
213
			newField.setFieldDecimalCount(0);
212 214
		String defaultValue = getJTxtDefaultValue().getText(); 
213 215
		if (defaultValue != null)
214 216
		{
215
			newField.setDefaultValue(ValueFactory.createValueByType(defaultValue, fieldType));
217
			
218
			if (defaultValue.compareTo("")==0)
219
				newField.setDefaultValue(ValueFactory.createNullValue());
220
			else
221
				newField.setDefaultValue(ValueFactory.createValueByType(defaultValue, fieldType));
216 222
		}
217 223

  
218 224
		return newField;
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/edition/EditableAdapter.java
66 66
	protected ArrayList listFields = new ArrayList();
67 67

  
68 68
	protected ArrayList listInternalFields = new ArrayList();
69
	
70
	protected boolean bFieldsHasBeenChanged = false;
69 71

  
70 72
	/**
71
	 * La clave ser? el fieldIndex. Para buscar si un value de una row ha de ser
73
	 * La clave ser? el fieldId. Para buscar si un value de una row ha de ser
72 74
	 * rellenado con defaultValue o con lo que venga del expansion file,
73 75
	 * miraremos si existe en este hash. Si existe, usamos el value del
74 76
	 * expansion file. Si no existe, usamos el defaultValue del campo busc?ndolo
75 77
	 * en la lista internalFields. Por cierto, en listInternalFields NO se
76
	 * borran campos. Solo se marcan como borrados.
78
	 * borran campos. Solo se van a?adiendo nuevos actualFields.
77 79
	 */
78
	protected TreeMap actualFields; // la clave ser? el fieldIndex.
80
	protected TreeMap actualFields; // la clave ser? el fieldId.
81
	
82
	protected ArrayList fastAccessFields = new ArrayList();
79 83

  
80 84
	protected class MyFieldManager extends AbstractFieldManager {
81 85

  
......
162 166
		listInternalFields.clear();
163 167
		actualIndexFields = 0;
164 168
		actualFields = new TreeMap();
169
//		fastAccessFields = new ArrayList();
165 170
		for (int i=0; i < fields.length; i++)
166 171
		{
167 172
			InternalField field = new InternalField(fields[i], InternalField.ORIGINAL, new Integer(i));
168 173
			listFields.add(field);
169 174
			// field.setFieldIndex(i);
170 175
			actualFields.put(field.getFieldId(), field);
176
//			fastAccessFields.add(fields[i]);
171 177
			System.out.println("INITIALIZEFIELDS: FIELD " + field.getFieldDesc().getFieldAlias());
172 178
		}
173 179
		try {
174 180
			fieldsChanged();
181
			bFieldsHasBeenChanged = false;
175 182
		} catch (EditionException e) {
176 183
			e.printStackTrace();
177 184
			throw new DriverException(e);
......
179 186
	}
180 187

  
181 188
	private void fieldsChanged() throws EditionException {
182
		// Actualizamos los fieldIndex
183
//		int i=0;
184
//		for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
185
//			InternalField fld = (InternalField) iter.next();
186
//			fld.setFieldIndex(i++);
187
//		}
189
		fastAccessFields= new ArrayList();
190
		for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
191
			InternalField fld = (InternalField) iter.next();
192
			fastAccessFields.add(fld.getFieldDesc());
193
		}
188 194

  
189 195
		listInternalFields.add(actualFields.clone());
190 196
		actualIndexFields = listInternalFields.size()-1;
191 197
		try {
192 198
			ds = null;
193 199
			getRecordset().mapExternalFields();
200
			bFieldsHasBeenChanged = true;
194 201
		} catch (DriverLoadException e) {
195 202
			e.printStackTrace();
196 203
			throw new EditionException(e);
......
967 974
		 * @see com.hardcode.gdbms.engine.data.driver.ReadAccess#getFieldCount()
968 975
		 */
969 976
		public int getFieldCount() throws DriverException {
970
			return actualFields.size();
977
			return fastAccessFields.size();
971 978
		}
972 979

  
973 980
		/*
......
976 983
		 * @see com.hardcode.gdbms.engine.data.driver.ReadAccess#getFieldName(int)
977 984
		 */
978 985
		public String getFieldName(int fieldId) throws DriverException {
979
			int i=0;
980
			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
981
				InternalField fld = (InternalField) iter.next();
982
//				if (fld.getFieldIndex() == fieldId)
986
//			int i=0;
987
//			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
988
//				InternalField fld = (InternalField) iter.next();
989
//				if (i == fieldId)
983 990
//					return fld.getFieldDesc().getFieldAlias();
984
				if (i == fieldId)
985
					return fld.getFieldDesc().getFieldAlias();
986
				i++;
987
				
988
			}
989
			throw new DriverException("FieldId " + fieldId + " not found ");
991
//				i++;
992
//				
993
//			}
994
//			throw new DriverException("FieldId " + fieldId + " not found ");
995
			FieldDescription aux = (FieldDescription) fastAccessFields.get(fieldId);
996
			return aux.getFieldAlias();
990 997
			// return null;
991 998
			// return ods.getFieldName(fieldId);
992 999
		}
......
1015 1022
		 * @see com.hardcode.gdbms.engine.data.driver.ReadAccess#getFieldType(int)
1016 1023
		 */
1017 1024
		public int getFieldType(int fieldId) throws DriverException {
1018
			int i=0;
1019
			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
1020
				InternalField fld = (InternalField) iter.next();
1021
//				if (fld.getFieldIndex() == i)
1025
//			int i=0;
1026
//			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {
1027
//				InternalField fld = (InternalField) iter.next();
1028
//				if (i == fieldId)
1022 1029
//					return fld.getFieldDesc().getFieldType();
1023
				if (i == fieldId)
1024
					return fld.getFieldDesc().getFieldType();
1025
				i++;
1026
				
1027
			}
1030
//				i++;
1031
//				
1032
//			}
1033
			FieldDescription aux = (FieldDescription) fastAccessFields.get(fieldId);
1034
			return aux.getFieldType();
1028 1035
			
1029
			return ods.getFieldType(i);
1036
//			return ods.getFieldType(i);
1030 1037
		}
1031 1038

  
1032 1039
		public int getFieldWidth(int fieldId) throws DriverException {
1033
			int i=0;
1034
			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {				
1035
				InternalField fld = (InternalField) iter.next();
1036
//				if (fld.getFieldIndex() == i)
1040
//			int i=0;
1041
//			for (Iterator iter = actualFields.values().iterator(); iter.hasNext();) {				
1042
//				InternalField fld = (InternalField) iter.next();
1043
////				if (fld.getFieldIndex() == i)
1044
////					return fld.getFieldDesc().getFieldLength();
1045
//				if (i == fieldId)
1037 1046
//					return fld.getFieldDesc().getFieldLength();
1038
				if (i == fieldId)
1039
					return fld.getFieldDesc().getFieldLength();
1040
				i++;
1041
				
1042
			}
1047
//				i++;
1048
//				
1049
//			}
1050
//
1051
//			return ods.getFieldWidth(i);
1052
			FieldDescription aux = (FieldDescription) fastAccessFields.get(fieldId);
1053
			return aux.getFieldLength();
1043 1054

  
1044
			return ods.getFieldWidth(i);
1045 1055
		}
1046 1056

  
1047 1057
		public void reload() throws IOException, DriverException {
......
1314 1324
	 */
1315 1325
	public IRowEdited createExternalRow(IRowEdited edRow,
1316 1326
			int indexInternalFields) {
1327
		
1328
		// para acelerar
1329
		if (bFieldsHasBeenChanged == false)
1330
			return edRow;
1331
		
1317 1332
		Value[] att = edRow.getAttributes();
1318 1333
		TreeMap ancientFields = (TreeMap) listInternalFields
1319 1334
				.get(indexInternalFields);
......
1334 1349
			// antiguos. Por eso no nos preocupamos de mantener actuallizados
1335 1350
			// el resto de campos cuando se borra o a?ade un nuevo campo.
1336 1351
			InternalField fld = (InternalField) it.next();
1337
			System.err.println("fld = " + fld.getFieldDesc().getFieldAlias() +  " id=" + fld.getFieldId());
1352
			// System.err.println("fld = " + fld.getFieldDesc().getFieldAlias() +  " id=" + fld.getFieldId());
1338 1353
			if (ancientFields.containsKey(fld.getFieldId())) {
1339 1354
				InternalField ancientField = (InternalField) ancientFields
1340 1355
						.get(fld.getFieldId());
1341 1356
				// val = att[ancientField.getFieldIndex()];
1342 1357
				val = att[ancientField.getFieldId().intValue()];
1343
				System.out.println("fld: " + fld.getFieldDesc().getFieldAlias() + " ancient:" + " val" + val);
1358
				// System.out.println("fld: " + fld.getFieldDesc().getFieldAlias() + " ancient:" + " val" + val);
1344 1359
			} else
1345 1360
				val = fld.getFieldDesc().getDefaultValue();
1346 1361
			newAtt[i++] = val;
trunk/libraries/libFMap/src/com/iver/cit/gvsig/fmap/layers/SelectableDataSource.java
541 541
			fieldsDescrip[i].setFieldType(type);
542 542
			fieldsDescrip[i].setFieldName(getFieldName(i));
543 543
			fieldsDescrip[i].setFieldLength(getFieldWidth(i));
544
			if (NumberUtilities.isNumericInteger(type))
544
			if (NumberUtilities.isNumeric(type))
545
			{
546
				if (!NumberUtilities.isNumericInteger(type))
547
					// TODO: If there is a lost in precision, this should be changed.
548
					fieldsDescrip[i].setFieldDecimalCount(6);
549
			}
550
			else
545 551
				fieldsDescrip[i].setFieldDecimalCount(0);
546
			else
547
				// TODO: If there is a lost in precision, this should be changed.
548
				fieldsDescrip[i].setFieldDecimalCount(6);
549 552
		}
550 553
		return fieldsDescrip;
551 554
	}
trunk/extensions/extCAD/src/com/iver/cit/gvsig/StopEditing.java
12 12
import com.iver.cit.gvsig.fmap.DriverException;
13 13
import com.iver.cit.gvsig.fmap.FMap;
14 14
import com.iver.cit.gvsig.fmap.MapControl;
15
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
15 16
import com.iver.cit.gvsig.fmap.drivers.ILayerDefinition;
16 17
import com.iver.cit.gvsig.fmap.drivers.shp.IndexedShpDriver;
17 18
import com.iver.cit.gvsig.fmap.edition.EditionEvent;
......
185 186
				}
186 187
			}
187 188
		}
189
		vea.cleanSelectableDatasource();
190
		layer.setRecordset(vea.getRecordset()); // Queremos que el recordset del layer 
191
		// refleje los cambios en los campos.
188 192
		ILayerDefinition lyrDef = EditionUtilities.createLayerDefinition(layer);
193
		String aux="FIELDS:";
194
		FieldDescription[] flds = lyrDef.getFieldsDesc(); 
195
		for (int i=0; i < flds.length; i++)
196
		{
197
			aux = aux + ", " + flds[i].getFieldAlias(); 
198
		}
199
		System.err.println("Escribiendo la capa " + lyrDef.getName() + 
200
				" con los campos " + aux);
189 201
		writer.initialize(lyrDef);
190 202
		vea.stopEdition(writer, EditionEvent.GRAPHIC);
191 203

  

Also available in: Unified diff