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.rssaggregator.setup;
35
36 import java.util.Collection;
37 import java.util.Iterator;
38
39 import info.magnolia.cms.core.Content;
40 import info.magnolia.cms.core.HierarchyManager;
41 import info.magnolia.cms.core.NodeData;
42 import info.magnolia.cms.util.ContentUtil;
43 import info.magnolia.module.InstallContext;
44 import info.magnolia.module.data.DataConsts;
45 import info.magnolia.module.delta.AbstractRepositoryTask;
46 import info.magnolia.module.delta.TaskExecutionException;
47
48 import javax.jcr.RepositoryException;
49
50 import org.apache.commons.lang.StringUtils;
51
52
53
54
55
56
57
58 public class ChangeNodeTypes extends AbstractRepositoryTask {
59
60 public ChangeNodeTypes() {
61 super("Nodetypes change", "Changes the node type of folders in RSS Aggregator feeds.");
62 }
63
64 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
65 final HierarchyManager hm = ctx.getHierarchyManager("data");
66 try {
67 Collection<Content> feedDefinitions = hm.getRoot().getContent("rssaggregator").getChildren("RssAggregator");
68 for (Content feedDef : feedDefinitions) {
69 ContentUtil.visit(feedDef, new TypeChanger());
70 }
71 } catch (Exception e) {
72 throw new TaskExecutionException("Cant' update folder node types in users workspace: " + e.getMessage(), e);
73 }
74 }
75
76 private final static class TypeChanger implements ContentUtil.PostVisitor {
77
78 public void postVisit(Content node) throws Exception {
79 Content parent = null;
80 if (node.getLevel() == 0) {
81
82 return;
83 }
84
85 if ("RssAggregator".equals(node.getItemType().getSystemName())) {
86
87 return;
88 }
89 parent = node.getParent();
90 String name = node.getName();
91 Content tmp = parent.createContent("tmp---tmp---" + name, DataConsts.MODULE_DATA_CONTENT_NODE_TYPE);
92 Collection children = node.getChildren(ContentUtil.EXCLUDE_META_DATA_CONTENT_FILTER);
93 for (Iterator iterator = children.iterator(); iterator.hasNext();) {
94 Content object = (Content) iterator.next();
95
96 ContentUtil.moveInSession(object, tmp.getHandle() + "/" + object.getName());
97 }
98 Collection<NodeData> nodeDatas = node.getNodeDataCollection();
99 for (NodeData nodeData : nodeDatas) {
100 tmp.createNodeData(nodeData.getName(), nodeData.getValue());
101 }
102 node.delete();
103
104 ContentUtil.moveInSession(tmp, StringUtils.removeEnd(parent.getHandle(), "/") + "/" + name);
105 }
106
107 public void visit(Content node) throws Exception {
108
109 }
110 }
111 }