From f1b7b6f36968ceb4b5e39cbf26809071cb522abc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ko=C5=BEusznik?= <jan@kozusznik.cz> Date: Fri, 13 Apr 2018 08:47:57 +0200 Subject: [PATCH] feat: basic implementation --- .../haas/data_transfer/FileRepository.java | 57 +++++++++++++ .../haas/data_transfer/Synchronization.java | 84 +++++++++++++++++++ .../fiji/haas/data_transfer/package-info.java | 8 ++ 3 files changed, 149 insertions(+) create mode 100644 haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/FileRepository.java create mode 100644 haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java create mode 100644 haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/package-info.java diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/FileRepository.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/FileRepository.java new file mode 100644 index 00000000..59ed59d8 --- /dev/null +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/FileRepository.java @@ -0,0 +1,57 @@ +package cz.it4i.fiji.haas.data_transfer; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.LinkedHashSet; +import java.util.Set; + +public class FileRepository { + + private Path workingFile; + + private Set<Path> files = new LinkedHashSet<>(); + + public FileRepository(Path workingFile) throws IOException { + this.workingFile = workingFile; + loadFromFile(); + } + + public synchronized void storeToFile() throws IOException { + try(BufferedWriter bw = Files.newBufferedWriter(workingFile)) { + for(Path file: files) { + bw.write(file.toString() + "\n"); + } + } + } + + + public synchronized boolean needsDownload(Path file) { + return files.contains(file); + } + + public synchronized void uploaded(Path p) { + files.add(p); + + } + + + private void loadFromFile() throws IOException { + files.clear(); + try(BufferedReader br = Files.newBufferedReader(workingFile)) { + String line; + while(null != (line = br.readLine())) { + processLine(line); + } + } + } + + + + private void processLine(String line) { + files.add(Paths.get(line)); + } +} diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java new file mode 100644 index 00000000..f227e350 --- /dev/null +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java @@ -0,0 +1,84 @@ +package cz.it4i.fiji.haas.data_transfer; + +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Map; +import java.util.Queue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.function.Supplier; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile; +import cz.it4i.fiji.haas_java_client.HaaSFileTransfer; + +public class Synchronization { + + public static final Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.data_transfer.Synchronization.class); + + private Supplier<HaaSFileTransfer> fileTransferSupplier; + + private Supplier<Iterable<String>> changedFilesSupplier; + + private Map<String,String> propertiesHolder; + + private Path workingDirectory; + + private Queue<Path> toUpload = new LinkedBlockingQueue<>(); + + private ExecutorService service; + + private FileRepository fileRepository; + + + void upload() throws IOException { + try(DirectoryStream<Path> ds = Files.newDirectoryStream(workingDirectory,this::isNotHidden)) { + for (Path file : ds) { + if(needsUpload(file)) { + toUpload.add(file); + service.execute(this::doRun); + } + } + } + } + + private boolean needsUpload(Path file) { + return fileRepository.needsDownload(file); + } + + private boolean isNotHidden(Path file) { + + return !file.getFileName().toString().matches("[.][^.]+"); + } + + private void doRun() { + try(HaaSFileTransfer tr = fileTransferSupplier.get()) { + while (!toUpload.isEmpty()) { + Path p = toUpload.poll(); + UploadingFile uf = createUploadingFile(p); + tr.upload(Arrays.asList(uf)); + fileUploaded(p); + } + } finally { + try { + fileRepository.storeToFile(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + + private void fileUploaded(Path p) { + fileRepository.uploaded(p); + } + + private UploadingFile createUploadingFile(Path p) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/package-info.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/package-info.java new file mode 100644 index 00000000..9532375c --- /dev/null +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/package-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * @author koz01 + * + */ +package cz.it4i.fiji.haas.data_transfer; \ No newline at end of file -- GitLab