]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.linking.ge;\r
2 \r
3 import org.eclipse.swt.widgets.Display;\r
4 import org.simantics.db.ReadGraph;\r
5 import org.simantics.db.Resource;\r
6 import org.simantics.db.common.request.ReadRequest;\r
7 import org.simantics.db.exception.DatabaseException;\r
8 import org.simantics.db.layer0.adapter.ActionFactory;\r
9 import org.simantics.db.layer0.variable.Variable;\r
10 import org.simantics.document.linking.ontology.DocumentLink;\r
11 import org.simantics.document.linking.utils.SourceLinkUtil;\r
12 import org.simantics.ui.SimanticsUI;\r
13 import org.simantics.ui.workbench.editor.EditorAdapter;\r
14 import org.simantics.ui.workbench.editor.EditorRegistry;\r
15 import org.simantics.utils.ui.ExceptionUtils;\r
16 \r
17 public class ShowDocumentAction implements ActionFactory{\r
18         \r
19         \r
20         @Override\r
21         public Runnable create(Object target) {\r
22                 if (!(target instanceof Variable))\r
23                         return null;\r
24                 final Variable v = (Variable)target;\r
25                 \r
26 \r
27                 return new Runnable() {\r
28                         \r
29                         @Override\r
30                         public void run() {\r
31                                 SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
32                                         \r
33                                         @Override\r
34                                         public void run(ReadGraph graph) throws DatabaseException {\r
35                                                 DocumentLink sl = DocumentLink.getInstance(graph);\r
36                                                 Resource t = v.getPossibleRepresents(graph);\r
37                                                 if (!graph.isInstanceOf(t, sl.Source))\r
38                                                         return;\r
39                                                 final Resource reference = SourceLinkUtil.getReferredDocument(graph, t);\r
40                                                 if (reference == null)\r
41                                                         return;\r
42                                                 EditorAdapter[] adapters = EditorRegistry.getInstance().getAdaptersFor(graph, reference);\r
43                                                 if (adapters.length == 0)\r
44                                                         return;\r
45                                                 EditorAdapter highPri = null;\r
46                                                 int pri = Integer.MIN_VALUE;\r
47                                                 for (EditorAdapter a : adapters) {\r
48                                                         int p = a.getPriority();\r
49                                                         if (highPri == null || p > pri) {\r
50                                                                 highPri = a;\r
51                                                                 pri = p;\r
52                                                         } \r
53                                                 }\r
54                                                 final EditorAdapter adapter = highPri;\r
55                                                 Display.getDefault().asyncExec(new Runnable() {\r
56                                                         \r
57                                                         @Override\r
58                                                         public void run() {\r
59                                                                 try {\r
60                                                                         adapter.openEditor(reference);\r
61                                                                 } catch (Exception e) {\r
62                                                                         ExceptionUtils.logAndShowError("Cannot open editor", e);\r
63                                                                 }\r
64                                                         }\r
65                                                 });\r
66 \r
67                                                 \r
68                                         }\r
69                                 });\r
70                                 \r
71                         }\r
72                 };\r
73 \r
74                 \r
75         }\r
76 \r
77 }\r