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.beans.config.ContentRepository;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.cms.core.ItemType;
39 import info.magnolia.cms.exchange.ActivationManager;
40 import info.magnolia.cms.exchange.ActivationManagerFactory;
41 import info.magnolia.cms.exchange.Subscriber;
42 import info.magnolia.cms.security.Permission;
43 import info.magnolia.cms.security.Role;
44 import info.magnolia.cms.security.Security;
45 import info.magnolia.cms.util.ContentUtil;
46 import info.magnolia.importexport.Bootstrapper;
47 import info.magnolia.module.InstallContext;
48 import info.magnolia.module.model.ModuleDefinition;
49 import info.magnolia.module.model.RepositoryDefinition;
50
51 import javax.jcr.RepositoryException;
52
53
54
55
56
57
58
59 public class SetupModuleRepositoriesTask extends AbstractTask {
60
61 public SetupModuleRepositoriesTask() {
62 super("Setup module repositories", "Bootstrap empty repositories, grant them to superuser and subscribe them so that activation can be used.");
63 }
64
65
66 public void execute(InstallContext ctx) throws TaskExecutionException {
67 try {
68 final ModuleDefinition def = ctx.getCurrentModuleDefinition();
69
70 for (RepositoryDefinition repDef : def.getRepositories()) {
71 for (final String workspace : repDef.getWorkspaces()) {
72
73 if (!ContentRepository.checkIfInitialized(workspace)) {
74 final String[] bootstrapDirs = Bootstrapper.getBootstrapDirs();
75 Bootstrapper.bootstrapRepository(bootstrapDirs, workspace, new Bootstrapper.BootstrapFilter() {
76 public boolean accept(String filename) {
77 return filename.startsWith(workspace + ".");
78 }
79 });
80 }
81
82
83 grantRepositoryToSuperuser(workspace);
84 subscribeRepository(workspace);
85 }
86 }
87 }
88 catch (Throwable e) {
89 throw new TaskExecutionException("Could not bootstrap workspace: " + e.getMessage(), e);
90 }
91
92 }
93
94 private void grantRepositoryToSuperuser(String workspace) {
95
96 final Role superuser = Security.getRoleManager().getRole("superuser");
97 superuser.addPermission(workspace, "/*", Permission.ALL);
98 }
99
100
101
102
103
104 private void subscribeRepository(String repository) throws TaskExecutionException {
105 ActivationManager sManager = ActivationManagerFactory.getActivationManager();
106 for (Subscriber subscriber : sManager.getSubscribers()) {
107 if (!subscriber.isSubscribed("/", repository)) {
108 Content subscriptionsNode = ContentUtil.getContent(ContentRepository.CONFIG, sManager.getConfigPath()
109 + "/"
110 + subscriber.getName()
111 + "/subscriptions");
112 try {
113 Content newSubscription = subscriptionsNode.createContent(repository, ItemType.CONTENTNODE);
114 newSubscription.createNodeData("toURI").setValue("/");
115 newSubscription.createNodeData("repository").setValue(repository);
116 newSubscription.createNodeData("fromURI").setValue("/");
117
118 }
119 catch (RepositoryException re) {
120 throw new TaskExecutionException("wasn't able to subscribe repository [" + repository + "]", re);
121 }
122 }
123 }
124 }
125 }