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.resources.setup;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.module.InstallContext;
39 import info.magnolia.module.delta.AbstractTask;
40 import info.magnolia.module.delta.TaskExecutionException;
41 import info.magnolia.module.resources.ResourcesModule;
42
43 import javax.jcr.Node;
44 import javax.jcr.Session;
45
46 import org.apache.commons.lang3.StringUtils;
47
48
49
50
51 public class InstallReferenceResourceTask extends AbstractTask {
52 private final String resource;
53 private final String reference;
54 private final String template;
55 private final boolean stripExtension;
56
57 public InstallReferenceResourceTask(String resource, String reference, String template) {
58 this(resource, reference, template, true);
59 }
60
61
62
63
64
65
66 public InstallReferenceResourceTask(String resource, String reference, String template, boolean stripExtension) {
67 super("Install referenced resource", "Creates the " + resource + " with a reference to "+reference);
68 this.resource = resource;
69 this.reference = reference;
70 this.template = template;
71 this.stripExtension = stripExtension;
72 }
73
74 @Override
75 public void execute(InstallContext installContext) throws TaskExecutionException {
76 try {
77 String name = StringUtils.substringAfterLast(resource, "/");
78 String path = StringUtils.substringBeforeLast(resource, "/");
79
80 Session session = installContext.getJCRSession(ResourcesModule.DEFAULT_WORKSPACE);
81 Node parent = NodeUtil.createPath(session.getRootNode(), path, NodeTypes.Folder.NAME);
82
83 Node resource;
84 if(parent.hasNode(name)){
85 resource = parent.getNode(name);
86 resource.setPrimaryType(NodeTypes.Content.NAME);
87 } else {
88 resource = parent.addNode(name, NodeTypes.Content.NAME);
89 }
90 NodeTypes.Renderable.set(resource, template);
91 resource.setProperty("reference", stripExtension ? StringUtils.substringBeforeLast(reference, ".") : reference);
92
93 } catch (Exception e) {
94 throw new TaskExecutionException("Can't install resource [" + resource + "]", e);
95 }
96
97 }
98
99 }