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