1 package org.simantics.plant3d.scl;
4 import org.simantics.Simantics;
5 import org.simantics.db.ReadGraph;
6 import org.simantics.db.Resource;
7 import org.simantics.db.exception.DatabaseException;
8 import org.simantics.db.request.Read;
9 import org.simantics.objmap.graph.IMapping;
10 import org.simantics.objmap.graph.Mappings;
11 import org.simantics.objmap.graph.schema.IMappingSchema;
12 import org.simantics.plant3d.ontology.Plant3D;
13 import org.simantics.plant3d.scenegraph.P3DRootNode;
14 import org.simantics.plant3d.scenegraph.SchemaBuilder;
15 import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory;
16 import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
17 import org.simantics.plant3d.utils.ComponentUtils;
18 import org.simantics.plant3d.utils.P3DUtil;
20 public class SCLUtil {
22 public static P3DScriptNodeMap load(final Resource root) throws DatabaseException {
24 ControlPointFactory.preloadCache(Plant3D.URIs.Builtin);
25 ComponentUtils.preloadCache();
26 } catch (Exception e) {
27 throw new DatabaseException(e);
29 return Simantics.getSession().syncRequest(new Read<P3DScriptNodeMap>() {
31 public P3DScriptNodeMap perform(ReadGraph graph) throws DatabaseException {
32 PipingRules.setEnabled(false);
33 IMappingSchema<Resource, Object> schema = SchemaBuilder.getSchema(graph);
34 IMapping<Resource, Object> mapping = Mappings.createWithListening(schema);
35 P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root);
37 P3DUtil.finalizeDBLoad(rootNode);
38 // FIXME: Something needs to be done here...
39 P3DUtil.finalizeDBLoad2(rootNode);
40 } catch (Exception e) {
41 throw new DatabaseException(e);
43 P3DScriptNodeMap nodeMap = new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode);
51 public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException {
53 ControlPointFactory.preloadCache(Plant3D.URIs.Builtin);
54 ComponentUtils.preloadCache();
55 } catch (Exception e) {
56 throw new DatabaseException(e);
58 return Simantics.getSession().syncRequest(new Read<P3DRootNode>() {
60 public P3DRootNode perform(ReadGraph graph) throws DatabaseException {
61 PipingRules.setEnabled(false);
62 IMappingSchema<Resource, Object> schema = SchemaBuilder.getSchema(graph);
63 IMapping<Resource, Object> mapping = Mappings.createWithoutListening(schema);
64 P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root);
66 P3DUtil.finalizeDBLoad(rootNode);
67 P3DUtil.finalizeDBLoad2(rootNode);
68 } catch (Exception e) {
69 throw new DatabaseException(e);