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 AddLockableMixinToVersionableMixinTask extends AbstractNodeTypeRegistrationTask {
60
61 public AddLockableMixinToVersionableMixinTask(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:comment", "String", false, false, "COPY", false, false));
69
70 NodeTypeDefinition ntd = createNodeTypeWithProperties(nodeTypeManager, NodeTypes.Versionable.NAME,
71 new String[]{JcrConstants.MIX_LOCKABLE}, true, false, null, false, properties);
72 return Collections.singletonList(ntd);
73 }
74
75 @Override
76 public List<String> getNodeTypesToUnregister(NodeTypeManager nodeTypeManager) throws RepositoryException {
77 return Lists.newArrayList();
78 }
79
80
81
82
83
84 private NodeTypeTemplate createNodeTypeWithProperties(NodeTypeManager nodeTypeManager, String name, String[] superTypeNames, boolean isMixin, boolean isOrderableChildNodes, String primaryItemName, boolean isQueryable, List<PropertyDefinitionTemplate> properties) throws RepositoryException {
85 NodeTypeTemplate nodeType = createNodeType(nodeTypeManager, name, superTypeNames, isMixin, isOrderableChildNodes, primaryItemName, isQueryable);
86 nodeType.getPropertyDefinitionTemplates().addAll(properties);
87
88 return nodeType;
89 }
90
91
92
93
94 private PropertyDefinitionTemplate createPropertyDefinitionTemplate(NodeTypeManager nodeTypeManager, String name,
95 String type, boolean isAutoCreated,
96 boolean isMandatory, String onParentVersion,
97 boolean isProtected, boolean isMultiple) throws RepositoryException {
98 PropertyDefinitionTemplate template = nodeTypeManager.createPropertyDefinitionTemplate();
99 template.setName(name);
100 template.setRequiredType(PropertyType.valueFromName(type));
101 template.setAutoCreated(isAutoCreated);
102 template.setMandatory(isMandatory);
103 template.setOnParentVersion(OnParentVersionAction.valueFromName(onParentVersion));
104 template.setProtected(isProtected);
105 template.setMultiple(isMultiple);
106 return template;
107 }
108 }