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%2Fcommands%2FCopyWorkspace.java;fp=plugins%2Forg.argeo.slc.client.ui.dist%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fclient%2Fui%2Fdist%2Fcommands%2FCopyWorkspace.java;h=2711694621c7d14c16b3a3d18889f50ca34ba688;hb=de4970e4ea18056ef32137834bb0ac59b23117ce;hp=eee669dfa6a828f9f632c7ca2e1122692254ec0b;hpb=db18b11452e63b6290c0b8e33a754c9c5c470639;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyWorkspace.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyWorkspace.java index eee669dfa..271169462 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyWorkspace.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CopyWorkspace.java @@ -15,21 +15,25 @@ */ package org.argeo.slc.client.ui.dist.commands; +import javax.jcr.Credentials; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; +import javax.jcr.security.Privilege; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; +import org.argeo.jcr.JcrUtils; import org.argeo.slc.client.ui.dist.DistPlugin; import org.argeo.slc.client.ui.dist.utils.CommandHelpers; +import org.argeo.slc.client.ui.dist.views.DistributionsView; +import org.argeo.slc.client.ui.dist.views.DistributionsView.DistributionViewSelectedElement; import org.argeo.slc.repo.RepoUtils; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; /** @@ -37,49 +41,51 @@ import org.eclipse.ui.IWorkbenchWindow; */ public class CopyWorkspace extends AbstractHandler { - private static final Log log = LogFactory.getLog(CopyWorkspace.class); + // private static final Log log = LogFactory.getLog(CopyWorkspace.class); public final static String ID = DistPlugin.ID + ".copyWorkspace"; - public final static String PARAM_WORKSPACE_NAME = DistPlugin.ID - + ".workspaceName"; public final static String DEFAULT_LABEL = "Duplicate"; public final static String DEFAULT_ICON_PATH = "icons/addItem.gif"; - /* DEPENDENCY INJECTION */ private Repository repository; + private Credentials credentials; + private String wkspName; + private String slcRole = "ROLE_SLC"; public Object execute(ExecutionEvent event) throws ExecutionException { - String srcWorkspaceName = event.getParameter(PARAM_WORKSPACE_NAME); - - if (log.isTraceEnabled()) - log.debug("WORKSPACE " + srcWorkspaceName + " About to be copied"); - - // MessageDialog.openWarning(DistPlugin.getDefault() - // .getWorkbench().getDisplay().getActiveShell(), - // "WARNING", "Not yet implemented"); - // return null; - IWorkbenchWindow iww = DistPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow(); + IWorkbenchPart view = iww.getActivePage().getActivePart(); + if (view instanceof DistributionsView) { + DistributionViewSelectedElement dvse = ((DistributionsView) view) + .getSelectedElement(); + if (dvse != null && (dvse.isWorkspace)) { + repository = dvse.repository; + credentials = dvse.credentials; + wkspName = dvse.wkspName; + } + } + if (repository == null || wkspName == null) + return null; + InputDialog inputDialog = new InputDialog(iww.getShell(), - "New copy of the current workspace", + "New copy of workspace " + wkspName, "Choose a name for the workspace to create", "", null); inputDialog.open(); String newWorkspaceName = inputDialog.getValue(); Session srcSession = null; Session newSession = null; try { - srcSession = repository.login(srcWorkspaceName); + srcSession = repository.login(credentials, wkspName); // Create the workspace srcSession.getWorkspace().createWorkspace(newWorkspaceName); Node srcRootNode = srcSession.getRootNode(); // log in the newly created workspace - newSession = repository.login(newWorkspaceName); - // newSession.save(); + newSession = repository.login(credentials, newWorkspaceName); Node newRootNode = newSession.getRootNode(); RepoUtils.copy(srcRootNode, newRootNode); newSession.save(); - + JcrUtils.addPrivilege(newSession, "/", slcRole, Privilege.JCR_ALL); CommandHelpers.callCommand(RefreshDistributionsView.ID); } catch (RepositoryException re) { throw new ArgeoException(