1 package org.eparapher.rcp.actions;
2
3 import java.io.File;
4
5 import org.eclipse.core.runtime.IPath;
6 import org.eclipse.core.runtime.Path;
7 import org.eclipse.jface.action.Action;
8 import org.eclipse.jface.action.IAction;
9 import org.eclipse.jface.viewers.ISelection;
10 import org.eclipse.jface.viewers.IStructuredSelection;
11 import org.eclipse.jface.viewers.TreeViewer;
12 import org.eclipse.swt.SWT;
13 import org.eclipse.swt.widgets.FileDialog;
14 import org.eclipse.ui.IEditorDescriptor;
15 import org.eclipse.ui.IEditorInput;
16 import org.eclipse.ui.IEditorRegistry;
17 import org.eclipse.ui.IWorkbench;
18 import org.eclipse.ui.IWorkbenchPage;
19 import org.eclipse.ui.IWorkbenchWindow;
20 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
21 import org.eclipse.ui.PartInitException;
22 import org.eclipse.ui.PlatformUI;
23 import org.eparapher.core.tools.JVMSettings;
24 import org.eparapher.rcp.editors.FileEditorInput;
25 import org.eparapher.rcp.tools.RCPSettings;
26 import org.eparapher.rcp.tools.eParapherTools;
27 import org.eparapher.rcp.views.documents.SecuredDocumentsView.TreeObject;
28 import org.eparapher.rcp.views.documents.SecuredDocumentsView.TreeParent;
29
30
31 public class OpenEditorAction extends Action implements IWorkbenchWindowActionDelegate {
32
33 private TreeViewer viewer;
34
35 private IWorkbenchWindow fWindow;
36
37
38
39
40 public void init(IWorkbenchWindow window) {
41 fWindow= window;
42 }
43
44 public OpenEditorAction(TreeViewer mviewer) {
45 viewer = mviewer;
46 }
47
48
49 public void run() {
50
51 ISelection selection = viewer.getSelection();
52 Object obj = ((IStructuredSelection)selection).getFirstElement();
53
54 if (obj instanceof TreeParent)
55 eParapherTools.debugMessage("Couldn't edit directory!");
56 else {
57 TreeObject to = (TreeObject) obj;
58
59
60
61 File file= new File(to.getFilePath());
62 if (file != null) {
63 IEditorInput input= createEditorInput(file);
64 String editorId= getEditorId(file);
65
66 IWorkbenchPage page = null;
67 if ( fWindow != null)
68 page= fWindow.getActivePage();
69 else
70 page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
71
72 try {
73 page.openEditor(input, editorId);
74 } catch (PartInitException e) {
75 e.printStackTrace();
76 }
77 }
78 }
79 }
80
81 private File queryFile() {
82 FileDialog dialog= new FileDialog(fWindow.getShell(), SWT.OPEN);
83 dialog.setText("Open File");
84 String path= dialog.open();
85 if (path != null && path.length() > 0)
86 return new File(path);
87 return null;
88 }
89
90 private String getEditorId(File file) {
91 IWorkbench workbench = null;
92 if ( fWindow != null)
93 workbench= fWindow.getWorkbench();
94 else
95 workbench = PlatformUI.getWorkbench();
96
97 IEditorRegistry editorRegistry= workbench.getEditorRegistry();
98 IEditorDescriptor[] descriptor= editorRegistry.getEditors(file.getName());
99 if (descriptor != null && descriptor.length>0) {
100 if (descriptor.length>1) {
101 for (int i = 0; i < descriptor.length; i++) {
102 IEditorDescriptor editorDescriptor = descriptor[i];
103 if ( !editorDescriptor.getId().equals("org.eclipse.ui.DefaultTextEditor") )
104
105
106
107 if ( editorDescriptor.getId().startsWith("org.eparapher.rcp.editors"))
108 return editorDescriptor.getId();
109 }
110
111 return descriptor[descriptor.length-1].getId();
112 }
113
114 else if ( !JVMSettings.isWindowsOS() &&
115 descriptor[0].getId().equals("org.eparapher.rcp.editors.ole.OleEditor"))
116 return "org.eparapher.rcp.editors.BasicMultiPageEditor";
117 return descriptor[0].getId();
118 }
119 return "org.eparapher.rcp.editors.BasicMultiPageEditor";
120 }
121
122 private IEditorInput createEditorInput(File file) {
123 IPath location= new Path(file.getAbsolutePath());
124 FileEditorInput input= new FileEditorInput(location);
125 return input;
126 }
127
128 public void dispose() {
129 fWindow= null;
130
131 }
132
133 public void run(IAction action) {
134 run();
135 }
136
137 public void selectionChanged(IAction action, ISelection selection) {
138 }
139
140 }