package org.simantics.r; import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.WriteResultRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.Configuration; import org.simantics.modeling.ModelingUtils; public class RModelUtils { private static Resource createModel(WriteGraph graph, Resource type, Resource target, String name, String sclMainContents) throws DatabaseException { Resource model = ModelingUtils.createModel(graph, type, target, name); @SuppressWarnings("unused") Resource conf = graph.syncRequest(new Configuration(model)); ModelingUtils.addSCLMainToModel(graph, model, "SCLMain", sclMainContents); ModelingUtils.createLocalLibrary(graph, model, "Library"); return model; } public static Resource createRModel(final Resource target, final Path file) { StringBuilder sb = new StringBuilder(); try (BufferedReader reader = Files.newBufferedReader(file)) { String newLine = null; while ((newLine = reader.readLine()) != null) { sb.append(newLine).append("\n"); } } catch (IOException e) { e.printStackTrace(); } final String sclMainContents = sb.toString(); if (!sclMainContents.isEmpty()) { try { return Simantics.sync(new WriteResultRequest() { @Override public Resource perform(WriteGraph graph) throws DatabaseException { RResource R = RResource.getInstance(graph); String fileName = file.getFileName().toString(); String[] parts = fileName.split("/"); String modelName = parts[parts.length - 1]; Resource model = createModel(graph, R.Model, target, modelName, sclMainContents); return model; } }); } catch (DatabaseException e) { e.printStackTrace(); } } return null; } }