From 5750b207d04063d1b2f0128eb5296d22ffec302e Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Wed, 30 Oct 2019 15:53:09 +0200 Subject: [PATCH] Refactoring of SCLUtil to allow customization Change-Id: Ic491c6424b96c53da35ac61fb1ace9239047bb3b --- .../org/simantics/plant3d/scl/SCLUtil.java | 64 ++++++++++++------- 1 file changed, 42 insertions(+), 22 deletions(-) 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 10708030..cdbf6626 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java @@ -1,6 +1,5 @@ package org.simantics.plant3d.scl; - import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; @@ -18,21 +17,47 @@ import org.simantics.plant3d.utils.ComponentUtils; import org.simantics.plant3d.utils.P3DUtil; public class SCLUtil { + + public static interface SchemaProvider { + IMappingSchema get(ReadGraph graph) throws DatabaseException; + } + + public static interface NodeMapProvider { + P3DScriptNodeMap get(IMapping mapping, P3DRootNode rootNode); + } public static P3DScriptNodeMap load(final Resource root) throws DatabaseException { + preload(Plant3D.URIs.Builtin); + + SchemaProvider schemaProvider = g -> SchemaBuilder.getSchema(g); + NodeMapProvider mapProvider = (mapping, rootNode) -> new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode); + return load(root, schemaProvider, mapProvider); + } + + public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException { + preload(Plant3D.URIs.Builtin); + + SchemaProvider schemaProvider = g -> SchemaBuilder.getSchema(g); + return loadReadOnly(root, schemaProvider); + } + + public static void preload(String symbolSet) throws DatabaseException { try { - ControlPointFactory.preloadCache(Plant3D.URIs.Builtin); + ControlPointFactory.preloadCache(symbolSet); ComponentUtils.preloadCache(); } catch (Exception e) { throw new DatabaseException(e); } - return Simantics.getSession().syncRequest(new Read() { + } + + public static NodeMap load(final Resource root, SchemaProvider schemaProvider, NodeMapProvider mapProvider) throws DatabaseException { + return Simantics.getSession().syncRequest(new Read() { @Override - public P3DScriptNodeMap perform(ReadGraph graph) throws DatabaseException { + public NodeMap perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); - IMappingSchema schema = SchemaBuilder.getSchema(graph); + IMappingSchema schema = schemaProvider.get(graph); IMapping mapping = Mappings.createWithListening(schema); - P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root); + P3DRootNode rootNode = (P3DRootNode) mapping.map(graph, root); try { P3DUtil.finalizeDBLoad(rootNode); // FIXME: Something needs to be done here... @@ -40,28 +65,24 @@ public class SCLUtil { } catch (Exception e) { throw new DatabaseException(e); } - P3DScriptNodeMap nodeMap = new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode); - return nodeMap; + @SuppressWarnings("unchecked") + NodeMap nodeMap = (NodeMap) mapProvider.get(mapping, rootNode); + return nodeMap; } }); - } - - public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException { - try { - ControlPointFactory.preloadCache(Plant3D.URIs.Builtin); - ComponentUtils.preloadCache(); - } catch (Exception e) { - throw new DatabaseException(e); - } - return Simantics.getSession().syncRequest(new Read() { + + public static Root loadReadOnly(final Resource root, SchemaProvider schemaProvider) + throws DatabaseException { + return Simantics.getSession().syncRequest(new Read() { @Override - public P3DRootNode perform(ReadGraph graph) throws DatabaseException { + public Root perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); - IMappingSchema schema = SchemaBuilder.getSchema(graph); + IMappingSchema schema = schemaProvider.get(graph); IMapping mapping = Mappings.createWithoutListening(schema); - P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root); + @SuppressWarnings("unchecked") + Root rootNode = (Root) mapping.map(graph, root); try { P3DUtil.finalizeDBLoad(rootNode); P3DUtil.finalizeDBLoad2(rootNode); @@ -69,7 +90,6 @@ public class SCLUtil { throw new DatabaseException(e); } return rootNode; - } }); } -- 2.45.2