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.delta;
35
36 import info.magnolia.module.InstallContext;
37 import info.magnolia.repository.RepositoryConstants;
38
39 import javax.jcr.Node;
40 import javax.jcr.NodeIterator;
41 import javax.jcr.PropertyType;
42 import javax.jcr.RepositoryException;
43 import javax.jcr.Session;
44 import javax.jcr.Value;
45
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49
50
51
52 public class FixUserRolePermissionsPropertyTask extends AbstractTask {
53
54 private static final Logger log = LoggerFactory.getLogger(FixUserRolePermissionsPropertyTask.class);
55
56 protected static final String PERMISSIONS_PROPERTY_NAME = "permissions";
57
58 private final String path;
59
60 private Session session;
61
62 public FixUserRolePermissionsPropertyTask(String path) {
63 super(String.format("Fix the type of the permissions property for role '%s'", path),
64 String.format("Checks that every permissions property of role '%s' is of type Long and will try to update if required.", path));
65 this.path = path;
66 }
67
68 @Override
69 public void execute(InstallContext installContext) throws TaskExecutionException {
70 try {
71 session = installContext.getJCRSession(RepositoryConstants.USER_ROLES);
72 Node start = session.getNode(path);
73 handleNode(start);
74 } catch (RepositoryException e) {
75 log.error("Error getting node [{}] of workspace [{}].", this.path, RepositoryConstants.USER_ROLES, e);
76 }
77 }
78
79
80
81
82
83 private void handleNode(Node start) throws RepositoryException {
84 NodeIterator iterator = start.getNodes();
85 while (iterator.hasNext()) {
86 Node node = iterator.nextNode();
87 if (node.hasProperty(PERMISSIONS_PROPERTY_NAME) && node.getProperty(PERMISSIONS_PROPERTY_NAME).getType() != PropertyType.LONG) {
88 try {
89 Long longValue = node.getProperty(PERMISSIONS_PROPERTY_NAME).getLong();
90 Value value = session.getValueFactory().createValue(longValue);
91 node.setProperty(PERMISSIONS_PROPERTY_NAME, value);
92 } catch (RepositoryException e) {
93 log.error("Error updating permission property for node [{}]. Please make sure the property type is Long.", node, e);
94 }
95 }
96 if (node.hasNodes()) {
97 handleNode(node);
98 }
99 }
100 }
101
102 }