package org.simantics.fileimport.scl; import java.io.IOException; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Optional; import org.simantics.Simantics; import org.simantics.databoard.util.Base64; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.UniqueRead; import org.simantics.db.exception.DatabaseException; import org.simantics.db.service.SerialisationSupport; import org.simantics.fileimport.Activator; import org.simantics.fileimport.FileImportService; import org.simantics.fileimport.dropins.FileImportDropins; import org.simantics.layer0.Layer0; import org.simantics.utils.FileUtils; /** * SCL interface for Simantics File Import Functionality * See "Dropins/Core" SCL module for more * * @author Jani Simomaa * */ 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(); byte[] bytes = Base64.decode(base64); FileUtils.writeFile(rootFolder.resolve(fileName).toFile(), bytes); } catch (IOException e) { e.printStackTrace(); } } public static Map getUploadedFiles() throws DatabaseException { Map results = FileImportService.getPathsAndResources(); Map result = Simantics.getSession().syncRequest(new UniqueRead>() { @Override public Map perform(ReadGraph graph) throws DatabaseException { Map map = new HashMap<>(); for (Map.Entry entry : results.entrySet()) { String value = (String) entry.getValue(); Long id = Long.valueOf(value); SerialisationSupport ss = graph.getService(SerialisationSupport.class); try { Resource r = ss.getResource(id); String name = graph.getRelatedValue(r, Layer0.getInstance(graph).HasName); map.put(name, id); } catch (DatabaseException e) { e.printStackTrace(); } } return map; } }); return result; } public static void removeFileForId(long id) { FileImportService.removeFileForResource(id, Optional.empty()); } }