--- /dev/null
+package org.simantics.ui.workbench.editor;\r
+\r
+import java.util.Collection;\r
+\r
+import org.eclipse.jface.resource.ImageDescriptor;\r
+import org.eclipse.ui.PartInitException;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.simantics.Logger;\r
+import org.simantics.Simantics;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.PossibleIndexRoot;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.RVI;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.db.layer0.variable.Variables;\r
+import org.simantics.modeling.ModelingResources;\r
+import org.simantics.ui.utils.ResourceAdaptionUtils;\r
+import org.simantics.ui.workbench.ResourceEditorInput2;\r
+import org.simantics.utils.ui.workbench.WorkbenchUtils;\r
+\r
+public class GraphEditorAdapterDescriptor implements EditorAdapterDescriptor {\r
+ \r
+ private final String editorId;\r
+ private final String label;\r
+ private final ImageDescriptor imageDescriptor;\r
+ private final Resource contribution;\r
+ private final int priority;\r
+\r
+ public GraphEditorAdapterDescriptor(String editorId, String label, ImageDescriptor imageDescriptor, Resource contribution, int priority) {\r
+ this.editorId = editorId;\r
+ this.label = label;\r
+ this.imageDescriptor = imageDescriptor;\r
+ this.contribution = contribution;\r
+ this.priority = priority;\r
+ }\r
+ \r
+ @Override\r
+ public String getId() {\r
+ return editorId;\r
+ }\r
+\r
+ @Override\r
+ public String getGroupId() {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public EditorAdapter getAdapter() {\r
+ \r
+ return new AbstractResourceEditorAdapter(editorId, null, priority) {\r
+\r
+ @Override\r
+ public String getName() {\r
+ return label;\r
+ }\r
+\r
+ @Override\r
+ public ImageDescriptor getIcon() {\r
+ return imageDescriptor;\r
+ }\r
+\r
+ @Override\r
+ public int getPriority() {\r
+ return priority;\r
+ }\r
+\r
+ @Override\r
+ public boolean canHandle(ReadGraph graph, Resource input) throws DatabaseException {\r
+ \r
+ ModelingResources MOD = ModelingResources.getInstance(graph);\r
+ Boolean result = Simantics.tryInvokeSCL(graph, contribution, MOD.EditorContribution_canHandle, input);\r
+ if(result == null) return false;\r
+ return result;\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void openEditor(Object input) throws Exception {\r
+ \r
+ Resource r = ResourceAdaptionUtils.toSingleResource(input);\r
+ \r
+ Simantics.getSession().asyncRequest(new ReadRequest() {\r
+ @Override\r
+ public void run(ReadGraph g) throws DatabaseException {\r
+\r
+ Variable variable = Variables.getVariable(g, r);\r
+ final Resource model = g.syncRequest(new PossibleIndexRoot(r));\r
+ final RVI rvi = variable.getPossibleRVI(g);\r
+ \r
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ try {\r
+ WorkbenchUtils.openEditor(editorId, new ResourceEditorInput2(editorId, r, model, rvi));\r
+ } catch (PartInitException e) {\r
+ Logger.defaultLogError(e);\r
+ }\r
+ }\r
+ });\r
+ }\r
+ });\r
+ }\r
+ \r
+ };\r
+ }\r
+\r
+ @Override\r
+ public Collection<String> getInContexts() {\r
+ return null;\r
+ }\r
+\r
+ @Override\r
+ public boolean isActive(Collection<?> activeContextIds) {\r
+ return true;\r
+ }\r
+\r
+}\r