]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/documents/OpenPlainTextDocumentAdapter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / documents / OpenPlainTextDocumentAdapter.java
diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/documents/OpenPlainTextDocumentAdapter.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/documents/OpenPlainTextDocumentAdapter.java
new file mode 100644 (file)
index 0000000..83c58e8
--- /dev/null
@@ -0,0 +1,113 @@
+package org.simantics.modeling.ui.documents;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+\r
+import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.core.runtime.Platform;\r
+import org.eclipse.ui.IEditorPart;\r
+import org.eclipse.ui.IPartListener;\r
+import org.eclipse.ui.IWorkbenchPage;\r
+import org.eclipse.ui.IWorkbenchPart;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.eclipse.ui.editors.text.EditorsUI;\r
+import org.eclipse.ui.ide.IDE;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.common.request.PossibleTypedParent;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.document.DocumentResource;\r
+import org.simantics.layer0.Layer0;\r
+import org.simantics.modeling.ui.Activator;\r
+import org.simantics.simulation.ontology.SimulationResource;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.ui.workbench.editor.AbstractResourceEditorAdapter;\r
+import org.simantics.utils.FileUtils;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class OpenPlainTextDocumentAdapter extends AbstractResourceEditorAdapter {\r
+\r
+    public OpenPlainTextDocumentAdapter() {\r
+        super("Text Editor", Activator.COMPOSITE_ICON);\r
+    }\r
+\r
+    @Override\r
+    public boolean canHandle(ReadGraph g, Resource r) throws DatabaseException {\r
+       DocumentResource DOC = DocumentResource.getInstance(g);\r
+        return g.isInstanceOf(r, DOC.PlainTextDocument);\r
+    }\r
+\r
+    @Override\r
+    public void openEditor(final Resource r) throws Exception {\r
+        SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
+            @Override\r
+            public void run(ReadGraph g) throws DatabaseException {\r
+                Layer0 L0 = Layer0.getInstance(g);\r
+               DocumentResource DOC = DocumentResource.getInstance(g);\r
+                String documentName = g.getPossibleRelatedValue(r, L0.HasName);\r
+                if (documentName == null)\r
+                    documentName = "";\r
+                final String text = g.getPossibleRelatedValue(r, DOC.PlainTextDocument_text, Bindings.STRING);\r
+                if (text == null)\r
+                    return;\r
+\r
+                try {\r
+                       final Resource model = g.syncRequest(new PossibleTypedParent(r, SimulationResource.getInstance(g).Model));\r
+                       final String dir = model == null ? "" + r.getResourceId() : (String)(g.getRelatedValue(model, L0.HasName));\r
+                    IPath state = Platform.getStateLocation(Platform.getBundle(Activator.PLUGIN_ID));\r
+                    final File stateDir = new File(state.toFile(), dir);\r
+                    stateDir.mkdirs();\r
+                    final File tempFile = new File(stateDir, FileUtils.escapeFileName(documentName) + ".txt");\r
+                    FileUtils.writeFile(tempFile, text.getBytes("US-ASCII"));\r
+\r
+                    PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {\r
+                        @Override\r
+                        public void run() {\r
+                            try {\r
+                                final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();\r
+                                final IEditorPart editor = IDE.openEditor(page, tempFile.toURI(), EditorsUI.DEFAULT_TEXT_EDITOR_ID, true);\r
+                                page.addPartListener(new IPartListener() {\r
+                                    @Override\r
+                                    public void partOpened(IWorkbenchPart part) {\r
+                                    }\r
+                                    @Override\r
+                                    public void partDeactivated(IWorkbenchPart part) {\r
+                                    }\r
+                                    @Override\r
+                                    public void partClosed(IWorkbenchPart part) {\r
+                                        if (part == editor) {\r
+                                            page.removePartListener(this);\r
+                                            if (!PlatformUI.getWorkbench().isClosing()) {\r
+                                                try {\r
+                                                    FileUtils.deleteAll(stateDir);\r
+                                                } catch (IOException e) {\r
+                                                    ErrorLogger.defaultLogError(e);\r
+                                                }\r
+                                            }\r
+                                        }\r
+                                    }\r
+                                    @Override\r
+                                    public void partBroughtToTop(IWorkbenchPart part) {\r
+                                    }\r
+                                    @Override\r
+                                    public void partActivated(IWorkbenchPart part) {\r
+                                    }\r
+                                });\r
+                            } catch (Exception e) {\r
+                                ErrorLogger.defaultLogError(e);\r
+                            }\r
+                        }\r
+                    });\r
+                } catch (IOException e1) {\r
+                    ErrorLogger.defaultLogError(e1);\r
+                }\r
+            }\r
+        });\r
+    }\r
+\r
+}\r