]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/OpenModuleEditor.java
work on file downloads
[gpl/argeo-slc.git] / plugins / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / commands / OpenModuleEditor.java
index 26d32e70692e31e02eff11418d8376efa29d91e5..95a9aa4b7878bfa14e045634af24726f0db09c9f 100644 (file)
 package org.argeo.slc.client.ui.dist.commands;
 
 import javax.jcr.Node;
-import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.jcr.RepositoryFactory;
 import javax.jcr.Session;
 
-import org.argeo.jcr.ArgeoNames;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.client.ui.dist.DistPlugin;
-import org.argeo.slc.client.ui.dist.editors.ArtifactEditor;
+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.client.ui.dist.editors.DistributionEditor;
 import org.argeo.slc.jcr.SlcTypes;
-import org.argeo.slc.repo.RepoUtils;
-import org.argeo.util.security.Keyring;
+import org.argeo.slc.repo.RepoService;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
@@ -53,60 +49,33 @@ public class OpenModuleEditor extends AbstractHandler {
        // 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_ARTIFACT_PATH = "param.artifactPath";
+       public final static String PARAM_MODULE_PATH = "param.modulePath";
 
        /* DEPENDENCY INJECTION */
-       private Repository localRepository;
-       // We must log in the corresponding repository to get the node and be able
-       // to decide which editor to open depending on its mixin
-       private RepositoryFactory repositoryFactory;
-       private Keyring keyring;
+       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 artifactPath = event.getParameter(PARAM_ARTIFACT_PATH);
+               String modulePath = event.getParameter(PARAM_MODULE_PATH);
 
-               Session localSession = null;
                Session businessSession = null;
-               Node repoNode = null;
-
                try {
-                       if (repoNodePath != null && repoUri == null) {
-                               try {
-                                       localSession = localRepository.login();
-                                       if (repoNodePath != null
-                                                       && localSession.nodeExists(repoNodePath))
-                                               repoNode = localSession.getNode(repoNodePath);
-
-                                       businessSession = RepoUtils.getCorrespondingSession(
-                                                       repositoryFactory, keyring, repoNode, repoUri,
-                                                       workspaceName);
-                                       repoUri = repoNode.getProperty(ArgeoNames.ARGEO_URI)
-                                                       .getString();
-
-                               } catch (RepositoryException e) {
-                                       throw new SlcException("Cannot log to workspace "
-                                                       + workspaceName + " for repo defined in "
-                                                       + repoNodePath, e);
-                               } finally {
-                                       JcrUtils.logoutQuietly(localSession);
-                               }
+                       businessSession = repoService.getRemoteSession(repoNodePath,
+                                       repoUri, workspaceName);
 
-                       }
+                       Node module = businessSession.getNode(modulePath);
+                       ModuleEditorInput mei = new ModuleEditorInput(repoNodePath,
+                                       repoUri, workspaceName, modulePath);
 
-                       ModuleEditorInput wei = new ModuleEditorInput(repoNodePath,
-                                       repoUri, workspaceName, artifactPath);
-                       Node artifact = businessSession.getNode(artifactPath);
-
-                       // Choose correct editor based on the artifact mixin
-                       if (artifact.isNodeType(SlcTypes.SLC_MODULAR_DISTRIBUTION))
+                       // Choose correct editor based on its mixin
+                       if (module.isNodeType(SlcTypes.SLC_MODULAR_DISTRIBUTION))
                                HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()
-                                               .openEditor(wei, DistributionEditor.ID);
+                                               .openEditor(mei, ModularDistVersionEditor.ID);
                        else
                                HandlerUtil.getActiveWorkbenchWindow(event).getActivePage()
-                                               .openEditor(wei, ArtifactEditor.ID);
+                                               .openEditor(mei, ArtifactVersionEditor.ID);
                } catch (RepositoryException e) {
                        throw new SlcException("Unexpected error while "
                                        + "getting repoNode info for repoNode at path "
@@ -116,21 +85,14 @@ public class OpenModuleEditor extends AbstractHandler {
                                        + "opening editor for workspace " + workspaceName
                                        + " with URI " + repoUri + " and repoNode at path "
                                        + repoNodePath, e);
+               } finally {
+                       JcrUtils.logoutQuietly(businessSession);
                }
                return null;
        }
 
        /* DEPENDENCY INJECTION */
-       public void setLocalRepository(Repository localRepository) {
-               this.localRepository = localRepository;
+       public void setRepoService(RepoService repoService) {
+               this.repoService = repoService;
        }
-
-       public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
-               this.repositoryFactory = repositoryFactory;
-       }
-
-       public void setKeyring(Keyring keyring) {
-               this.keyring = keyring;
-       }
-
 }
\ No newline at end of file