package org.argeo.suite.workbench.commands; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.connect.ui.workbench.AppWorkbenchService; import org.argeo.connect.ui.workbench.NodeEditorInput; import org.argeo.jcr.JcrUtils; import org.argeo.suite.SuiteException; import org.argeo.suite.workbench.AsUiPlugin; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; /** Workaround to enable opening of a default editor */ public class OpenEntityEditor extends AbstractHandler { public final static String ID = AsUiPlugin.PLUGIN_ID + ".openEntityEditor"; public final static String PARAM_JCR_ID = "param.jcrId"; // public final static String PARAM_OPEN_FOR_EDIT = "param.openForEdit"; // public final static String PARAM_CTAB_ID = "param.cTabId"; private Repository repository; private AppWorkbenchService appWorkbenchService; public Object execute(ExecutionEvent event) throws ExecutionException { NodeEditorInput eei = null; Node entity = null; Session session = null; String jcrId = event.getParameter(PARAM_JCR_ID); try { session = repository.login(); if (jcrId != null) { entity = session.getNodeByIdentifier(jcrId); eei = new NodeEditorInput(jcrId); } else return null; String editorId = appWorkbenchService.getEntityEditorId(entity); if (editorId != null) { IWorkbenchWindow iww = HandlerUtil.getActiveWorkbenchWindow(event); IWorkbenchPage iwp = iww.getActivePage(); iwp.openEditor(eei, editorId); } } catch (PartInitException pie) { throw new SuiteException("Unexpected PartInitException while opening entity editor", pie); } catch (RepositoryException e) { throw new SuiteException("unexpected JCR error while opening editor", e); } finally { JcrUtils.logoutQuietly(session); } return null; } public void setRepository(Repository repository) { this.repository = repository; } public void setAppWorkbenchService(AppWorkbenchService appWorkbenchService) { this.appWorkbenchService = appWorkbenchService; } }