]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/editor/AnnotationTypeEditorNamingService.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.annotation.ui / src / org / simantics / annotation / ui / editor / AnnotationTypeEditorNamingService.java
diff --git a/bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/editor/AnnotationTypeEditorNamingService.java b/bundles/org.simantics.annotation.ui/src/org/simantics/annotation/ui/editor/AnnotationTypeEditorNamingService.java
new file mode 100644 (file)
index 0000000..a5c6cfd
--- /dev/null
@@ -0,0 +1,69 @@
+package org.simantics.annotation.ui.editor;\r
+\r
+import org.eclipse.ui.IEditorInput;\r
+import org.simantics.NameLabelUtil;\r
+import org.simantics.databoard.util.URIStringUtils;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.request.PossibleModel;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.modeling.ui.features.EditorNamingService2;\r
+import org.simantics.ui.workbench.IEditorNamingService2;\r
+import org.simantics.ui.workbench.IResourceEditorInput;\r
+\r
+/**\r
+ * Tries to:\r
+ * <ul>\r
+ * <li>resolve annotation property relation name from the input</li>\r
+ * <li>add (model-name) suffix to editor tooltip to tell apart editors with same\r
+ * title. The goal tooltip format is: path/input-name (model-name)</li>\r
+ * </ul>\r
+ * \r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class AnnotationTypeEditorNamingService extends EditorNamingService2 implements IEditorNamingService2 {\r
+\r
+    @Override\r
+    public String getName(ReadGraph graph, String editorId, IEditorInput in) throws DatabaseException {\r
+        if (!(in instanceof IResourceEditorInput))\r
+            return "";\r
+\r
+        IResourceEditorInput input = (IResourceEditorInput) in;\r
+        Resource r = input.getResource();\r
+        Layer0 L0 = Layer0.getInstance(graph);\r
+        Resource property = graph.getPossibleObject(r, L0.HasRange_Inverse);\r
+        return limitedName(graph, NameLabelUtil.modalName(graph, property != null ? property : r), input);\r
+    }\r
+\r
+    @Override\r
+    public String getToolTipText(ReadGraph graph, String editorId, IEditorInput input) throws DatabaseException {\r
+        return getTooltip(graph, editorId, (IResourceEditorInput) input, new StringBuilder()).toString();\r
+    }\r
+\r
+    private StringBuilder getTooltip(ReadGraph graph, String editorId, IResourceEditorInput input, StringBuilder sb) throws DatabaseException {\r
+        if (input.getResource() != null) {\r
+            Resource r = input.getResource();\r
+\r
+            Resource model = graph.syncRequest(new PossibleModel(r));\r
+            if (model != null) {\r
+                String uri = graph.getPossibleURI(input.getResource());\r
+                if (uri != null) {\r
+                    String modelURI = graph.getPossibleURI(model);\r
+                    String path = uri.replace(modelURI + "/", "");\r
+                    // Remove last uri segment which is the type name (UUID)\r
+                    path = path.replaceFirst("/[^/]*$", "/");\r
+                    sb.append(URIStringUtils.unescape(path));\r
+                }\r
+                sb.append(getName(graph, editorId, input));\r
+\r
+                // Append model label in parenthesis\r
+                String modelLabel = NameLabelUtil.modalName(graph, model);\r
+                sb.append(" (").append(modelLabel).append(")");\r
+            }\r
+        }\r
+\r
+        return sb;\r
+    }\r
+\r
+}
\ No newline at end of file