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=6e8d53734ce0b3ec64a58b47b3df83e805bad441;hb=706b98df2c68382d7bd501fa05cb128f329087ee;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..6e8d53734 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,37 +1,70 @@ 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.OpenWorkspaceEditor; +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()); - try { - DistPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow().getActivePage() - .openEditor(dei, DistributionEditor.ID); - } catch (PartInitException e) { - ErrorFeedback.show( - "Cannot open editor for " + we.getWorkspaceName(), e); + + 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(); + else { + WorkspaceElem we = (WorkspaceElem) obj; + + try { + RepoElem repoElem = we.getRepoElem(); + Map params = new HashMap(); + + Node 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 while " + + "setting parameters of command OpenWorkspaceEditor", + re); + } } + treeViewer.refresh(obj); } } } \ No newline at end of file