package org.eparapher.rcp.actions; import java.io.File; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eparapher.core.EParapherManager; import org.eparapher.core.tools.JVMSettings; import org.eparapher.rcp.editors.FileEditorInput; import org.eparapher.rcp.tools.RCPSettings; import org.eparapher.rcp.tools.eParapherTools; import org.eparapher.rcp.views.documents.SecuredDocumentsView.TreeObject; import org.eparapher.rcp.views.documents.SecuredDocumentsView.TreeParent; public class OpenEditorAction extends Action implements IWorkbenchWindowActionDelegate { private TreeViewer viewer; private IWorkbenchWindow fWindow; /* * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow) */ public void init(IWorkbenchWindow window) { fWindow= window; } public OpenEditorAction(TreeViewer mviewer) { viewer = mviewer; } public void run() { ISelection selection = viewer.getSelection(); Object obj = ((IStructuredSelection)selection).getFirstElement(); if (obj instanceof TreeParent) EParapherManager.getInstance().getUI().infoMessage("Couldn't edit directory!"); else { TreeObject to = (TreeObject) obj; //eParapherTools.debugMessage("Opening " + to.getFilePath() + " not implemented yet"); //http://tools.osmosis.gr/blog/archives/2005/11/pojo_editor_a_e.html File file= new File(to.getFilePath()); if (file != null) { IEditorInput input= createEditorInput(file); String editorId= getEditorId(file); IWorkbenchPage page = null; if ( fWindow != null) page= fWindow.getActivePage(); else page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { page.openEditor(input, editorId); } catch (PartInitException e) { e.printStackTrace(); } } } } private File queryFile() { FileDialog dialog= new FileDialog(fWindow.getShell(), SWT.OPEN); dialog.setText("Open File"); //$NON-NLS-1$ String path= dialog.open(); if (path != null && path.length() > 0) return new File(path); return null; } private String getEditorId(File file) { IWorkbench workbench = null; if ( fWindow != null) workbench= fWindow.getWorkbench(); else workbench = PlatformUI.getWorkbench(); IEditorRegistry editorRegistry= workbench.getEditorRegistry(); IEditorDescriptor[] descriptor= editorRegistry.getEditors(file.getName()); if (descriptor != null && descriptor.length>0) { if (descriptor.length>1) { for (int i = 0; i < descriptor.length; i++) { IEditorDescriptor editorDescriptor = descriptor[i]; if ( !editorDescriptor.getId().equals("org.eclipse.ui.DefaultTextEditor") ) /* if ( !EPConfig.isWindowsOS() && !editorDescriptor.getId().equals("org.eparapher.rcp.editors.ole.OleEditor")) return editorDescriptor.getId();*/ if ( editorDescriptor.getId().startsWith("org.eparapher.rcp.editors")) return editorDescriptor.getId(); } //TODO : enhance editor selection return descriptor[descriptor.length-1].getId(); } else if ( !JVMSettings.isWindowsOS() && descriptor[0].getId().equals("org.eparapher.rcp.editors.ole.OleEditor")) return "org.eparapher.rcp.editors.BasicMultiPageEditor"; return descriptor[0].getId(); } return "org.eparapher.rcp.editors.BasicMultiPageEditor"; //$NON-NLS-1$ } private IEditorInput createEditorInput(File file) { IPath location= new Path(file.getAbsolutePath()); FileEditorInput input= new FileEditorInput(location); return input; } public void dispose() { fWindow= null; } public void run(IAction action) { run(); } public void selectionChanged(IAction action, ISelection selection) { } }