]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop.diagram/src/org/simantics/interop/diagram/DiagramUtils.java
29f3e21186761cc846daecffa2b22e1f2a0beed0
[simantics/interop.git] / org.simantics.interop.diagram / src / org / simantics / interop / diagram / DiagramUtils.java
1 package org.simantics.interop.diagram;
2
3 import org.simantics.db.ReadGraph;
4 import org.simantics.db.Resource;
5 import org.simantics.db.WriteGraph;
6 import org.simantics.db.common.utils.NameUtils;
7 import org.simantics.db.common.utils.OrderedSetUtils;
8 import org.simantics.db.exception.DatabaseException;
9 import org.simantics.layer0.Layer0;
10 import org.simantics.simulation.ontology.SimulationResource;
11
12 /**
13  * 
14  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
15  *
16  */
17 public class DiagramUtils {
18
19         
20         public static void addElement(WriteGraph g, Diagram diagram, Resource element) throws DatabaseException {
21                 Layer0 l0 = Layer0.getInstance(g);
22                 OrderedSetUtils.add(g, diagram.getDiagram(), element);
23                 generateName(g, diagram, element);
24                 g.claim(diagram.getDiagram(), l0.ConsistsOf, element);
25         }
26         
27         public static void addElementFirst(WriteGraph g, Diagram diagram, Resource element) throws DatabaseException {
28                 Layer0 l0 = Layer0.getInstance(g);
29                 OrderedSetUtils.addFirst(g, diagram.getDiagram(), element);
30                 generateName(g, diagram, element);
31                 g.claim(diagram.getDiagram(), l0.ConsistsOf, element);
32         }
33         
34         public static void generateName(WriteGraph g, Diagram diagram, Resource element) throws DatabaseException {
35                 Layer0 l0 = Layer0.getInstance(g);
36                 if (g.getPossibleRelatedValue(element, l0.HasName) != null)
37                         return;
38                 Resource type = g.getSingleType(element);
39                 
40                 String name = NameUtils.findFreshEscapedName(g, (String)g.getRelatedValue(type, l0.HasName), diagram.getDiagram(),l0.ConsistsOf);
41                 g.claimLiteral(element, l0.HasName, name);
42         }
43         
44         
45         public static Resource createRelation(WriteGraph w, Layer0 b, Resource superrelation) throws DatabaseException {
46         Resource relation = w.newResource();
47         Resource invRelation = w.newResource();
48         w.claim(relation, b.InverseOf, invRelation);
49         w.claim(relation, b.ConsistsOf, invRelation);
50         w.claimLiteral(invRelation, b.HasName, "Inverse");
51         
52         w.claim(relation, b.SubrelationOf, b.SuperrelationOf, superrelation);
53         w.claim(invRelation, b.SubrelationOf, b.SuperrelationOf, w.getInverse(superrelation));
54         
55         //w.claim(relation, b.InstanceOf, ab.ReferenceProvider);
56         return relation;
57     }
58         
59         public static Resource createRelation(WriteGraph w, Layer0 b, Resource... superrelation) throws DatabaseException {
60         Resource relation = w.newResource();
61         Resource invRelation = w.newResource();
62         w.claim(relation, b.InverseOf, invRelation);
63         w.claim(relation, b.ConsistsOf, invRelation);
64         w.claimLiteral(invRelation, b.HasName, "Inverse");
65         for (Resource rel : superrelation) {
66                 w.claim(relation, b.SubrelationOf, null, rel);
67                 Resource inv = w.getPossibleInverse(rel);
68                 if (inv != null)
69                         w.claim(invRelation, b.SubrelationOf, null, inv);
70         } 
71         return relation;
72     }
73         
74         public static Resource getModel(ReadGraph graph, Resource res) throws DatabaseException{
75                 Layer0 l0 = Layer0.getInstance(graph);
76                 SimulationResource sim = SimulationResource.getInstance(graph);
77                 Resource r = res;
78                 while (r != null) {
79                         if (graph.isInstanceOf(r, sim.Model))
80                                 return r;
81                         r = graph.getPossibleObject(r, l0.PartOf);
82                 }
83                 return r;
84         }
85         
86         public static Resource getConfiguration(ReadGraph graph, Resource model) throws DatabaseException {
87                 SimulationResource sim = SimulationResource.getInstance(graph);
88                 return graph.getSingleObject(model, sim.HasConfiguration);
89         }
90 }