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.templating.setup.for4_0;
35
36 import java.util.Collection;
37 import java.util.Iterator;
38 import java.util.List;
39
40 import info.magnolia.cms.core.Content;
41 import info.magnolia.cms.core.HierarchyManager;
42 import info.magnolia.cms.core.ItemType;
43 import info.magnolia.cms.core.NodeData;
44 import info.magnolia.module.InstallContext;
45 import info.magnolia.module.delta.AllModulesNodeOperation;
46 import info.magnolia.module.delta.TaskExecutionException;
47
48 import javax.jcr.RepositoryException;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56
57
58
59 public class NestPropertiesAllModulesNodeTask extends AllModulesNodeOperation {
60
61 private static Logger log = LoggerFactory.getLogger(NestPropertiesAllModulesNodeTask.class);
62
63 private final String baseNodeName;
64 private final String newNodeType;
65 private final String newNodeName;
66 private final List excludePropertiesList;
67
68 public NestPropertiesAllModulesNodeTask(String name, String description, String baseNodeName, List excludePropertiesList, String newNodeName, String newNodeType) {
69 super(name, description);
70 this.baseNodeName = baseNodeName;
71 this.newNodeName = newNodeName;
72 this.excludePropertiesList = excludePropertiesList;
73 this.newNodeType = newNodeType;
74 }
75
76
77 protected void operateOnModuleNode(Content node, HierarchyManager hm, InstallContext ctx)
78 throws RepositoryException, TaskExecutionException {
79 try {
80 if(node.hasContent(baseNodeName)){
81 Content baseNode = node.getContent(baseNodeName);
82 if(baseNode.hasChildren(ItemType.CONTENTNODE.getSystemName())) {
83 final Collection children = baseNode.getChildren(ItemType.CONTENTNODE.getSystemName());
84 final Iterator it = children.iterator();
85 Content baseNodeChild;
86 while(it.hasNext()) {
87 baseNodeChild = (Content) it.next();
88 Content newNode;
89 if(baseNodeChild.hasContent(newNodeName) ) {
90 newNode = baseNodeChild.getContent(newNodeName);
91 } else {
92 newNode = baseNodeChild.createContent(newNodeName, newNodeType);
93 }
94 if(baseNodeChild.hasChildren()) {
95 final Collection childrenNodeData = baseNodeChild.getNodeDataCollection();
96 final Iterator it2 = childrenNodeData.iterator();
97 NodeData nodeData;
98 while(it2.hasNext()) {
99 nodeData = (NodeData) it2.next();
100 if(!excludePropertiesList.contains(nodeData.getName())) {
101 newNode.createNodeData(nodeData.getName(), nodeData.getValue());
102 baseNodeChild.deleteNodeData(nodeData.getName());
103 }
104 }
105 }
106 }
107
108 }
109
110 }
111 }
112 catch(RepositoryException e){
113 throw e;
114 }
115 catch (Exception e) {
116 throw new TaskExecutionException("can't reconfigure tasks", e);
117 }
118
119 }
120
121 }
122
123