X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.plant3d%2Fsrc%2Forg%2Fsimantics%2Fplant3d%2Fscl%2FSCLUtil.java;h=6b1947d43e802e2b1a5609987e4b727cfd9ab454;hb=refs%2Fchanges%2F03%2F3903%2F1;hp=e892106d08bd891ba88fdd1e5146dc7f3abf880e;hpb=6b8eeb91e8be84c9999ecc390009c6ef8c3e7100;p=simantics%2F3d.git diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java b/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java index e892106d..6b1947d4 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java @@ -2,6 +2,7 @@ package org.simantics.plant3d.scl; 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; @@ -16,6 +17,7 @@ import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory; 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 { @@ -28,31 +30,43 @@ 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 load(final Resource root, SchemaProvider schemaProvider, NodeMapProvider mapProvider) throws DatabaseException { - return Simantics.getSession().syncRequest(new Read() { + return load(getRequestProcessor(), root, schemaProvider, mapProvider); + } + + public static NodeMap load(RequestProcessor session, final Resource root, SchemaProvider schemaProvider, NodeMapProvider mapProvider) throws DatabaseException { + return session.syncRequest(new Read() { @Override public NodeMap perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); @@ -75,9 +89,9 @@ public class SCLUtil { }); } - public static Root loadReadOnly(final Resource root, SchemaProvider schemaProvider) + public static Root loadReadOnly(RequestProcessor session, final Resource root, SchemaProvider schemaProvider) throws DatabaseException { - return Simantics.getSession().syncRequest(new Read() { + return session.syncRequest(new Read() { @Override public Root perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); @@ -98,4 +112,19 @@ public class SCLUtil { }); } + /** + * 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 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(); + } + }