private void insertInIndex(Value[] values, int rowIndex) throws DriverException { if (indexEditionManager != null) { try { for (DataSourceIndex index : indexEditionManager.getDataSourceIndexes()) { Metadata metadata = getMetadata(); String[] idxFields = index.getFieldNames(); if (idxFields.length == 1) { for (int i = 0; i < metadata.getFieldCount(); i++) { if (metadata.getFieldName(i).equals(idxFields[0])) { index.insertRow(values[i], rowIndex); } } } else { Value[] toInsert = new Value[idxFields.length]; for (int i = 0; i < metadata.getFieldCount(); i++) { for (int j = 0; j < idxFields.length; j++) { if (metadata.getFieldName(i).equals(idxFields[j])) { toInsert[j] = values[i]; } } index.insertRow(ValueFactory.createValue(values), rowIndex); } } } } catch (IndexException e) { throw new DriverException("Cannot update index", e); } } }
private void setFieldValueInIndex(int rowIndex, int fieldId, Value oldValue, Value value) throws DriverException { if (indexEditionManager != null) { try { for (DataSourceIndex index : indexEditionManager.getDataSourceIndexes()) { String[] idxFields = index.getFieldNames(); if (idxFields.length == 1) { if (idxFields[0].equals(getMetadata().getFieldName(fieldId))) { index.setFieldValue(oldValue, value, rowIndex); } } else { Value[] oldSet = new Value[idxFields.length]; Value[] newSet = new Value[idxFields.length]; String fieldName = getFieldName(fieldId); for (int i = 0; i < idxFields.length; i++) { if (idxFields[i].equals(fieldName)) { oldSet[i] = oldValue; newSet[i] = value; } else { oldSet[i] = getFieldValue(rowIndex, getFieldIndexByName(idxFields[i])); newSet[i] = oldSet[i]; } } index.setFieldValue( ValueFactory.createValue(oldSet), ValueFactory.createValue(newSet), rowIndex); } } } catch (IndexException e) { throw new DriverException(e); } } }
private void deleteInIndex(int rowIndex) throws DriverException { if (indexEditionManager != null) { try { for (DataSourceIndex index : indexEditionManager.getDataSourceIndexes()) { Metadata metadata = getMetadata(); String[] idxFields = index.getFieldNames(); if (idxFields.length == 1) { for (int i = 0; i < metadata.getFieldCount(); i++) { if (metadata.getFieldName(i).equals(idxFields[0])) { Value v = getFieldValue(rowIndex, i); index.deleteRow(v, rowIndex); } } } else { Value[] toInsert = new Value[idxFields.length]; for (int i = 0; i < metadata.getFieldCount(); i++) { for (int j = 0; j < idxFields.length; j++) { if (metadata.getFieldName(i).equals(idxFields[j])) { toInsert[j] = getFieldValue(rowIndex, i); } } index.deleteRow(ValueFactory.createValue(toInsert), rowIndex); } } } } catch (IndexException e) { throw new DriverException(e); } } }