1 package org.simantics.fileimport.scl;
3 import java.io.IOException;
4 import java.nio.file.DirectoryStream;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.util.HashMap;
8 import java.util.Iterator;
10 import java.util.Optional;
12 import org.simantics.Simantics;
13 import org.simantics.databoard.util.Base64;
14 import org.simantics.db.ReadGraph;
15 import org.simantics.db.Resource;
16 import org.simantics.db.common.request.UniqueRead;
17 import org.simantics.db.exception.DatabaseException;
18 import org.simantics.db.service.SerialisationSupport;
19 import org.simantics.fileimport.Activator;
20 import org.simantics.fileimport.FileImportService;
21 import org.simantics.fileimport.dropins.FileImportDropins;
22 import org.simantics.layer0.Layer0;
23 import org.simantics.utils.FileUtils;
26 * SCL interface for Simantics File Import Functionality
27 * See <code>"Dropins/Core"</code> SCL module for more
29 * @author Jani Simomaa
32 public class DropinsSCL {
34 public static void watchDropinsFolder() {
35 FileImportDropins.watchDropinsFolder();
38 public static void unwatchDropinsFolder() {
39 FileImportDropins.unwatchDropinsFolder();
42 public static void uploadToDropinsBase64(String base64, String fileName) {
43 // ensure that watcher is awake
44 FileImportDropins.watchDropinsFolder();
46 Path rootFolder = Activator.getDropinsFolder();
47 Path newFile = rootFolder.resolve(fileName);
48 if (Files.exists(newFile)) {
49 newFile = findFreshFileName(rootFolder, fileName);
51 byte[] bytes = Base64.decode(base64);
52 FileUtils.writeFile(newFile.toFile(), bytes);
53 } catch (IOException e) {
58 private static Path findFreshFileName(Path root, String fileName) throws IOException {
59 int ending = fileName.lastIndexOf('.');
60 String glob = fileName;
63 glob = fileName.substring(0, ending);
64 suffix = fileName.substring(ending);
67 try (DirectoryStream<Path> stream = Files.newDirectoryStream(root, glob)) {
68 Iterator<Path> iter = stream.iterator();
69 while (iter.hasNext()) {
74 String newFileName = glob + "_" + i + suffix;
75 return root.resolve(newFileName);
78 public static Map<String, Long> getUploadedFiles() throws DatabaseException {
79 Map<String, String> results = FileImportService.getPathsAndResources();
80 Map<String, Long> result = Simantics.getSession().syncRequest(new UniqueRead<Map<String, Long>>() {
83 public Map<String, Long> perform(ReadGraph graph) throws DatabaseException {
84 Map<String, Long> map = new HashMap<>();
85 for (Map.Entry<String, String> entry : results.entrySet()) {
86 String value = (String) entry.getValue();
87 Long id = Long.valueOf(value);
88 SerialisationSupport ss = graph.getService(SerialisationSupport.class);
90 Resource r = ss.getResource(id);
91 String name = graph.getRelatedValue(r, Layer0.getInstance(graph).HasName);
93 } catch (DatabaseException e) {
103 public static void removeFileForId(long id) {
104 FileImportService.removeFileForResource(id, Optional.empty());