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;
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();
Path newFile = rootFolder.resolve(fileName);
if (Files.exists(newFile)) {
newFile = findFreshFileName(rootFolder, fileName);
}
byte[] bytes = Base64.decode(base64);
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