1 package org.simantics.ui.workbench.editor;
\r
3 import java.util.Collection;
\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
23 public class GraphEditorAdapterDescriptor implements EditorAdapterDescriptor {
\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
31 public GraphEditorAdapterDescriptor(String editorId, String label, ImageDescriptor imageDescriptor, Resource contribution, int priority) {
\r
32 this.editorId = editorId;
\r
34 this.imageDescriptor = imageDescriptor;
\r
35 this.contribution = contribution;
\r
36 this.priority = priority;
\r
40 public String getId() {
\r
45 public String getGroupId() {
\r
50 public EditorAdapter getAdapter() {
\r
52 return new AbstractResourceEditorAdapter(editorId, null, priority) {
\r
55 public String getName() {
\r
60 public ImageDescriptor getIcon() {
\r
61 return imageDescriptor;
\r
65 public int getPriority() {
\r
70 public boolean canHandle(ReadGraph graph, Resource input) throws DatabaseException {
\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
80 public void openEditor(Object input) throws Exception {
\r
82 Resource r = ResourceAdaptionUtils.toSingleResource(input);
\r
84 Simantics.getSession().asyncRequest(new ReadRequest() {
\r
86 public void run(ReadGraph g) throws DatabaseException {
\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
92 PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
\r
96 WorkbenchUtils.openEditor(editorId, new ResourceEditorInput2(editorId, r, model, rvi));
\r
97 } catch (PartInitException e) {
\r
98 Logger.defaultLogError(e);
\r
110 public Collection<String> getInContexts() {
\r
115 public boolean isActive(Collection<?> activeContextIds) {
\r