View Javadoc

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  	 * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
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  				//eParapherTools.debugMessage("Opening " + to.getFilePath() + " not implemented yet");
59  				
60  				//http://tools.osmosis.gr/blog/archives/2005/11/pojo_editor_a_e.html
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"); //$NON-NLS-1$
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 /*						if ( !EPConfig.isWindowsOS() && 
105 							 !editorDescriptor.getId().equals("org.eparapher.rcp.editors.ole.OleEditor"))
106 								return editorDescriptor.getId();*/
107 						if ( editorDescriptor.getId().startsWith("org.eparapher.rcp.editors"))
108 							return editorDescriptor.getId();
109 				}
110 				//TODO : enhance editor selection
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"; //$NON-NLS-1$
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 }