*/
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;
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;
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;
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
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 {
}
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()
}
}
+ @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 {
public Repository getRepository() {
return repository;
}
+ }
+ @Override
+ public void dispose() {
+ super.dispose();
}
private class DistributionsDCL implements IDoubleClickListener {
}
}
}
-
}
-}
+}
\ No newline at end of file