]> 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/controllers/DistTreeDoubleClickListener.java
Full refactoring of the UI distribution view:
[gpl/argeo-slc.git] / plugins / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / controllers / DistTreeDoubleClickListener.java
index 45fcfa16892ef1137e2d3406d8c16335b9bfb5b8..6e8d53734ce0b3ec64a58b47b3df83e805bad441 100644 (file)
@@ -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<String, String> params = new HashMap<String, String>();
+
+                                       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