Search in sources :

Example 1 with CommandUpdate

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;
}
Also used : EzyArray(com.tvd12.ezyfox.entity.EzyArray) CommandUpdate(com.tvd12.dahlia.core.command.CommandUpdate)

Example 2 with CommandUpdate

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;
}
Also used : ArrayList(java.util.ArrayList) CollectionStorage(com.tvd12.dahlia.core.storage.CollectionStorage) RecordConsumer(com.tvd12.dahlia.core.function.RecordConsumer) CollectionNotFoundException(com.tvd12.dahlia.exception.CollectionNotFoundException) FieldSetting(com.tvd12.dahlia.core.setting.FieldSetting) CollectionSetting(com.tvd12.dahlia.core.setting.CollectionSetting) EzyPair(com.tvd12.ezyfox.util.EzyPair) EzyArray(com.tvd12.ezyfox.entity.EzyArray) Collection(com.tvd12.dahlia.core.entity.Collection) Record(com.tvd12.dahlia.core.entity.Record) EzyObject(com.tvd12.ezyfox.entity.EzyObject)

Aggregations

EzyArray (com.tvd12.ezyfox.entity.EzyArray)2 CommandUpdate (com.tvd12.dahlia.core.command.CommandUpdate)1 Collection (com.tvd12.dahlia.core.entity.Collection)1 Record (com.tvd12.dahlia.core.entity.Record)1 RecordConsumer (com.tvd12.dahlia.core.function.RecordConsumer)1 CollectionSetting (com.tvd12.dahlia.core.setting.CollectionSetting)1 FieldSetting (com.tvd12.dahlia.core.setting.FieldSetting)1 CollectionStorage (com.tvd12.dahlia.core.storage.CollectionStorage)1 CollectionNotFoundException (com.tvd12.dahlia.exception.CollectionNotFoundException)1 EzyObject (com.tvd12.ezyfox.entity.EzyObject)1 EzyPair (com.tvd12.ezyfox.util.EzyPair)1 ArrayList (java.util.ArrayList)1