@Override public DataAndStoredMetadata<R,S> getCurrentFactory() { StoredDataMetadata<S> storedDataMetadata = dataSerialisationManager.readStoredFactoryMetadata(readFile(currentFactoryPathMetadata)); return new DataAndStoredMetadata<>(dataSerialisationManager.read(readFile(currentFactoryPath), storedDataMetadata.dataModelVersion), storedDataMetadata); }
public void updateHistory(StoredDataMetadata<S> metadata, R factoryRoot) { String id=metadata.id; writeFile(Paths.get(historyDirectory.toString()+"/"+id+".json"), dataSerialisationManager.write(factoryRoot)); writeFile(Paths.get(historyDirectory.toString()+"/"+id+"_metadata.json"), dataSerialisationManager.writeStorageMetadata(metadata)); cache.put(id,metadata); }
@Override public String getCurrentFactoryStorageId() { StoredDataMetadata<S> storedDataMetadata = dataSerialisationManager.readStoredFactoryMetadata(readFile(currentFactoryPathMetadata)); return storedDataMetadata.id; }
public R getHistoryFactory(String id) { int dataModelVersion=-99999; for(StoredDataMetadata metaData: getHistoryFactoryList()){ if (metaData.id.equals(id)){ dataModelVersion=metaData.dataModelVersion; } } if (dataModelVersion==-99999) { throw new IllegalStateException("cant find id: "+id+" in history"); } return dataSerialisationManager.read(readFile(Paths.get(historyDirectory.toString()+id+".json")),dataModelVersion); }
@Override public DataAndNewMetadata<R> prepareNewFactory(String currentFactoryStorageId, R currentFactoryCopy){ NewDataMetadata metadata = new NewDataMetadata(); metadata.baseVersionId=currentFactoryStorageId; dataSerialisationManager.prepareNewFactoryMetadata(metadata); return new DataAndNewMetadata<>(currentFactoryCopy,metadata); }
/** * Microservice with filesystem data storage * @param rootFactory factory root * @param path filesystem path to store * @param <V> Visitor * @param <L> root liveobject * @param <R> Root * @param <S> Summary * @return microservice */ @SuppressWarnings("unchecked") public static <V,L,R extends FactoryBase<L,V,R>,S> Microservice<V,L,R,S> buildFilesystemMicroservice(R rootFactory, Path path){ Class<R> rootClass = (Class<R>) rootFactory.getClass(); DataSerialisationManager<R,S> defaultSerialisationManager = new DataSerialisationManager<>(new JacksonSerialisation<>(1),new JacksonDeSerialisation<>(rootClass,1),new ArrayList<>(),1); return new Microservice<>(new FactoryManager<>(new LoggingFactoryExceptionHandler(new ResettingHandler())), new FileSystemDataStorage<>(path, rootFactory,defaultSerialisationManager)); }
public void initFromFileSystem(){ try { try (Stream<Path> files = Files.walk(historyDirectory).filter(Files::isRegularFile)){ files.forEach(path -> { if (path.toString().endsWith("_metadata.json")){ StoredDataMetadata<S> storedDataMetadata = dataSerialisationManager.readStoredFactoryMetadata(readFile(path)); cache.put(storedDataMetadata.id, storedDataMetadata); } }); } } catch (IOException e) { throw new RuntimeException(e); } }
@Override public void updateCurrentFactory(DataAndNewMetadata<R> update, String user, String comment, MergeDiffInfo<R> mergeDiff) { S changeSummary = null; if (mergeDiff!=null){ changeSummary=changeSummaryCreator.createChangeSummary(mergeDiff); } final StoredDataMetadata<S> storedDataMetadata = new StoredDataMetadata<>( LocalDateTime.now(), UUID.randomUUID().toString(), user, comment, update.metadata.baseVersionId, update.metadata.dataModelVersion, changeSummary ); final DataAndStoredMetadata<R,S> updateData = new DataAndStoredMetadata<>(update.root, storedDataMetadata); writeFile(currentFactoryPath, dataSerialisationManager.write(updateData.root)); writeFile(currentFactoryPathMetadata, dataSerialisationManager.writeStorageMetadata(updateData.metadata)); fileSystemFactoryStorageHistory.updateHistory(updateData.metadata,updateData.root); }