X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcontrollers%2FDistTreeDoubleClickListener.java;h=c272672707cb2e99fdeb10e0d3d4dc896de01a49;hb=3355fbcd66a8fc061b8ddbf9d287ee4d17734d0e;hp=45fcfa16892ef1137e2d3406d8c16335b9bfb5b8;hpb=0d236262a853a1286b317c30d64d4692bc21c7a4;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/controllers/DistTreeDoubleClickListener.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/controllers/DistTreeDoubleClickListener.java index 45fcfa168..c27267270 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/controllers/DistTreeDoubleClickListener.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/controllers/DistTreeDoubleClickListener.java @@ -1,36 +1,95 @@ package org.argeo.slc.client.ui.dist.controllers; -import org.argeo.eclipse.ui.ErrorFeedback; -import org.argeo.slc.client.ui.dist.DistPlugin; -import org.argeo.slc.client.ui.dist.editors.DistributionEditor; -import org.argeo.slc.client.ui.dist.editors.DistributionEditorInput; +import java.util.HashMap; +import java.util.Map; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +import org.argeo.eclipse.ui.utils.CommandUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.client.ui.dist.commands.OpenModuleEditor; +import org.argeo.slc.client.ui.dist.commands.OpenWorkspaceEditor; +import org.argeo.slc.client.ui.dist.model.ModularDistVersionElem; +import org.argeo.slc.client.ui.dist.model.RepoElem; import org.argeo.slc.client.ui.dist.model.WorkspaceElem; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.ui.PartInitException; +import org.eclipse.jface.viewers.TreeViewer; -/** Listen to double-clicks */ +/** Listen to double-clicks on the distributions view tree. */ public class DistTreeDoubleClickListener implements IDoubleClickListener { + private TreeViewer treeViewer; + + public DistTreeDoubleClickListener(TreeViewer treeViewer) { + this.treeViewer = treeViewer; + } + public void doubleClick(DoubleClickEvent event) { if (event.getSelection() == null || event.getSelection().isEmpty()) return; Object obj = ((IStructuredSelection) event.getSelection()) .getFirstElement(); - if (obj instanceof WorkspaceElem) { - WorkspaceElem we = (WorkspaceElem) obj; - DistributionEditorInput dei = new DistributionEditorInput(we - .getRepoElem().getRepository(), we.getRepoElem() - .getCredentials(), we.getRepoElem().getLabel(), we - .getRepoElem().getDescription(), we.getWorkspaceName()); + + if (obj instanceof RepoElem) { + RepoElem rpNode = (RepoElem) obj; + if (!rpNode.isConnected()) { + rpNode.login(); + treeViewer.refresh(obj); + } + } else if (obj instanceof WorkspaceElem) { + WorkspaceElem wn = (WorkspaceElem) obj; + if (!wn.isConnected()) { + wn.login(); + treeViewer.refresh(obj); + } else { + WorkspaceElem we = (WorkspaceElem) obj; + Node repoNode = null; + try { + RepoElem repoElem = we.getRepoElem(); + Map params = new HashMap(); + + repoNode = repoElem.getRepoNode(); + if (repoNode != null) + params.put(OpenWorkspaceEditor.PARAM_REPO_NODE_PATH, + repoNode.getPath()); + params.put(OpenWorkspaceEditor.PARAM_REPO_URI, + repoElem.getUri()); + params.put(OpenWorkspaceEditor.PARAM_WORKSPACE_NAME, + we.getWorkspaceName()); + CommandUtils.callCommand(OpenWorkspaceEditor.ID, params); + } catch (RepositoryException re) { + throw new SlcException("Cannot get path for node " + + repoNode + " while " + + "setting parameters of command " + + "OpenWorkspaceEditor", re); + } + } + } else if (obj instanceof ModularDistVersionElem) { + ModularDistVersionElem modDistElem = (ModularDistVersionElem) obj; + WorkspaceElem wkspElem = modDistElem.getWorkspaceElem(); + Node repoNode = null; + Node moduleNode = modDistElem.getModularDistVersionNode(); try { - DistPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow().getActivePage() - .openEditor(dei, DistributionEditor.ID); - } catch (PartInitException e) { - ErrorFeedback.show( - "Cannot open editor for " + we.getWorkspaceName(), e); + RepoElem repoElem = wkspElem.getRepoElem(); + Map params = new HashMap(); + repoNode = repoElem.getRepoNode(); + if (repoNode != null) + params.put(OpenModuleEditor.PARAM_REPO_NODE_PATH, + repoNode.getPath()); + params.put(OpenModuleEditor.PARAM_REPO_URI, repoElem.getUri()); + params.put(OpenModuleEditor.PARAM_WORKSPACE_NAME, + wkspElem.getWorkspaceName()); + params.put(OpenModuleEditor.PARAM_MODULE_PATH, + moduleNode.getPath()); + CommandUtils.callCommand(OpenModuleEditor.ID, params); + } catch (RepositoryException re) { + throw new SlcException("Cannot get path for node " + repoNode + + " or " + moduleNode + + " while setting parameters for " + + "command OpenModuleEditor", re); } } }