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