1 package org.simantics.plant3d.scenegraph.controlpoint;
3 import java.util.HashMap;
7 import org.simantics.Simantics;
8 import org.simantics.db.ReadGraph;
9 import org.simantics.db.Resource;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.db.request.Read;
12 import org.simantics.plant3d.ontology.Plant3D;
13 import org.simantics.plant3d.scenegraph.PipelineComponent;
14 import org.simantics.plant3d.scenegraph.controlpoint.PipeControlPoint.Type;
15 import org.simantics.plant3d.utils.Item;
16 import org.simantics.plant3d.utils.P3DUtil;
18 public class ControlPointFactory {
20 private static Map<String,Instruction> cache = new HashMap<String, Instruction>();
23 public static void preloadCache() throws Exception {
24 List<Item> items = P3DUtil.getEnds();
25 items.addAll(P3DUtil.getInlines());
26 items.addAll(P3DUtil.getNozzles());
27 items.addAll(P3DUtil.getTurns());
29 for (Item item : items) {
30 Instruction inst = createInstruction(item.getUri());
31 cache.put(item.getUri(), inst);
35 public static PipeControlPoint create(PipelineComponent component) throws Exception {
36 Instruction inst = cache.get(component.getType());
38 inst = createInstruction(component.getType());
39 cache.put(component.getType(), inst);
45 PipeControlPoint pcp = new PipeControlPoint(component);
46 pcp.setType(inst.type);
47 pcp.setFixed(inst.fixed);
53 if (inst.isOffset || inst.isSizeChange) {
54 PipeControlPoint sub = new PipeControlPoint(component);
55 pcp.children.add(sub);
57 sub.setType(inst.type);
58 sub.setFixed(inst.fixed);
60 // pcp.setOffset(0.0);
74 private static class Instruction {
83 private static Instruction createInstruction(final String type) throws Exception {
84 return Simantics.getSession().syncRequest(new Read<Instruction>() {
86 public Instruction perform(ReadGraph graph) throws DatabaseException {
87 Resource res = graph.getResource(type);
88 Plant3D p3d = Plant3D.getInstance(graph);
89 Instruction i = new Instruction();
92 i.isSizeChange = false;
94 if (graph.isInheritedFrom(res, p3d.Nozzle)) {
97 i.isSizeChange = false;
99 } else if (graph.isInheritedFrom(res, p3d.InlineComponent)){
101 i.type = Type.INLINE;
102 if (graph.hasStatement(res,p3d.VariableLengthInlineComponent)) {
104 } else if (graph.hasStatement(res,p3d.FixedLengthInlineComponent)) {
108 if (graph.hasStatement(res,p3d.SizeChangeComponent)) {
109 i.isSizeChange = true;
112 if (graph.hasStatement(res,p3d.OffsetComponent)) {
116 } else if (graph.isInheritedFrom(res, p3d.TurnComponent)) {
118 if (graph.hasStatement(res,p3d.VariableAngleTurnComponent)) {
120 } else if (graph.hasStatement(res,p3d.FixedAngleTurnComponent)) {
123 } else if (graph.isInheritedFrom(res, p3d.EndComponent)) {