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%2FPublishWorkspace.java;h=76b0586e980f3ffcea44896b705e9e215cf65a63;hb=48b6f7647f12f4b96d1914bcafc95efd7f43cc43;hp=59d34fecb5d9a951d4b87794bfcf507a004eee6a;hpb=60fc68b90de1f65a0d64fe385033e1a9e6de5eef;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/PublishWorkspace.java b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/PublishWorkspace.java index 59d34fecb..76b0586e9 100644 --- a/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/PublishWorkspace.java +++ b/plugins/org.argeo.slc.client.ui.dist/src/main/java/org/argeo/slc/client/ui/dist/commands/PublishWorkspace.java @@ -16,54 +16,61 @@ 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; import org.argeo.ArgeoException; import org.argeo.jcr.JcrUtils; +import org.argeo.slc.SlcConstants; import org.argeo.slc.client.ui.dist.DistPlugin; -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.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.MessageDialog; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.jface.resource.ImageDescriptor; /** - * Publish the current workspace by giving REOD_ONLY rights to anonymous. + * Publish the current workspace by giving READ_ONLY rights to anonymous. */ - public class PublishWorkspace extends AbstractHandler { // private static final Log log = LogFactory.getLog(PublishWorkspace.class); + public final static String ID = DistPlugin.ID + ".publishWorkspace"; - public final static String DEFAULT_LABEL = "Publish workspace"; - public final static String DEFAULT_ICON_PATH = "icons/publish.gif"; + public final static String DEFAULT_LABEL = "Make Public"; + public final static ImageDescriptor DEFAULT_ICON = DistPlugin + .getImageDescriptor("icons/publish.gif"); + + public final static String PARAM_WORKSPACE_NAME = "workspaceName"; + public final static String PARAM_TARGET_REPO_PATH = "targetRepoPath"; - private String publicRole = "anonymous"; + // DEPENDENCY INJECTION + private RepositoryFactory repositoryFactory; + private Keyring keyring; + private Repository nodeRepository; - private String workspaceName; - private Repository repository; - private Credentials credentials; + private String publicRole = SlcConstants.USER_ANONYMOUS; public Object execute(ExecutionEvent event) throws ExecutionException { - 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; - workspaceName = dvse.wkspName; - } - } + String targetRepoPath = event.getParameter(PARAM_TARGET_REPO_PATH); + String workspaceName = event.getParameter(PARAM_WORKSPACE_NAME); + + Session nodeSession = null; + Session session = null; + + try { + nodeSession = nodeRepository.login(); + Node repoNode = nodeSession.getNode(targetRepoPath); + Repository repository = RepoUtils.getRepository(repositoryFactory, + keyring, repoNode); + Credentials credentials = RepoUtils.getRepositoryCredentials( + keyring, repoNode); - if (repository != null && workspaceName != null) { String msg = "Are you sure you want to publish this distribution: " + workspaceName + " ?"; boolean result = MessageDialog.openConfirm(DistPlugin.getDefault() @@ -71,31 +78,34 @@ public class PublishWorkspace extends AbstractHandler { "Confirm publication", msg); if (result) { - - Session session = null; - try { - session = repository.login(credentials, workspaceName); - JcrUtils.addPrivilege(session, "/", publicRole, - Privilege.JCR_READ); - JcrUtils.logoutQuietly(session); - // CommandHelpers.callCommand(RefreshDistributionsView.ID); - } catch (RepositoryException re) { - throw new ArgeoException( - "Unexpected error while publishing workspace " - + workspaceName, re); - } finally { - JcrUtils.logoutQuietly(session); - } + session = repository.login(credentials, workspaceName); + JcrUtils.addPrivilege(session, "/", publicRole, + Privilege.JCR_READ); + session.save(); + JcrUtils.logoutQuietly(session); + // CommandHelpers.callCommand(RefreshDistributionsView.ID); } + } catch (RepositoryException re) { + throw new ArgeoException( + "Unexpected error while publishing workspace " + + workspaceName, re); + } finally { + JcrUtils.logoutQuietly(session); + JcrUtils.logoutQuietly(nodeSession); } return null; } - public void setRepository(Repository repository) { - this.repository = repository; + /* DEPENDENCY INJECTION */ + public void setNodeRepository(Repository nodeRepository) { + this.nodeRepository = nodeRepository; + } + + public void setRepositoryFactory(RepositoryFactory repositoryFactory) { + this.repositoryFactory = repositoryFactory; } - public void setWorkspaceName(String workspaceName) { - this.workspaceName = workspaceName; + public void setKeyring(Keyring keyring) { + this.keyring = keyring; } } \ No newline at end of file