X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FOpenModuleEditor.java;fp=cms%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FOpenModuleEditor.java;h=bf07e49521331eff6e86dc4ab69762c84dd7a10a;hb=ecc22e604e47533c79de9cecdcdeacbc752cbff1;hp=0000000000000000000000000000000000000000;hpb=e07ded4632e53f8b8869763bc1f1f4091361e76e;p=gpl%2Fargeo-slc.git diff --git a/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenModuleEditor.java b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenModuleEditor.java new file mode 100644 index 000000000..bf07e4952 --- /dev/null +++ b/cms/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/OpenModuleEditor.java @@ -0,0 +1,83 @@ +package org.argeo.slc.client.ui.dist.commands; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.jcr.Session; + +import org.argeo.jcr.JcrUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.SlcTypes; +import org.argeo.slc.client.ui.dist.DistPlugin; +import org.argeo.slc.client.ui.dist.editors.ArtifactVersionEditor; +import org.argeo.slc.client.ui.dist.editors.ModularDistVersionEditor; +import org.argeo.slc.client.ui.dist.editors.ModuleEditorInput; +import org.argeo.slc.repo.RepoService; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Open the relevant editor for a given module node of a given repository + * workspace. For the time being, modules can be artifacts or + * modularDistributions + */ +public class OpenModuleEditor extends AbstractHandler { + public final static String ID = DistPlugin.PLUGIN_ID + ".openModuleEditor"; + public final static String DEFAULT_LABEL = "Open relevant editor"; + + // use local node repo and repository factory to retrieve and log to + // relevant repository + public final static String PARAM_REPO_NODE_PATH = "param.repoNodePath"; + // use URI and repository factory to retrieve and ANONYMOUSLY log in + // relevant repository + public final static String PARAM_REPO_URI = "param.repoUri"; + public final static String PARAM_WORKSPACE_NAME = "param.workspaceName"; + public final static String PARAM_MODULE_PATH = "param.modulePath"; + + /* DEPENDENCY INJECTION */ + private RepoService repoService; + + public Object execute(ExecutionEvent event) throws ExecutionException { + String repoNodePath = event.getParameter(PARAM_REPO_NODE_PATH); + String repoUri = event.getParameter(PARAM_REPO_URI); + String workspaceName = event.getParameter(PARAM_WORKSPACE_NAME); + String modulePath = event.getParameter(PARAM_MODULE_PATH); + + Session businessSession = null; + try { + businessSession = repoService.getRemoteSession(repoNodePath, + repoUri, workspaceName); + + Node module = businessSession.getNode(modulePath); + ModuleEditorInput mei = new ModuleEditorInput(repoNodePath, + repoUri, workspaceName, modulePath); + + // Choose correct editor based on its mixin + if (module.isNodeType(SlcTypes.SLC_MODULAR_DISTRIBUTION)) + HandlerUtil.getActiveWorkbenchWindow(event).getActivePage() + .openEditor(mei, ModularDistVersionEditor.ID); + else + HandlerUtil.getActiveWorkbenchWindow(event).getActivePage() + .openEditor(mei, ArtifactVersionEditor.ID); + } catch (RepositoryException e) { + throw new SlcException("Unexpected error while " + + "getting repoNode info for repoNode at path " + + repoNodePath, e); + } catch (PartInitException e) { + throw new SlcException("Unexpected error while " + + "opening editor for workspace " + workspaceName + + " with URI " + repoUri + " and repoNode at path " + + repoNodePath, e); + } finally { + JcrUtils.logoutQuietly(businessSession); + } + return null; + } + + /* DEPENDENCY INJECTION */ + public void setRepoService(RepoService repoService) { + this.repoService = repoService; + } +} \ No newline at end of file