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;
|