import org.simantics.Simantics;
import org.simantics.db.ReadGraph;
+import org.simantics.db.RequestProcessor;
import org.simantics.db.Resource;
import org.simantics.db.exception.DatabaseException;
import org.simantics.db.request.Read;
import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
import org.simantics.plant3d.utils.ComponentUtils;
import org.simantics.plant3d.utils.P3DUtil;
+import org.simantics.scl.runtime.SCLContext;
public class SCLUtil {
}
public static P3DScriptNodeMap load(final Resource root) throws DatabaseException {
- preload(Plant3D.URIs.Builtin);
+ return load(getRequestProcessor(), root);
+ }
+
+ public static P3DScriptNodeMap load(RequestProcessor session, final Resource root) throws DatabaseException {
+ preload(Simantics.getSession(), Plant3D.URIs.Builtin);
SchemaProvider schemaProvider = g -> SchemaBuilder.getSchema(g);
NodeMapProvider mapProvider = (mapping, rootNode) -> new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode);
- return load(root, schemaProvider, mapProvider);
+ return load(session, root, schemaProvider, mapProvider);
}
public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException {
- preload(Plant3D.URIs.Builtin);
+ return loadReadOnly(getRequestProcessor(), root);
+ }
+
+ public static P3DRootNode loadReadOnly(RequestProcessor session, final Resource root) throws DatabaseException {
+ preload(session, Plant3D.URIs.Builtin);
SchemaProvider schemaProvider = g -> SchemaBuilder.getSchema(g);
- return loadReadOnly(root, schemaProvider);
+ return loadReadOnly(session, root, schemaProvider);
}
- public static void preload(String symbolSet) throws DatabaseException {
+ public static void preload(RequestProcessor session, String symbolSet) throws DatabaseException {
try {
- ControlPointFactory.preloadCache(symbolSet);
- ComponentUtils.preloadCache();
+ ControlPointFactory.preloadCache(session, symbolSet);
+ ComponentUtils.preloadCache(session);
} catch (Exception e) {
throw new DatabaseException(e);
}
}
public static <NodeMap extends P3DScriptNodeMap> NodeMap load(final Resource root, SchemaProvider schemaProvider, NodeMapProvider mapProvider) throws DatabaseException {
- return Simantics.getSession().syncRequest(new Read<NodeMap>() {
+ return load(getRequestProcessor(), root, schemaProvider, mapProvider);
+ }
+
+ public static <NodeMap extends P3DScriptNodeMap> NodeMap load(RequestProcessor session, final Resource root, SchemaProvider schemaProvider, NodeMapProvider mapProvider) throws DatabaseException {
+ return session.syncRequest(new Read<NodeMap>() {
@Override
public NodeMap perform(ReadGraph graph) throws DatabaseException {
PipingRules.setEnabled(false);
});
}
- public static <Root extends P3DRootNode> Root loadReadOnly(final Resource root, SchemaProvider schemaProvider)
+ public static <Root extends P3DRootNode> Root loadReadOnly(RequestProcessor session, final Resource root, SchemaProvider schemaProvider)
throws DatabaseException {
- return Simantics.getSession().syncRequest(new Read<Root>() {
+ return session.syncRequest(new Read<Root>() {
@Override
public Root perform(ReadGraph graph) throws DatabaseException {
PipingRules.setEnabled(false);
});
}
+ /**
+ * Load a read-only Java object representation of a Plant3d model.
+ *
+ * This method can be called from SCL either as a <Proc> or a <ReadGraph> function.
+ */
+ public static <Root extends P3DRootNode> Root loadReadOnly(final Resource root, SchemaProvider schemaProvider)
+ throws DatabaseException {
+ return loadReadOnly(getRequestProcessor(), root, schemaProvider);
+ }
+
+ public static RequestProcessor getRequestProcessor() {
+ RequestProcessor rp = (RequestProcessor) SCLContext.getCurrent().get("graph");
+ return rp != null ? rp : Simantics.getSession();
+ }
+
}