]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.ui/src/org/simantics/ui/workbench/editor/GraphEditorAdapterDescriptor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / workbench / editor / GraphEditorAdapterDescriptor.java
1 package org.simantics.ui.workbench.editor;\r
2 \r
3 import java.util.Collection;\r
4 \r
5 import org.eclipse.jface.resource.ImageDescriptor;\r
6 import org.eclipse.ui.PartInitException;\r
7 import org.eclipse.ui.PlatformUI;\r
8 import org.simantics.Logger;\r
9 import org.simantics.Simantics;\r
10 import org.simantics.db.ReadGraph;\r
11 import org.simantics.db.Resource;\r
12 import org.simantics.db.common.request.PossibleIndexRoot;\r
13 import org.simantics.db.common.request.ReadRequest;\r
14 import org.simantics.db.exception.DatabaseException;\r
15 import org.simantics.db.layer0.variable.RVI;\r
16 import org.simantics.db.layer0.variable.Variable;\r
17 import org.simantics.db.layer0.variable.Variables;\r
18 import org.simantics.modeling.ModelingResources;\r
19 import org.simantics.ui.utils.ResourceAdaptionUtils;\r
20 import org.simantics.ui.workbench.ResourceEditorInput2;\r
21 import org.simantics.utils.ui.workbench.WorkbenchUtils;\r
22 \r
23 public class GraphEditorAdapterDescriptor implements EditorAdapterDescriptor {\r
24         \r
25         private final String editorId;\r
26         private final String label;\r
27         private final ImageDescriptor imageDescriptor;\r
28         private final Resource contribution;\r
29         private final int priority;\r
30 \r
31         public GraphEditorAdapterDescriptor(String editorId, String label, ImageDescriptor imageDescriptor, Resource contribution, int priority) {\r
32                 this.editorId = editorId;\r
33                 this.label = label;\r
34                 this.imageDescriptor = imageDescriptor;\r
35                 this.contribution = contribution;\r
36                 this.priority = priority;\r
37         }\r
38         \r
39         @Override\r
40         public String getId() {\r
41                 return editorId;\r
42         }\r
43 \r
44         @Override\r
45         public String getGroupId() {\r
46                 return null;\r
47         }\r
48 \r
49         @Override\r
50         public EditorAdapter getAdapter() {\r
51                 \r
52                 return new AbstractResourceEditorAdapter(editorId, null, priority) {\r
53 \r
54                         @Override\r
55                         public String getName() {\r
56                                 return label;\r
57                         }\r
58 \r
59                         @Override\r
60                         public ImageDescriptor getIcon() {\r
61                                 return imageDescriptor;\r
62                         }\r
63 \r
64                         @Override\r
65                         public int getPriority() {\r
66                                 return priority;\r
67                         }\r
68 \r
69                         @Override\r
70                         public boolean canHandle(ReadGraph graph, Resource input) throws DatabaseException {\r
71                                 \r
72                                 ModelingResources MOD = ModelingResources.getInstance(graph);\r
73                         Boolean result = Simantics.tryInvokeSCL(graph, contribution, MOD.EditorContribution_canHandle, input);\r
74                         if(result == null) return false;\r
75                         return result;\r
76                         \r
77                         }\r
78 \r
79                         @Override\r
80                         public void openEditor(Object input) throws Exception {\r
81                                 \r
82                         Resource r = ResourceAdaptionUtils.toSingleResource(input);\r
83                                 \r
84                         Simantics.getSession().asyncRequest(new ReadRequest() {\r
85                             @Override\r
86                             public void run(ReadGraph g) throws DatabaseException {\r
87 \r
88                                 Variable variable = Variables.getVariable(g, r);\r
89                                 final Resource model = g.syncRequest(new PossibleIndexRoot(r));\r
90                                 final RVI rvi = variable.getPossibleRVI(g);\r
91                                 \r
92                                 PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {\r
93                                     @Override\r
94                                     public void run() {\r
95                                         try {\r
96                                             WorkbenchUtils.openEditor(editorId, new ResourceEditorInput2(editorId, r, model, rvi));\r
97                                         } catch (PartInitException e) {\r
98                                                 Logger.defaultLogError(e);\r
99                                         }\r
100                                     }\r
101                                 });\r
102                             }\r
103                         });\r
104                         }\r
105                         \r
106                 };\r
107         }\r
108 \r
109         @Override\r
110         public Collection<String> getInContexts() {\r
111                 return null;\r
112         }\r
113 \r
114         @Override\r
115         public boolean isActive(Collection<?> activeContextIds) {\r
116                 return true;\r
117         }\r
118 \r
119 }\r