use of com.tvd12.dahlia.core.storage.CollectionStorage in project dahlia by youngmonkeys.
the class DahliaCoreLoader method newStorage.
protected Storage newStorage(Map<String, DatabaseStorage> databaseStoreages, Map<String, List<CollectionStorage>> collectionStoragesMap, Map<String, DatabaseSetting> databaseSettings, Map<String, List<CollectionSetting>> collectionSettingsMap) {
Storage storage = Storage.builder().directory(storageDirectory).objectSerializer(objectSerializer).objectDeserializer(objectDeserializer).build();
for (String databaseName : databaseStoreages.keySet()) {
DatabaseStorage databaseStorage = databaseStoreages.get(databaseName);
DatabaseSetting databaseSetting = databaseSettings.get(databaseName);
storage.addDatabaseStorage(databaseSetting.getDatabaseId(), databaseStorage);
}
for (String databaseName : databaseStoreages.keySet()) {
DatabaseStorage databaseStorage = databaseStoreages.get(databaseName);
List<CollectionSetting> collectionSettings = collectionSettingsMap.get(databaseName);
List<CollectionStorage> collectionStorages = collectionStoragesMap.get(databaseName);
for (int i = 0; i < collectionSettings.size(); ++i) {
CollectionSetting collectionSetting = collectionSettings.get(i);
CollectionStorage collectionStorage = collectionStorages.get(i);
databaseStorage.addCollectionStorage(collectionSetting.getCollectionId(), collectionStorage);
storage.addCollectionStorage(collectionSetting.getCollectionId(), collectionStorage);
}
}
return storage;
}
use of com.tvd12.dahlia.core.storage.CollectionStorage in project dahlia by youngmonkeys.
the class DahliaCoreLoader method readCollectionSettings.
protected Map<String, List<CollectionSetting>> readCollectionSettings(Map<String, List<CollectionStorage>> storages) {
Map<String, List<CollectionSetting>> settings = new HashMap<>();
for (String databaseName : storages.keySet()) {
List<CollectionSetting> collectionSettings = new ArrayList<>();
List<CollectionStorage> collectionStorages = storages.get(databaseName);
for (CollectionStorage storage : collectionStorages) {
CollectionSetting setting = storage.readSetting();
collectionSettings.add(setting);
}
settings.put(databaseName, collectionSettings);
}
return settings;
}
use of com.tvd12.dahlia.core.storage.CollectionStorage in project dahlia by youngmonkeys.
the class CommandCreateCollectionHandler method handle.
@Override
public Object handle(CommandCreateCollection command) {
int databaseId = command.getDatabaseId();
CollectionSetting setting = command.getSetting();
String collectionName = setting.getCollectionName();
Database database = databases.getDatabase(databaseId);
if (database == null)
throw new DatabaseNotFoundException(databaseId);
Collection existedCollection = database.getCollection(collectionName);
if (existedCollection != null)
throw new CollectionExistedException(collectionName);
int recordSize = recordSizeReader.read(setting.getAllFields());
setting.setRecordSize(recordSize);
Collection collection = collectionFactory.newCollection(setting);
synchronized (runtimeSetting) {
runtimeSetting.setMaxCollectionId(collection.getId());
storage.storeRuntimeSetting(runtimeSetting);
}
database.addCollection(collection);
databases.addCollection(collection);
CollectionStorage collectionStorage = collectionStorageFactory.newCollectionStorage(collectionName, database.getName());
storage.addCollectionStorage(collection.getId(), collectionStorage);
collectionStorage.storeSetting(setting);
return collection;
}
use of com.tvd12.dahlia.core.storage.CollectionStorage in project dahlia by youngmonkeys.
the class CommandSaveHandler method handle.
@Override
public Object handle(CommandSave command) {
int collectionId = command.getCollectionId();
EzyArray data = command.getData();
Collection collection = databases.getCollection(collectionId);
CollectionSetting setting = collection.getSetting();
FieldSetting sId = setting.getId();
Map<String, FieldSetting> sFields = setting.getFields();
long dataSize = collection.getDataSize();
CollectionStorage collectionStorage = storage.getCollectionStorage(collectionId);
EzyArray answerItems = EzyEntityFactory.newArray();
synchronized (collection) {
for (int i = 0; i < data.size(); ++i) {
EzyObject answerItem = EzyEntityFactory.newObject();
EzyObject item = data.get(i);
Comparable id = item.get(Constants.FIELD_ID);
if (id != null) {
Record existed = collection.findById(id);
if (existed != null)
answerItem.put(Constants.RESULT_FIELD_EXISTED, true);
} else {
while (true) {
id = UUID.randomUUID();
Record existed = collection.findById(id);
if (existed == null)
break;
}
}
Record record = new Record(id, dataSize);
collection.insert(record);
collection.increaseDataSize();
collectionStorage.storeRecord(record, sId, sFields, item);
answerItem.put(Constants.FIELD_ID, id);
answerItems.add(id);
}
}
return answerItems;
}
use of com.tvd12.dahlia.core.storage.CollectionStorage 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