1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.delta;
35
36 import info.magnolia.cms.exchange.ActivationManager;
37 import info.magnolia.cms.exchange.ActivationManagerFactory;
38 import info.magnolia.cms.exchange.Subscriber;
39 import info.magnolia.cms.security.Permission;
40 import info.magnolia.context.MgnlContext;
41 import info.magnolia.jcr.util.NodeTypes;
42 import info.magnolia.jcr.util.NodeUtil;
43 import info.magnolia.module.InstallContext;
44 import info.magnolia.module.model.ModuleDefinition;
45 import info.magnolia.module.model.RepositoryDefinition;
46 import info.magnolia.repository.RepositoryConstants;
47
48 import javax.jcr.Node;
49 import javax.jcr.RepositoryException;
50
51
52
53
54 public class SetupModuleRepositoriesTask extends AbstractTask {
55
56 public SetupModuleRepositoriesTask() {
57 super("Setup module repositories", "Bootstrap empty repositories, grant them to superuser and subscribe them so that activation can be used.");
58 }
59
60
61 @Override
62 public void execute(InstallContext ctx) throws TaskExecutionException {
63 try {
64 final ModuleDefinition def = ctx.getCurrentModuleDefinition();
65
66 for (RepositoryDefinition repDef : def.getRepositories()) {
67 for (final String workspace : repDef.getWorkspaces()) {
68 ArrayDelegateTaskArrayDelegateTask">ArrayDelegateTask arrayDelegateTask = new ArrayDelegateTask(String.format("Bootstrap the %s if empty, grant it to superuser and subscribe it if activation is installed so that activation can be used.", workspace),
69 new AddPermissionTask("", "superuser", workspace, "/*", Permission.ALL, false),
70 new SubscribeWorkspaceTask(workspace));
71 arrayDelegateTask.execute(ctx);
72 }
73 }
74 } catch (Throwable e) {
75 throw new TaskExecutionException("Could not bootstrap workspace: " + e.getMessage(), e);
76 }
77 }
78
79
80
81
82 private class SubscribeWorkspaceTask extends AbstractRepositoryTask {
83
84 private String workspace;
85
86 public SubscribeWorkspaceTask(String workspace) {
87 super("Register workspace to subscribers", "If activation module is registered than register workspace to all subscribers");
88 this.workspace = workspace;
89 }
90
91 @Override
92 protected void doExecute(InstallContext installContext) throws RepositoryException, TaskExecutionException {
93 if (installContext.isModuleRegistered("activation")) {
94 ActivationManager sManager = ActivationManagerFactory.getActivationManager();
95 for (Subscriber subscriber : sManager.getSubscribers()) {
96 if (!subscriber.isSubscribed("/", workspace)) {
97 Node newSubscription = NodeUtil.createPath(MgnlContext.getJCRSession(RepositoryConstants.CONFIG).getRootNode(),
98 sManager.getConfigPath() + "/" + subscriber.getName() + "/subscriptions/" + workspace, NodeTypes.ContentNode.NAME);
99 newSubscription.setProperty("toURI", "/");
100 newSubscription.setProperty("repository", workspace);
101 newSubscription.setProperty("fromURI", "/");
102 }
103 }
104 }
105 }
106 }
107 }