public FileSystemDataStorage(Path basePath, R defaultFactory, DataSerialisationManager<R,S> dataSerialisationManager, ChangeSummaryCreator<R,S> changeSummaryCreator){ this(basePath,defaultFactory, dataSerialisationManager,new FileSystemFactoryStorageHistory<>(basePath, dataSerialisationManager),changeSummaryCreator); }
@Override public R getHistoryFactory(String id) { return fileSystemFactoryStorageHistory.getHistoryFactory(id); }
@Override public Collection<StoredDataMetadata<S>> getHistoryFactoryList() { return fileSystemFactoryStorageHistory.getHistoryFactoryList(); }
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); }
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); }
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 loadInitialFactory() { fileSystemFactoryStorageHistory.initFromFileSystem(); if (!Files.exists(currentFactoryPath)){ NewDataMetadata metadata = new NewDataMetadata(); metadata.baseVersionId= UUID.randomUUID().toString(); DataAndNewMetadata<R> initialFactoryAndStorageMetadata = new DataAndNewMetadata<>(initialFactory,metadata); updateCurrentFactory(initialFactoryAndStorageMetadata,"System","initial factory",null); } }
@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); }
public FileSystemDataStorage(Path basePath, R defaultFactory, DataSerialisationManager<R,S> dataSerialisationManager){ this(basePath,defaultFactory, dataSerialisationManager,new FileSystemFactoryStorageHistory<>(basePath, dataSerialisationManager),(d)->null); }