]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/NodeData.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.debug.graphical / src / org / simantics / debug / graphical / model / NodeData.java
1 package org.simantics.debug.graphical.model;\r
2 \r
3 import java.util.ArrayList;\r
4 \r
5 import org.simantics.databoard.Bindings;\r
6 import org.simantics.db.ReadGraph;\r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.Statement;\r
9 import org.simantics.db.common.utils.NameUtils;\r
10 import org.simantics.db.exception.DatabaseException;\r
11 import org.simantics.debug.graphical.LabelingPreferences;\r
12 import org.simantics.layer0.Layer0;\r
13 \r
14 public class NodeData {\r
15     Resource resource;    \r
16     String[] labels;\r
17     ArrayList<Statement> statements = new ArrayList<Statement>();\r
18     \r
19     public NodeData(Resource resource) {\r
20         this.resource = resource;\r
21     }\r
22 \r
23     public String[] getLabels() {\r
24         return labels;\r
25     }\r
26     \r
27     public void updateData(ReadGraph g, LabelingPreferences pref) throws DatabaseException {\r
28         Layer0 L0 = Layer0.getInstance(g);\r
29         \r
30         Resource name = null;\r
31         Resource label = null;\r
32         ArrayList<Resource> types = new ArrayList<Resource>(); \r
33         ArrayList<Resource> tags = new ArrayList<Resource>();\r
34         \r
35         statements.clear();\r
36         for(Statement stat : g.getStatements(resource, L0.IsWeaklyRelatedTo)) {\r
37             if(stat.getSubject().equals(resource)) {\r
38                 Resource predicate = stat.getPredicate();\r
39                 if(predicate.equals(L0.InstanceOf))\r
40                     types.add(stat.getObject());\r
41                 else if(predicate.equals(L0.HasName))\r
42                     name = stat.getObject();\r
43                 else if(predicate.equals(L0.HasLabel))\r
44                     label = stat.getObject();\r
45                 else if(resource.equals(stat.getObject()))\r
46                     tags.add(predicate);\r
47                 else if(g.isSubrelationOf(predicate, L0.HasNext) ||\r
48                                 g.isSubrelationOf(predicate, L0.HasPrevious))\r
49                         ;\r
50                 else\r
51                     statements.add(stat);\r
52             }\r
53         }\r
54 \r
55         { // Compute labels\r
56             ArrayList<String> labels = new ArrayList<String>(4);\r
57             labels.add("$" + resource.getResourceId());\r
58             if(name != null)\r
59                 labels.add((String)g.getValue(name, Bindings.STRING));\r
60             if(label != null)\r
61                 labels.add((String)g.getValue(label, Bindings.STRING));\r
62             for(Resource type : types)\r
63                 labels.add(": " + NameUtils.getSafeName(g, type));\r
64             for(Resource tag : tags)\r
65                 labels.add("TAG " + NameUtils.getSafeName(g, tag));\r
66             this.labels = labels.toArray(new String[labels.size()]);\r
67         }\r
68     }\r
69     \r
70     public Resource getResource() {\r
71         return resource;\r
72     }\r
73     \r
74     public ArrayList<Statement> getStatements() {\r
75         return statements;\r
76     }\r
77     \r
78     public void setStatements(ArrayList<Statement> statements) {\r
79         this.statements = statements;\r
80     }\r
81 }\r