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.util.EntityEditorInput; import org.argeo.jcr.JcrUtils; import org.argeo.node.NodeUtils; import org.argeo.suite.SuiteException; import org.argeo.suite.workbench.AsUiPlugin; import org.argeo.suite.workbench.parts.DefaultDashboardEditor; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; /** Workaround to enable opening of a default editor */ public class OpenDashboardEditor extends AbstractHandler { public final static String ID = AsUiPlugin.PLUGIN_ID + ".openDashboardEditor"; private Repository repository; public Object execute(ExecutionEvent event) throws ExecutionException { Session session = null; try { // TODO check roles session = repository.login(); IWorkbenchPage iwPage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); Node homeNode = NodeUtils.getUserHome(session); EntityEditorInput eei = new EntityEditorInput(homeNode.getIdentifier()); IEditorPart iep = iwPage.findEditor(eei); if (iep == null) { iwPage.openEditor(eei, DefaultDashboardEditor.ID); } else iwPage.activate(iep); } catch (RepositoryException | PartInitException re) { throw new SuiteException("Unable to open dashboard", re); } finally { JcrUtils.logoutQuietly(session); } return null; } public void setRepository(Repository repository) { this.repository = repository; } }