]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.plant3d/src/org/simantics/plant3d/scl/SCLUtil.java
ae6bac4baeff7716b0795d16ceb8b780b2e6a88c
[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 }