1 package org.simantics.document.ui.graphfile;
\r
5 import org.eclipse.swt.widgets.Display;
\r
6 import org.eclipse.ui.PartInitException;
\r
7 import org.simantics.db.ReadGraph;
\r
8 import org.simantics.db.Resource;
\r
9 import org.simantics.db.common.request.ReadRequest;
\r
10 import org.simantics.db.exception.DatabaseException;
\r
11 import org.simantics.document.DocumentResource;
\r
12 import org.simantics.document.ui.Activator;
\r
13 import org.simantics.editors.Editors;
\r
14 import org.simantics.graphfile.ontology.GraphFileResource;
\r
15 import org.simantics.graphfile.util.GraphFileUtil;
\r
16 import org.simantics.ui.SimanticsUI;
\r
17 import org.simantics.ui.workbench.editor.AbstractResourceEditorAdapter;
\r
18 import org.simantics.ui.workbench.editor.EditorAdapter;
\r
19 import org.simantics.utils.ui.ExceptionUtils;
\r
21 public class ExternalEditorAdapter extends AbstractResourceEditorAdapter implements EditorAdapter {
\r
23 public ExternalEditorAdapter() {
\r
24 super("External Editor",Activator.imageDescriptorFromPlugin("com.famfamfam.silk", "icons/page.png"));
\r
29 public boolean canHandle(ReadGraph g, Resource r) throws DatabaseException {
\r
30 GraphFileResource gf = GraphFileResource.getInstance(g);
\r
31 DocumentResource doc = DocumentResource.getInstance(g);
\r
32 if (!g.isInstanceOf(r, doc.FileDocument))
\r
34 String filename = g.getPossibleRelatedValue(r, gf.HasResourceName);
\r
35 return filename != null;
\r
39 protected void openEditor(final Resource input) throws Exception {
\r
40 SimanticsUI.getSession().asyncRequest(new ReadRequest() {
\r
43 public void run(ReadGraph graph) throws DatabaseException {
\r
44 final File file = GraphFileUtil.toTempFile(graph, input);
\r
45 file.deleteOnExit();
\r
46 Display.getDefault().asyncExec(new Runnable() {
\r
51 if (file.exists() && file.canRead()) {
\r
53 Editors.openExternalEditor(file);
\r
54 } catch (PartInitException e) {
\r
55 ExceptionUtils.logAndShowError(e);
\r