]> git.argeo.org Git - gpl/argeo-slc.git/blob - legacy/org.argeo.slc.client.ui.dist/src/org/argeo/slc/client/ui/dist/commands/PublishWorkspace.java
9c868cde6772cb267dc9919535031feb290c4d3b
[gpl/argeo-slc.git] / legacy / org.argeo.slc.client.ui.dist / src / org / argeo / slc / client / ui / dist / commands / PublishWorkspace.java
1 package org.argeo.slc.client.ui.dist.commands;
2
3 import javax.jcr.Credentials;
4 import javax.jcr.Node;
5 import javax.jcr.Repository;
6 import javax.jcr.RepositoryException;
7 import javax.jcr.RepositoryFactory;
8 import javax.jcr.Session;
9 import javax.jcr.security.Privilege;
10
11 import org.argeo.api.security.Keyring;
12 import org.argeo.jcr.JcrUtils;
13 import org.argeo.slc.SlcConstants;
14 import org.argeo.slc.SlcException;
15 import org.argeo.slc.client.ui.dist.DistPlugin;
16 import org.argeo.slc.repo.RepoUtils;
17 import org.eclipse.core.commands.AbstractHandler;
18 import org.eclipse.core.commands.ExecutionEvent;
19 import org.eclipse.core.commands.ExecutionException;
20 import org.eclipse.jface.dialogs.MessageDialog;
21 import org.eclipse.jface.resource.ImageDescriptor;
22
23 /** Publish the current workspace by giving READ_ONLY rights to anonymous */
24 public class PublishWorkspace extends AbstractHandler {
25 // private static final Log log = LogFactory.getLog(PublishWorkspace.class);
26
27 public final static String ID = DistPlugin.PLUGIN_ID + ".publishWorkspace";
28 public final static String DEFAULT_LABEL = "Make Public";
29 public final static ImageDescriptor DEFAULT_ICON = DistPlugin
30 .getImageDescriptor("icons/publish.gif");
31
32 public final static String PARAM_WORKSPACE_NAME = "workspaceName";
33 public final static String PARAM_TARGET_REPO_PATH = "targetRepoPath";
34
35 // DEPENDENCY INJECTION
36 private RepositoryFactory repositoryFactory;
37 private Keyring keyring;
38 private Repository nodeRepository;
39
40 private String publicRole = SlcConstants.USER_ANONYMOUS;
41
42 public Object execute(ExecutionEvent event) throws ExecutionException {
43 String targetRepoPath = event.getParameter(PARAM_TARGET_REPO_PATH);
44 String workspaceName = event.getParameter(PARAM_WORKSPACE_NAME);
45
46 Session nodeSession = null;
47 Session session = null;
48
49 try {
50 nodeSession = nodeRepository.login();
51 Node repoNode = nodeSession.getNode(targetRepoPath);
52 Repository repository = RepoUtils.getRepository(repositoryFactory,
53 keyring, repoNode);
54 Credentials credentials = RepoUtils.getRepositoryCredentials(
55 keyring, repoNode);
56
57 String msg = "Are you sure you want to publish this distribution: "
58 + workspaceName + " ?";
59 boolean result = MessageDialog.openConfirm(DistPlugin.getDefault()
60 .getWorkbench().getDisplay().getActiveShell(),
61 "Confirm publication", msg);
62
63 if (result) {
64 session = repository.login(credentials, workspaceName);
65 JcrUtils.addPrivilege(session, "/", publicRole,
66 Privilege.JCR_READ);
67 session.save();
68 JcrUtils.logoutQuietly(session);
69 // CommandHelpers.callCommand(RefreshDistributionsView.ID);
70 }
71 } catch (RepositoryException re) {
72 throw new SlcException(
73 "Unexpected error while publishing workspace "
74 + workspaceName, re);
75 } finally {
76 JcrUtils.logoutQuietly(session);
77 JcrUtils.logoutQuietly(nodeSession);
78 }
79 return null;
80 }
81
82 /* DEPENDENCY INJECTION */
83 public void setNodeRepository(Repository nodeRepository) {
84 this.nodeRepository = nodeRepository;
85 }
86
87 public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
88 this.repositoryFactory = repositoryFactory;
89 }
90
91 public void setKeyring(Keyring keyring) {
92 this.keyring = keyring;
93 }
94 }