]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java
Additional SCL Bindings to G3D and Plant3D classes
[simantics/3d.git] / org.simantics.plant3d / src / org / simantics / plant3d / scl / SCLUtil.java
1 package org.simantics.plant3d.scl;
2
3
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.scenegraph.P3DRootNode;
13 import org.simantics.plant3d.scenegraph.SchemaBuilder;
14 import org.simantics.plant3d.scenegraph.controlpoint.ControlPointFactory;
15 import org.simantics.plant3d.scenegraph.controlpoint.PipingRules;
16 import org.simantics.plant3d.utils.ComponentUtils;
17 import org.simantics.plant3d.utils.P3DUtil;
18
19 public class SCLUtil {
20     
21     public static P3DScriptNodeMap load(final Resource root) throws DatabaseException {
22         try {
23             ControlPointFactory.preloadCache();
24             ComponentUtils.preloadCache();
25         } catch (Exception e) {
26             throw new DatabaseException(e);
27         }
28         return Simantics.getSession().syncRequest(new Read<P3DScriptNodeMap>() {
29             @Override
30             public P3DScriptNodeMap perform(ReadGraph graph) throws DatabaseException {
31                 PipingRules.setEnabled(false);
32                 IMappingSchema<Resource, Object> schema = SchemaBuilder.getSchema(graph);
33                 IMapping mapping = Mappings.createWithListening(schema);
34                 P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root);
35                 try {
36                     P3DUtil.finalizeDBLoad(rootNode);
37                 } catch (Exception e) {
38                     throw new DatabaseException(e);
39                 }
40                 P3DScriptNodeMap nodeMap = new P3DScriptNodeMap(Simantics.getSession(), mapping, rootNode);
41                 return nodeMap;
42                 
43             }
44         });
45         
46     }
47     
48     public static P3DRootNode loadReadOnly(final Resource root) throws DatabaseException {
49         try {
50             ControlPointFactory.preloadCache();
51             ComponentUtils.preloadCache();
52         } catch (Exception e) {
53             throw new DatabaseException(e);
54         }
55         return Simantics.getSession().syncRequest(new Read<P3DRootNode>() {
56             @Override
57             public P3DRootNode perform(ReadGraph graph) throws DatabaseException {
58                 PipingRules.setEnabled(false);
59                 IMappingSchema<Resource, Object> schema = SchemaBuilder.getSchema(graph);
60                 IMapping mapping = Mappings.createWithoutListening(schema);
61                 P3DRootNode rootNode = (P3DRootNode)mapping.map(graph, root);
62                 try {
63                     P3DUtil.finalizeDBLoad(rootNode);
64                 } catch (Exception e) {
65                     throw new DatabaseException(e);
66                 }
67                 return rootNode;
68                 
69             }
70         });
71     }
72
73 }