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;
35
36 import static info.magnolia.jcr.util.NodeTypeTemplateUtil.createNodeType;
37
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.setup.nodetype.AbstractNodeTypeRegistrationTask;
40
41 import java.util.Collections;
42 import java.util.List;
43
44 import javax.jcr.PropertyType;
45 import javax.jcr.RepositoryException;
46 import javax.jcr.nodetype.NodeTypeDefinition;
47 import javax.jcr.nodetype.NodeTypeManager;
48 import javax.jcr.nodetype.NodeTypeTemplate;
49 import javax.jcr.nodetype.PropertyDefinitionTemplate;
50 import javax.jcr.version.OnParentVersionAction;
51
52 import org.apache.jackrabbit.JcrConstants;
53
54 import com.google.common.collect.Lists;
55
56
57
58
59 public class AddLockableMixinToActivatableMixinTask extends AbstractNodeTypeRegistrationTask {
60
61 public AddLockableMixinToActivatableMixinTask(String name, String description, String workspaceName) {
62 super(name, description, workspaceName);
63 }
64
65 @Override
66 public List<NodeTypeDefinition> getNodeTypesToRegister(NodeTypeManager nodeTypeManager) throws RepositoryException {
67 List<PropertyDefinitionTemplate> properties = Lists.newArrayList(
68 createPropertyDefinitionTemplate(nodeTypeManager, "mgnl:lastActivated", "Date", false, false, "COPY", false, false),
69 createPropertyDefinitionTemplate(nodeTypeManager, "mgnl:lastActivatedBy", "String", false, false, "COPY", false, false),
70 createPropertyDefinitionTemplate(nodeTypeManager, "mgnl:activationStatus", "String", false, false, "COPY", false, false));
71
72 NodeTypeDefinition ntd = createNodeTypeWithProperties(nodeTypeManager, NodeTypes.Activatable.NAME,
73 new String[]{JcrConstants.MIX_LOCKABLE}, true, false, null, false, properties);
74 return Collections.singletonList(ntd);
75 }
76
77 @Override
78 public List<String> getNodeTypesToUnregister(NodeTypeManager nodeTypeManager) throws RepositoryException {
79 return Lists.newArrayList();
80 }
81
82
83
84
85
86 private NodeTypeTemplate createNodeTypeWithProperties(NodeTypeManager nodeTypeManager, String name, String[] superTypeNames, boolean isMixin, boolean isOrderableChildNodes, String primaryItemName, boolean isQueryable, List<PropertyDefinitionTemplate> properties) throws RepositoryException {
87 NodeTypeTemplate nodeType = createNodeType(nodeTypeManager, name, superTypeNames, isMixin, isOrderableChildNodes, primaryItemName, isQueryable);
88 nodeType.getPropertyDefinitionTemplates().addAll(properties);
89
90 return nodeType;
91 }
92
93
94
95
96 private PropertyDefinitionTemplate createPropertyDefinitionTemplate(NodeTypeManager nodeTypeManager, String name,
97 String type, boolean isAutoCreated,
98 boolean isMandatory, String onParentVersion,
99 boolean isProtected, boolean isMultiple) throws RepositoryException {
100 PropertyDefinitionTemplate template = nodeTypeManager.createPropertyDefinitionTemplate();
101 template.setName(name);
102 template.setRequiredType(PropertyType.valueFromName(type));
103 template.setAutoCreated(isAutoCreated);
104 template.setMandatory(isMandatory);
105 template.setOnParentVersion(OnParentVersionAction.valueFromName(onParentVersion));
106 template.setProtected(isProtected);
107 template.setMultiple(isMultiple);
108 return template;
109 }
110 }