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.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
24 public class GraphEditorAdapterDescriptor implements EditorAdapterDescriptor {
\r
25 private static final Logger LOGGER = LoggerFactory.getLogger(GraphEditorAdapterDescriptor.class);
\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
33 public GraphEditorAdapterDescriptor(String editorId, String label, ImageDescriptor imageDescriptor, Resource contribution, int priority) {
\r
34 this.editorId = editorId;
\r
36 this.imageDescriptor = imageDescriptor;
\r
37 this.contribution = contribution;
\r
38 this.priority = priority;
\r
42 public String getId() {
\r
47 public String getGroupId() {
\r
52 public EditorAdapter getAdapter() {
\r
54 return new AbstractResourceEditorAdapter(editorId, null, priority) {
\r
57 public String getName() {
\r
62 public ImageDescriptor getIcon() {
\r
63 return imageDescriptor;
\r
67 public int getPriority() {
\r
72 public boolean canHandle(ReadGraph graph, Resource input) throws DatabaseException {
\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
82 public void openEditor(Object input) throws Exception {
\r
84 Resource r = ResourceAdaptionUtils.toSingleResource(input);
\r
86 Simantics.getSession().asyncRequest(new ReadRequest() {
\r
88 public void run(ReadGraph g) throws DatabaseException {
\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
94 PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
\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
112 public Collection<String> getInContexts() {
\r
117 public boolean isActive(Collection<?> activeContextIds) {
\r