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.setup.for5_0;
35
36 import info.magnolia.jcr.util.NodeTypes;
37
38 import java.util.ArrayList;
39 import java.util.Arrays;
40 import java.util.List;
41
42 import javax.jcr.RepositoryException;
43 import javax.jcr.nodetype.NodeDefinition;
44 import javax.jcr.nodetype.NodeType;
45 import javax.jcr.nodetype.NodeTypeDefinition;
46 import javax.jcr.nodetype.NodeTypeIterator;
47 import javax.jcr.nodetype.NodeTypeManager;
48 import javax.jcr.nodetype.NodeTypeTemplate;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56
57
58 public class RemoveMetaDataInNodeTypeDefinitionTask extends info.magnolia.setup.nodetype.AbstractNodeTypeRegistrationTask {
59
60 private final Logger log = LoggerFactory.getLogger(RemoveMetaDataInNodeTypeDefinitionTask.class);
61
62 public RemoveMetaDataInNodeTypeDefinitionTask(String name, String description, String workspaceName) {
63 super(name, description, workspaceName);
64 }
65
66
67
68
69 @Override
70 public List<NodeTypeDefinition> getNodeTypesToRegister(NodeTypeManager nodeTypeManager) {
71 List<NodeTypeDefinition> list = new ArrayList<NodeTypeDefinition>();
72 try {
73 NodeTypeIterator iterator = nodeTypeManager.getAllNodeTypes();
74 while (iterator.hasNext()) {
75 NodeType nodeType = iterator.nextNodeType();
76 if (nodeType.getDeclaredChildNodeDefinitions() != null) {
77
78 List<NodeDefinition> childNodeDefinition = Arrays.asList(nodeType.getDeclaredChildNodeDefinitions());
79 for (NodeDefinition nodeDefinition : childNodeDefinition) {
80
81 if (nodeDefinition.getDefaultPrimaryType() != null && NodeTypes.MetaData.NAME.equals(nodeDefinition.getDefaultPrimaryType().getName())) {
82 NodeTypeTemplate newNodeType = createNodeTypeWithoutMetaData(nodeTypeManager, nodeType, nodeDefinition);
83 log.info("Add the following NodeType '{}' that currently defined a metaData nodeType as child node to the list.", newNodeType.getName());
84 list.add(newNodeType);
85 break;
86 }
87 }
88 }
89 }
90 } catch (RepositoryException e) {
91 log.error("Could not create a List of existing NodeTpe declaring metaData as childNodeDefinition", e);
92 }
93
94 return list;
95 }
96
97 @Override
98 public List<String> getNodeTypesToUnregister(NodeTypeManager nodeTypeManager) {
99 return null;
100 }
101
102
103
104
105
106 private NodeTypeTemplate createNodeTypeWithoutMetaData(NodeTypeManager nodeTypeManager, NodeType nodeType, NodeDefinition metaDataNode) throws RepositoryException {
107 NodeTypeTemplate ntt = nodeTypeManager.createNodeTypeTemplate();
108 ntt.setDeclaredSuperTypeNames(nodeType.getDeclaredSupertypeNames());
109 ntt.setMixin(nodeType.isMixin());
110 ntt.setName(nodeType.getName());
111 ntt.setOrderableChildNodes(nodeType.hasOrderableChildNodes());
112 ntt.setPrimaryItemName(nodeType.getPrimaryItemName());
113 ntt.setQueryable(nodeType.isQueryable());
114 ntt.getPropertyDefinitionTemplates().addAll(Arrays.asList(nodeType.getDeclaredPropertyDefinitions()));
115 List<NodeDefinition> childNodeDefinition = new ArrayList<NodeDefinition>();
116 childNodeDefinition.addAll(Arrays.asList(nodeType.getDeclaredChildNodeDefinitions()));
117 childNodeDefinition.remove(metaDataNode);
118 ntt.getNodeDefinitionTemplates().addAll(childNodeDefinition);
119 return ntt;
120 }
121 }