}
public ODocument getIndexChanges() {
final StringBuilder value = new StringBuilder();
final ODocument result = new ODocument();
for (Entry<String, OTransactionIndexChanges> indexEntry : indexEntries.entrySet()) {
final ODocument indexDoc = new ODocument();
result.field(indexEntry.getKey(), indexDoc);
if (indexEntry.getValue().cleared)
indexDoc.field("clear", Boolean.TRUE);
final List<ODocument> entries = new ArrayList<ODocument>();
indexDoc.field("entries", entries);
// STORE INDEX ENTRIES
for (OTransactionIndexChangesPerKey entry : indexEntry.getValue().changesPerKey.values()) {
// SERIALIZE KEY
value.setLength(0);
if (entry.key != null)
ORecordSerializerStringAbstract.fieldTypeToString(value, null, OType.getTypeByClass(entry.key.getClass()), entry.key);
else
value.append('*');
String key = value.toString();
final List<ODocument> operations = new ArrayList<ODocument>();
// SERIALIZE VALUES
if (entry.entries != null && !entry.entries.isEmpty()) {
for (OTransactionIndexEntry e : entry.entries) {
final ODocument changeDoc = new ODocument();
// SERIALIZE OPERATION
changeDoc.field("o", e.operation.ordinal());
if (e.value instanceof ORecord<?> && e.value.getIdentity().isNew())
((ORecord<?>) e.value).save();
changeDoc.field("v", e.value.getIdentity());
operations.add(changeDoc);
}
}
entries.add(new ODocument().field("k", OStringSerializerHelper.encode(key)).field("ops", operations));
}
}
indexEntries.clear();