]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/NodeData.java b/bundles/org.simantics.debug.graphical/src/org/simantics/debug/graphical/model/NodeData.java
new file mode 100644 (file)
index 0000000..17e6f12
--- /dev/null
@@ -0,0 +1,81 @@
+package org.simantics.debug.graphical.model;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.common.utils.NameUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.debug.graphical.LabelingPreferences;\r
+import org.simantics.layer0.Layer0;\r
+\r
+public class NodeData {\r
+    Resource resource;    \r
+    String[] labels;\r
+    ArrayList<Statement> statements = new ArrayList<Statement>();\r
+    \r
+    public NodeData(Resource resource) {\r
+        this.resource = resource;\r
+    }\r
+\r
+    public String[] getLabels() {\r
+        return labels;\r
+    }\r
+    \r
+    public void updateData(ReadGraph g, LabelingPreferences pref) throws DatabaseException {\r
+        Layer0 L0 = Layer0.getInstance(g);\r
+        \r
+        Resource name = null;\r
+        Resource label = null;\r
+        ArrayList<Resource> types = new ArrayList<Resource>(); \r
+        ArrayList<Resource> tags = new ArrayList<Resource>();\r
+        \r
+        statements.clear();\r
+        for(Statement stat : g.getStatements(resource, L0.IsWeaklyRelatedTo)) {\r
+            if(stat.getSubject().equals(resource)) {\r
+                Resource predicate = stat.getPredicate();\r
+                if(predicate.equals(L0.InstanceOf))\r
+                    types.add(stat.getObject());\r
+                else if(predicate.equals(L0.HasName))\r
+                    name = stat.getObject();\r
+                else if(predicate.equals(L0.HasLabel))\r
+                    label = stat.getObject();\r
+                else if(resource.equals(stat.getObject()))\r
+                    tags.add(predicate);\r
+                else if(g.isSubrelationOf(predicate, L0.HasNext) ||\r
+                               g.isSubrelationOf(predicate, L0.HasPrevious))\r
+                       ;\r
+                else\r
+                    statements.add(stat);\r
+            }\r
+        }\r
+\r
+        { // Compute labels\r
+            ArrayList<String> labels = new ArrayList<String>(4);\r
+            labels.add("$" + resource.getResourceId());\r
+            if(name != null)\r
+                labels.add((String)g.getValue(name, Bindings.STRING));\r
+            if(label != null)\r
+                labels.add((String)g.getValue(label, Bindings.STRING));\r
+            for(Resource type : types)\r
+                labels.add(": " + NameUtils.getSafeName(g, type));\r
+            for(Resource tag : tags)\r
+                labels.add("TAG " + NameUtils.getSafeName(g, tag));\r
+            this.labels = labels.toArray(new String[labels.size()]);\r
+        }\r
+    }\r
+    \r
+    public Resource getResource() {\r
+        return resource;\r
+    }\r
+    \r
+    public ArrayList<Statement> getStatements() {\r
+        return statements;\r
+    }\r
+    \r
+    public void setStatements(ArrayList<Statement> statements) {\r
+        this.statements = statements;\r
+    }\r
+}\r