package org.codefaces.ui.internal.commands; import org.codefaces.ui.internal.CodeFacesUIActivator; import org.codefaces.ui.internal.editors.NullEditorInput; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; public class OpenEditorHandler extends AbstractHandler { public static final String ID = "org.codefaces.ui.internal.commands.openEditor"; public static final String VARIABLE_EDITOR_INPUT = "org.codefaces.ui.internal.commands.openEditor.editorInput"; public static final String PARAMETER_EDITOR_ID = "org.codefaces.ui.internal.commands.openEditor.editorId"; public static final String VARIABLE_MATCH_FLAG = "org.codefaces.ui.internal.commands.openEditor.matchFlag"; @Override public Object execute(ExecutionEvent event) throws ExecutionException { String id = event.getParameter(PARAMETER_EDITOR_ID); if (id == null) { return null; } IEditorInput input = new NullEditorInput(); int matchFlag = IWorkbenchPage.MATCH_ID; IEvaluationContext context = (IEvaluationContext) event .getApplicationContext(); if (context != null) { input = getEditorInput(context.getVariable(VARIABLE_EDITOR_INPUT)); matchFlag = getMatchFlag(context.getVariable(VARIABLE_MATCH_FLAG)); } openEditor((IEditorInput) input, (String) id, matchFlag); return null; } private IEditorInput getEditorInput(Object input) { if (input instanceof IEditorInput) { return (IEditorInput) input; } return new NullEditorInput(); } private int getMatchFlag(Object flag) { if (flag instanceof Integer) { return (Integer) flag; } return IWorkbenchPage.MATCH_ID; } private void openEditor(IEditorInput input, String id, int matchFlag) { try { IWorkbenchPage page = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); page.openEditor(input, id, true, matchFlag); } catch (PartInitException e) { IStatus status = new Status(Status.ERROR, CodeFacesUIActivator.PLUGIN_ID, "Errors occurs when opening editor " + id, e); CodeFacesUIActivator.getDefault().getLog().log(status); } } }