]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - eclipse/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/views/DistributionsView.java
Normalize distirbution command
[gpl/argeo-slc.git] / eclipse / plugins / org.argeo.slc.client.ui.dist / src / main / java / org / argeo / slc / client / ui / dist / views / DistributionsView.java
index 7ec83600f2e13abb07c9bb59115ddcd6351c9475..6ac3d79ad783f5c90c4dea819217122746eb87a9 100644 (file)
@@ -15,6 +15,9 @@
  */
 package org.argeo.slc.client.ui.dist.views;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -25,9 +28,18 @@ import org.argeo.eclipse.ui.AbstractTreeContentProvider;
 import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.slc.client.ui.dist.DistPlugin;
+import org.argeo.slc.client.ui.dist.commands.CopyWorkspace;
+import org.argeo.slc.client.ui.dist.commands.CreateWorkspace;
+import org.argeo.slc.client.ui.dist.commands.DeleteWorkspace;
+import org.argeo.slc.client.ui.dist.commands.ManageWorkspaceAuth;
+import org.argeo.slc.client.ui.dist.commands.NormalizeDistribution;
 import org.argeo.slc.client.ui.dist.editors.DistributionEditor;
 import org.argeo.slc.client.ui.dist.editors.DistributionEditorInput;
+import org.argeo.slc.client.ui.dist.utils.CommandHelpers;
 import org.argeo.slc.jcr.SlcNames;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
@@ -36,7 +48,9 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.TreeViewerColumn;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.ViewPart;
 
@@ -75,7 +89,19 @@ public class DistributionsView extends ViewPart implements SlcNames {
 
                viewer.setContentProvider(new DistributionsContentProvider());
                viewer.addDoubleClickListener(new DistributionsDCL());
+
+               MenuManager menuManager = new MenuManager();
+               Menu menu = menuManager.createContextMenu(viewer.getTree());
+               menuManager.addMenuListener(new IMenuListener() {
+                       public void menuAboutToShow(IMenuManager manager) {
+                               contextMenuAboutToShow(manager);
+                       }
+               });
+               viewer.getTree().setMenu(menu);
+               getSite().registerContextMenu(menuManager, viewer);
+
                viewer.setInput(getSite());
+
        }
 
        @Override
@@ -83,10 +109,79 @@ public class DistributionsView extends ViewPart implements SlcNames {
                viewer.getTree().setFocus();
        }
 
+       /**
+        * Force refresh of the whole view
+        */
+       public void refresh() {
+               viewer.setContentProvider(new DistributionsContentProvider());
+       }
+
        public void setRepository(Repository repository) {
                this.repository = repository;
        }
 
+       /** Programatically configure the context menu */
+       protected void contextMenuAboutToShow(IMenuManager menuManager) {
+               IWorkbenchWindow window = DistPlugin.getDefault().getWorkbench()
+                               .getActiveWorkbenchWindow();
+               // Get Current selected item :
+               Object firstElement = ((IStructuredSelection) viewer.getSelection())
+                               .getFirstElement();
+
+               if (firstElement instanceof TreeParent) {
+                       TreeParent tp = (TreeParent) firstElement;
+                       String wsName = tp.getName();
+
+                       // Build conditions depending on element type (repo or distribution
+                       // for the time being)
+                       boolean isDistribElem = false; // , isRepoElem = false;
+
+                       // if (tp instanceof RepositoryElem){
+                       // isRepoElem = true;
+                       // } else
+                       if (tp instanceof DistributionElem) {
+                               isDistribElem = true;
+                       }
+
+                       // create workspace
+                       CommandHelpers.refreshCommand(menuManager, window,
+                                       CreateWorkspace.ID, CreateWorkspace.DEFAULT_LABEL,
+                                       CreateWorkspace.DEFAULT_ICON_PATH,
+                                       tp instanceof RepositoryElem);
+
+                       // Normalize workspace
+                       Map<String, String> params = new HashMap<String, String>();
+                       params.put(NormalizeDistribution.PARAM_WORKSPACE, wsName);
+                       CommandHelpers.refreshParameterizedCommand(menuManager, window,
+                                       NormalizeDistribution.ID,
+                                       NormalizeDistribution.DEFAULT_LABEL,
+                                       NormalizeDistribution.DEFAULT_ICON_PATH, isDistribElem,
+                                       params);
+
+                       // Copy workspace
+                       params = new HashMap<String, String>();
+                       params.put(CopyWorkspace.PARAM_WORKSPACE_NAME, wsName);
+                       CommandHelpers.refreshParameterizedCommand(menuManager, window,
+                                       CopyWorkspace.ID, CopyWorkspace.DEFAULT_LABEL,
+                                       CopyWorkspace.DEFAULT_ICON_PATH, isDistribElem, params);
+
+                       // Delete Workspace
+                       params = new HashMap<String, String>();
+                       params.put(DeleteWorkspace.PARAM_WORKSPACE_NAME, wsName);
+                       CommandHelpers.refreshParameterizedCommand(menuManager, window,
+                                       DeleteWorkspace.ID, DeleteWorkspace.DEFAULT_LABEL,
+                                       DeleteWorkspace.DEFAULT_ICON_PATH, isDistribElem, params);
+
+                       // Manage workspace authorizations
+                       params = new HashMap<String, String>();
+                       params.put(ManageWorkspaceAuth.PARAM_WORKSPACE_NAME, wsName);
+                       CommandHelpers.refreshParameterizedCommand(menuManager, window,
+                                       ManageWorkspaceAuth.ID, ManageWorkspaceAuth.DEFAULT_LABEL,
+                                       ManageWorkspaceAuth.DEFAULT_ICON_PATH, isDistribElem,
+                                       params);
+               }
+       }
+
        private class DistributionsContentProvider extends
                        AbstractTreeContentProvider {
 
@@ -97,12 +192,12 @@ public class DistributionsView extends ViewPart implements SlcNames {
        }
 
        private static class RepositoryElem extends TreeParent {
-               private final Repository repository;
+               // private final Repository repository;
                private Session defaultSession;
 
                public RepositoryElem(String name, Repository repository) {
                        super(name);
-                       this.repository = repository;
+                       // this.repository = repository;
                        try {
                                defaultSession = repository.login();
                                String[] workspaceNames = defaultSession.getWorkspace()
@@ -114,6 +209,14 @@ public class DistributionsView extends ViewPart implements SlcNames {
                        }
                }
 
+               @Override
+               public synchronized void dispose() {
+                       if (log.isTraceEnabled())
+                               log.trace("Disposing RepositoryElement");
+                       if (defaultSession != null)
+                               defaultSession.logout();
+                       super.dispose();
+               }
        }
 
        private static class DistributionElem extends TreeParent {
@@ -133,7 +236,11 @@ public class DistributionsView extends ViewPart implements SlcNames {
                public Repository getRepository() {
                        return repository;
                }
+       }
 
+       @Override
+       public void dispose() {
+               super.dispose();
        }
 
        private class DistributionsDCL implements IDoubleClickListener {
@@ -158,6 +265,5 @@ public class DistributionsView extends ViewPart implements SlcNames {
                                }
                        }
                }
-
        }
-}
+}
\ No newline at end of file