]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/ShowDocumentAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / ge / ShowDocumentAction.java
diff --git a/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/ShowDocumentAction.java b/bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/ShowDocumentAction.java
new file mode 100644 (file)
index 0000000..23183dd
--- /dev/null
@@ -0,0 +1,77 @@
+package org.simantics.document.linking.ge;\r
+\r
+import org.eclipse.swt.widgets.Display;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.adapter.ActionFactory;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.document.linking.ontology.DocumentLink;\r
+import org.simantics.document.linking.utils.SourceLinkUtil;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.ui.workbench.editor.EditorAdapter;\r
+import org.simantics.ui.workbench.editor.EditorRegistry;\r
+import org.simantics.utils.ui.ExceptionUtils;\r
+\r
+public class ShowDocumentAction implements ActionFactory{\r
+       \r
+       \r
+       @Override\r
+       public Runnable create(Object target) {\r
+               if (!(target instanceof Variable))\r
+                       return null;\r
+               final Variable v = (Variable)target;\r
+               \r
+\r
+               return new Runnable() {\r
+                       \r
+                       @Override\r
+                       public void run() {\r
+                               SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
+                                       \r
+                                       @Override\r
+                                       public void run(ReadGraph graph) throws DatabaseException {\r
+                                               DocumentLink sl = DocumentLink.getInstance(graph);\r
+                                               Resource t = v.getPossibleRepresents(graph);\r
+                                               if (!graph.isInstanceOf(t, sl.Source))\r
+                                                       return;\r
+                                               final Resource reference = SourceLinkUtil.getReferredDocument(graph, t);\r
+                                               if (reference == null)\r
+                                                       return;\r
+                                               EditorAdapter[] adapters = EditorRegistry.getInstance().getAdaptersFor(graph, reference);\r
+                                               if (adapters.length == 0)\r
+                                                       return;\r
+                                               EditorAdapter highPri = null;\r
+                                               int pri = Integer.MIN_VALUE;\r
+                                               for (EditorAdapter a : adapters) {\r
+                                                       int p = a.getPriority();\r
+                                                       if (highPri == null || p > pri) {\r
+                                                               highPri = a;\r
+                                                               pri = p;\r
+                                                       } \r
+                                               }\r
+                                               final EditorAdapter adapter = highPri;\r
+                                               Display.getDefault().asyncExec(new Runnable() {\r
+                                                       \r
+                                                       @Override\r
+                                                       public void run() {\r
+                                                               try {\r
+                                                                       adapter.openEditor(reference);\r
+                                                               } catch (Exception e) {\r
+                                                                       ExceptionUtils.logAndShowError("Cannot open editor", e);\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+\r
+                                               \r
+                                       }\r
+                               });\r
+                               \r
+                       }\r
+               };\r
+\r
+               \r
+       }\r
+\r
+}\r