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.templating.module.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
60 public class NestPropertiesAllModulesNodeTask extends AllModulesNodeOperation {
61
62 private static Logger log = LoggerFactory.getLogger(NestPropertiesAllModulesNodeTask.class);
63
64 private final String baseNodeName;
65 private final String newNodeType;
66 private final String newNodeName;
67 private final List excludePropertiesList;
68
69 public NestPropertiesAllModulesNodeTask(String name, String description, String baseNodeName, List excludePropertiesList, String newNodeName, String newNodeType) {
70 super(name, description);
71 this.baseNodeName = baseNodeName;
72 this.newNodeName = newNodeName;
73 this.excludePropertiesList = excludePropertiesList;
74 this.newNodeType = newNodeType;
75 }
76
77
78 @Override
79 protected void operateOnModuleNode(Content node, HierarchyManager hm, InstallContext ctx)
80 throws RepositoryException, TaskExecutionException {
81 try {
82 if(node.hasContent(baseNodeName)){
83 Content baseNode = node.getContent(baseNodeName);
84 if(baseNode.hasChildren(ItemType.CONTENTNODE.getSystemName())) {
85 final Collection children = baseNode.getChildren(ItemType.CONTENTNODE.getSystemName());
86 final Iterator it = children.iterator();
87 Content baseNodeChild;
88 while(it.hasNext()) {
89 baseNodeChild = (Content) it.next();
90 Content newNode;
91 if(baseNodeChild.hasContent(newNodeName) ) {
92 newNode = baseNodeChild.getContent(newNodeName);
93 } else {
94 newNode = baseNodeChild.createContent(newNodeName, newNodeType);
95 }
96 if(baseNodeChild.hasChildren()) {
97 final Collection childrenNodeData = baseNodeChild.getNodeDataCollection();
98 final Iterator it2 = childrenNodeData.iterator();
99 NodeData nodeData;
100 while(it2.hasNext()) {
101 nodeData = (NodeData) it2.next();
102 if(!excludePropertiesList.contains(nodeData.getName())) {
103 newNode.createNodeData(nodeData.getName(), nodeData.getValue());
104 baseNodeChild.deleteNodeData(nodeData.getName());
105 }
106 }
107 }
108 }
109
110 }
111
112 }
113 }
114 catch(RepositoryException e){
115 throw e;
116 }
117 catch (Exception e) {
118 throw new TaskExecutionException("can't reconfigure tasks", e);
119 }
120
121 }
122
123 }
124
125