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