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 0000000000000000000000000000000000000000..59ed59d8c255b624326f12e1068318d03ae22afe --- /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 0000000000000000000000000000000000000000..f227e35010161ed882b35ee01a3d868c4d429583 --- /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 0000000000000000000000000000000000000000..9532375c5a8e6109838cf493d70e85b0fe88b7c2 --- /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