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.security.app.dialog.field;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.ui.form.field.factory.AbstractFieldFactory;
38 import info.magnolia.ui.form.field.definition.FieldDefinition;
39 import info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter;
40 import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter;
41 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
42
43 import javax.jcr.Node;
44 import javax.jcr.RepositoryException;
45
46 import com.vaadin.data.Item;
47
48
49
50
51
52
53 public abstract class AbstractAccessFieldFactory<D extends FieldDefinition> extends AbstractFieldFactory<D, Object> {
54
55 protected AbstractAccessFieldFactory(D definition, Item relatedFieldItem) {
56 super(definition, relatedFieldItem);
57 }
58
59 protected AbstractJcrNodeAdapter getOrAddAclItem(JcrNodeAdapter roleItem, String aclName) throws RepositoryException {
60 AbstractJcrNodeAdapter aclItem = roleItem.getChild(aclName);
61 if (aclItem == null) {
62 Node roleNode = roleItem.getJcrItem();
63 if (roleItem instanceof JcrNewNodeAdapter || !roleNode.hasNode(aclName)) {
64 aclItem = new JcrNewNodeAdapter(roleNode, NodeTypes.ContentNode.NAME);
65 aclItem.setNodeName(aclName);
66 roleItem.addChild(aclItem);
67 } else {
68 Node aclNode = roleNode.getNode(aclName);
69 aclItem = new JcrNodeAdapter(aclNode);
70 roleItem.addChild(aclItem);
71 }
72 }
73 return aclItem;
74 }
75
76 protected JcrNewNodeAdapter addAclEntryItem(AbstractJcrNodeAdapter aclItem) throws RepositoryException {
77 JcrNewNodeAdapter newItem = new JcrNewNodeAdapter(aclItem.getJcrItem(), NodeTypes.ContentNode.NAME);
78 newItem.setNodeName(getUniqueNodeNameForChild(aclItem));
79 aclItem.addChild(newItem);
80 return newItem;
81 }
82
83 protected String getUniqueNodeNameForChild(AbstractJcrNodeAdapter parentItem) throws RepositoryException {
84
85
86
87 Node parentNode = null;
88 if (!(parentItem instanceof JcrNewNodeAdapter)) {
89 parentNode = parentItem.getJcrItem();
90 }
91
92 int newNodeName = 0;
93 while (true) {
94 if (parentItem.getChild(String.valueOf(newNodeName)) != null) {
95 newNodeName++;
96 continue;
97 }
98 if (parentNode != null && parentNode.hasNode(String.valueOf(newNodeName))) {
99 newNodeName++;
100 continue;
101 }
102 break;
103 }
104
105 return String.valueOf(newNodeName);
106 }
107 }