use of com.tvd12.dahlia.core.command.CommandUpdate in project dahlia by youngmonkeys.
the class LocalCollection method update.
@Override
public EzyArray update(EzyObject query, EzyObject update) {
CommandUpdate command = new CommandUpdate(store.getId(), query, update);
EzyArray result = commandExecutor.execute(command);
return result;
}
use of com.tvd12.dahlia.core.command.CommandUpdate in project dahlia by youngmonkeys.
the class CommandUpdateHandler method handle.
@Override
public Object handle(CommandUpdate command) {
int collectionId = command.getCollectionId();
Collection collection = databases.getCollection(collectionId);
if (collection == null)
throw new CollectionNotFoundException(collectionId);
EzyObject query = command.getQuery();
Predicate<EzyObject> predicate = queryToPredicate.toPredicate(query);
CollectionSetting setting = collection.getSetting();
CollectionStorage collectionStorage = storage.getCollectionStorage(collectionId);
FieldSetting sId = setting.getId();
Map<String, FieldSetting> sFields = setting.getFields();
EzyObject update = command.getUpdate();
List<EzyPair<Record, EzyObject>> updateItems = new ArrayList<>();
synchronized (collection) {
collection.forEach(new RecordConsumer() {
@Override
public void accept(Record r) {
EzyObject value = collectionStorage.readRecord(r, sId, sFields);
boolean accepted = predicate.test(value);
if (accepted)
updateItems.add(new EzyPair<>(r, value));
}
});
for (EzyPair<Record, EzyObject> pair : updateItems) {
Record record = pair.getKey();
EzyObject updateItem = pair.getValue();
updateItem(updateItem, update);
collectionStorage.storeRecord(record, sId, sFields, updateItem);
}
}
EzyArray answer = EzyEntityFactory.newArray();
for (EzyPair<Record, EzyObject> pair : updateItems) {
EzyObject answerItem = EzyEntityFactory.newObject();
EzyObject updateItem = pair.getValue();
answerItem.put(Constants.FIELD_ID, updateItem.get(Constants.FIELD_ID));
}
return answer;
}
Aggregations