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%2FCreateWorkspace.java;h=09694af5e12ecbe72a4aa2e3aa0799c21b467383;hb=4f3bb80a2e00103d45dd5a7959dec55ad79cf15c;hp=812e6eebe01e4d35e0380f783d10a1f9fea15075;hpb=afcf7dcb9a713994a0ae277a6fbc5818a578e5fb;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/CreateWorkspace.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java index 812e6eebe..09694af5e 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/CreateWorkspace.java @@ -15,8 +15,11 @@ */ 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.RepositoryFactory; import javax.jcr.Session; import javax.jcr.security.Privilege; @@ -26,11 +29,14 @@ 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.repo.RepoUtils; +import org.argeo.util.security.Keyring; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.InputDialog; -import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.handlers.HandlerUtil; /** * Create a new empty workspace in the current repository. @@ -39,50 +45,78 @@ import org.eclipse.ui.IWorkbenchWindow; public class CreateWorkspace extends AbstractHandler { private static final Log log = LogFactory.getLog(CreateWorkspace.class); public final static String ID = DistPlugin.ID + ".createWorkspace"; - public final static String DEFAULT_LABEL = "Create new workspace"; + public final static String PARAM_TARGET_REPO_PATH = "targetRepoPath"; + public final static String PARAM_WORKSPACE_PREFIX = "workspacePrefix"; + public final static String DEFAULT_LABEL = "Create workspace..."; public final static String DEFAULT_ICON_PATH = "icons/addItem.gif"; private String slcRole = "ROLE_SLC"; - /* DEPENDENCY INJECTION */ - private Repository repository; + // DEPENDENCY INJECTION + private RepositoryFactory repositoryFactory; + private Keyring keyring; + private Repository nodeRepository; public Object execute(ExecutionEvent event) throws ExecutionException { - IWorkbenchWindow iww = DistPlugin.getDefault().getWorkbench() - .getActiveWorkbenchWindow(); - // TODO : add an input validator - InputDialog inputDialog = new InputDialog(iww.getShell(), - "New workspace", "Choose a name for the workspace to create", - "", null); - inputDialog.open(); - String workspaceName = inputDialog.getValue(); + + String targetRepoPath = event.getParameter(PARAM_TARGET_REPO_PATH); + String prefix = event.getParameter(PARAM_WORKSPACE_PREFIX); + + Session nodeSession = null; Session session = null; try { - session = repository.login(); + nodeSession = nodeRepository.login(); + Node repoNode = nodeSession.getNode(targetRepoPath); + Repository repository = RepoUtils.getRepository(repositoryFactory, + keyring, repoNode); + Credentials credentials = RepoUtils.getRepositoryCredentials( + keyring, repoNode); + + // TODO : add an input validator + InputDialog inputDialog = new InputDialog(HandlerUtil + .getActiveWorkbenchWindow(event).getShell(), + "Workspace name?", + "Choose a name for the workspace to create", + prefix == null ? "" : prefix + "-", null); + int result = inputDialog.open(); + + String workspaceName = inputDialog.getValue(); + + // Canceled by user + if (result == Dialog.CANCEL || workspaceName == null + || "".equals(workspaceName.trim())) + return null; + + session = repository.login(credentials); session.getWorkspace().createWorkspace(workspaceName); JcrUtils.logoutQuietly(session); // init new workspace - session = repository.login(workspaceName); + session = repository.login(credentials, workspaceName); JcrUtils.addPrivilege(session, "/", slcRole, Privilege.JCR_ALL); CommandHelpers.callCommand(RefreshDistributionsView.ID); + if (log.isTraceEnabled()) + log.trace("WORKSPACE " + workspaceName + " CREATED"); + } catch (RepositoryException re) { throw new ArgeoException( "Unexpected error while creating the new workspace.", re); } finally { JcrUtils.logoutQuietly(session); + JcrUtils.logoutQuietly(nodeSession); } - if (log.isTraceEnabled()) - log.trace("WORKSPACE " + workspaceName + " CREATED"); return null; } /* DEPENDENCY INJECTION */ - public void setRepository(Repository repository) { - this.repository = repository; + public void setNodeRepository(Repository nodeRepository) { + this.nodeRepository = nodeRepository; } - public void setSlcRole(String slcRole) { - this.slcRole = slcRole; + public void setRepositoryFactory(RepositoryFactory repositoryFactory) { + this.repositoryFactory = repositoryFactory; } + public void setKeyring(Keyring keyring) { + this.keyring = keyring; + } } \ No newline at end of file