]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.ui/src/org/simantics/ui/workbench/editor/GraphEditorAdapterDescriptor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.ui / src / org / simantics / ui / workbench / editor / GraphEditorAdapterDescriptor.java
diff --git a/bundles/org.simantics.ui/src/org/simantics/ui/workbench/editor/GraphEditorAdapterDescriptor.java b/bundles/org.simantics.ui/src/org/simantics/ui/workbench/editor/GraphEditorAdapterDescriptor.java
new file mode 100644 (file)
index 0000000..3ffa5b4
--- /dev/null
@@ -0,0 +1,119 @@
+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