X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.fileimport%2Fsrc%2Forg%2Fsimantics%2Ffileimport%2Fscl%2FDropinsSCL.java;h=d3fa3d0f9b6b14302e37ee4bef804d174a57e06e;hp=cad45187721a8caef5345cea807c426d4a9c9f1a;hb=8e4e41fa135641b23f68e205832e0696951c5f63;hpb=7a7c389f2ffddb4e4170098e4f5facca1fa8b633 diff --git a/bundles/org.simantics.fileimport/src/org/simantics/fileimport/scl/DropinsSCL.java b/bundles/org.simantics.fileimport/src/org/simantics/fileimport/scl/DropinsSCL.java index cad451877..d3fa3d0f9 100644 --- a/bundles/org.simantics.fileimport/src/org/simantics/fileimport/scl/DropinsSCL.java +++ b/bundles/org.simantics.fileimport/src/org/simantics/fileimport/scl/DropinsSCL.java @@ -1,8 +1,11 @@ package org.simantics.fileimport.scl; import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; import java.util.Optional; @@ -31,24 +34,47 @@ public class DropinsSCL { public static void watchDropinsFolder() { FileImportDropins.watchDropinsFolder(); } - + public static void unwatchDropinsFolder() { FileImportDropins.unwatchDropinsFolder(); } - + public static void uploadToDropinsBase64(String base64, String fileName) { // ensure that watcher is awake FileImportDropins.watchDropinsFolder(); try { Path rootFolder = Activator.getDropinsFolder(); + Path newFile = rootFolder.resolve(fileName); + if (Files.exists(newFile)) { + newFile = findFreshFileName(rootFolder, fileName); + } byte[] bytes = Base64.decode(base64); - FileUtils.writeFile(rootFolder.resolve(fileName).toFile(), bytes); - + FileUtils.writeFile(newFile.toFile(), bytes); } catch (IOException e) { e.printStackTrace(); } } - + + private static Path findFreshFileName(Path root, String fileName) throws IOException { + int ending = fileName.lastIndexOf('.'); + String glob = fileName; + String suffix = ""; + if (ending > -1) { + glob = fileName.substring(0, ending); + suffix = fileName.substring(ending); + } + int i = 0; + try (DirectoryStream stream = Files.newDirectoryStream(root, glob)) { + Iterator iter = stream.iterator(); + while (iter.hasNext()) { + iter.next(); + i++; + } + } + String newFileName = glob + "_" + i + suffix; + return root.resolve(newFileName); + } + public static Map getUploadedFiles() throws DatabaseException { Map results = FileImportService.getPathsAndResources(); Map result = Simantics.getSession().syncRequest(new UniqueRead>() { @@ -73,9 +99,9 @@ public class DropinsSCL { }); return result; } - + public static void removeFileForId(long id) { FileImportService.removeFileForResource(id, Optional.empty()); } - + }