]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.modeling.ui.documents;\r
2 \r
3 import java.io.File;\r
4 import java.io.IOException;\r
5 \r
6 import org.eclipse.core.runtime.IPath;\r
7 import org.eclipse.core.runtime.Platform;\r
8 import org.eclipse.ui.IEditorPart;\r
9 import org.eclipse.ui.IPartListener;\r
10 import org.eclipse.ui.IWorkbenchPage;\r
11 import org.eclipse.ui.IWorkbenchPart;\r
12 import org.eclipse.ui.PlatformUI;\r
13 import org.eclipse.ui.editors.text.EditorsUI;\r
14 import org.eclipse.ui.ide.IDE;\r
15 import org.simantics.databoard.Bindings;\r
16 import org.simantics.db.ReadGraph;\r
17 import org.simantics.db.Resource;\r
18 import org.simantics.db.common.request.PossibleTypedParent;\r
19 import org.simantics.db.common.request.ReadRequest;\r
20 import org.simantics.db.exception.DatabaseException;\r
21 import org.simantics.document.DocumentResource;\r
22 import org.simantics.layer0.Layer0;\r
23 import org.simantics.modeling.ui.Activator;\r
24 import org.simantics.simulation.ontology.SimulationResource;\r
25 import org.simantics.ui.SimanticsUI;\r
26 import org.simantics.ui.workbench.editor.AbstractResourceEditorAdapter;\r
27 import org.simantics.utils.FileUtils;\r
28 import org.simantics.utils.ui.ErrorLogger;\r
29 \r
30 /**\r
31  * @author Tuukka Lehtonen\r
32  */\r
33 public class OpenPlainTextDocumentAdapter extends AbstractResourceEditorAdapter {\r
34 \r
35     public OpenPlainTextDocumentAdapter() {\r
36         super("Text Editor", Activator.COMPOSITE_ICON);\r
37     }\r
38 \r
39     @Override\r
40     public boolean canHandle(ReadGraph g, Resource r) throws DatabaseException {\r
41         DocumentResource DOC = DocumentResource.getInstance(g);\r
42         return g.isInstanceOf(r, DOC.PlainTextDocument);\r
43     }\r
44 \r
45     @Override\r
46     public void openEditor(final Resource r) throws Exception {\r
47         SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
48             @Override\r
49             public void run(ReadGraph g) throws DatabaseException {\r
50                 Layer0 L0 = Layer0.getInstance(g);\r
51                 DocumentResource DOC = DocumentResource.getInstance(g);\r
52                 String documentName = g.getPossibleRelatedValue(r, L0.HasName);\r
53                 if (documentName == null)\r
54                     documentName = "";\r
55                 final String text = g.getPossibleRelatedValue(r, DOC.PlainTextDocument_text, Bindings.STRING);\r
56                 if (text == null)\r
57                     return;\r
58 \r
59                 try {\r
60                         final Resource model = g.syncRequest(new PossibleTypedParent(r, SimulationResource.getInstance(g).Model));\r
61                         final String dir = model == null ? "" + r.getResourceId() : (String)(g.getRelatedValue(model, L0.HasName));\r
62                     IPath state = Platform.getStateLocation(Platform.getBundle(Activator.PLUGIN_ID));\r
63                     final File stateDir = new File(state.toFile(), dir);\r
64                     stateDir.mkdirs();\r
65                     final File tempFile = new File(stateDir, FileUtils.escapeFileName(documentName) + ".txt");\r
66                     FileUtils.writeFile(tempFile, text.getBytes("US-ASCII"));\r
67 \r
68                     PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {\r
69                         @Override\r
70                         public void run() {\r
71                             try {\r
72                                 final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();\r
73                                 final IEditorPart editor = IDE.openEditor(page, tempFile.toURI(), EditorsUI.DEFAULT_TEXT_EDITOR_ID, true);\r
74                                 page.addPartListener(new IPartListener() {\r
75                                     @Override\r
76                                     public void partOpened(IWorkbenchPart part) {\r
77                                     }\r
78                                     @Override\r
79                                     public void partDeactivated(IWorkbenchPart part) {\r
80                                     }\r
81                                     @Override\r
82                                     public void partClosed(IWorkbenchPart part) {\r
83                                         if (part == editor) {\r
84                                             page.removePartListener(this);\r
85                                             if (!PlatformUI.getWorkbench().isClosing()) {\r
86                                                 try {\r
87                                                     FileUtils.deleteAll(stateDir);\r
88                                                 } catch (IOException e) {\r
89                                                     ErrorLogger.defaultLogError(e);\r
90                                                 }\r
91                                             }\r
92                                         }\r
93                                     }\r
94                                     @Override\r
95                                     public void partBroughtToTop(IWorkbenchPart part) {\r
96                                     }\r
97                                     @Override\r
98                                     public void partActivated(IWorkbenchPart part) {\r
99                                     }\r
100                                 });\r
101                             } catch (Exception e) {\r
102                                 ErrorLogger.defaultLogError(e);\r
103                             }\r
104                         }\r
105                     });\r
106                 } catch (IOException e1) {\r
107                     ErrorLogger.defaultLogError(e1);\r
108                 }\r
109             }\r
110         });\r
111     }\r
112 \r
113 }\r