package org.simantics.plant3d.scl; import org.simantics.Simantics; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; import org.simantics.db.request.Read; import org.simantics.objmap.graph.IMapping; import org.simantics.objmap.graph.Mappings; import org.simantics.objmap.graph.schema.IMappingSchema; import org.simantics.plant3d.scenegraph.P3DRootNode; import org.simantics.plant3d.scenegraph.SchemaBuilder; 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; public class SCLUtil { public static P3DScriptNodeMap load(final Resource root) throws DatabaseException { try { ControlPointFactory.preloadCache(); ComponentUtils.preloadCache(); } catch (Exception e) { throw new DatabaseException(e); } return Simantics.getSession().syncRequest(new Read() { @Override public P3DScriptNodeMap perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); IMappingSchema schema = SchemaBuilder.getSchema(graph); IMapping mapping = Mappings.createWithListening(schema); P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root); try { P3DUtil.finalizeDBLoad(rootNode); // FIXME: Something needs to be done here... P3DUtil.finalizeDBLoad2(rootNode); } catch (Exception e) { throw new DatabaseException(e); } P3DScriptNodeMap nodeMap = new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode); return nodeMap; } }); } public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException { try { ControlPointFactory.preloadCache(); ComponentUtils.preloadCache(); } catch (Exception e) { throw new DatabaseException(e); } return Simantics.getSession().syncRequest(new Read() { @Override public P3DRootNode perform(ReadGraph graph) throws DatabaseException { PipingRules.setEnabled(false); IMappingSchema schema = SchemaBuilder.getSchema(graph); IMapping mapping = Mappings.createWithoutListening(schema); P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root); try { P3DUtil.finalizeDBLoad(rootNode); P3DUtil.finalizeDBLoad2(rootNode); } catch (Exception e) { throw new DatabaseException(e); } return rootNode; } }); } }