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.cms.util;
35
36 import info.magnolia.jcr.util.NodeUtil;
37
38 import java.io.IOException;
39 import java.io.ObjectInputStream;
40 import java.io.Serializable;
41 import java.util.Arrays;
42 import java.util.HashSet;
43 import java.util.Iterator;
44 import java.util.Set;
45
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48
49 import org.apache.commons.lang.StringUtils;
50
51
52
53
54
55
56
57 public class Rule implements Serializable {
58
59
60
61
62 private static final long serialVersionUID = 222L;
63
64
65
66
67 private Set<String> allowedTypes = new HashSet<String>();
68
69
70
71
72 private boolean reverse = false;
73
74 public Rule() {
75 }
76
77
78
79
80
81 public Rule(String[] allowedTypes) {
82 for (int j = 0; j < allowedTypes.length; j++) {
83 this.addAllowType(allowedTypes[j]);
84 }
85 }
86
87
88
89
90
91
92 public Rule(String allowedTypes, String separator) {
93 String[] types = StringUtils.split(allowedTypes, separator);
94 for (int j = 0; j < types.length; j++) {
95 this.addAllowType(types[j]);
96 }
97 }
98
99 public void setAllowedTypes(String[] types) {
100 for (String t : types) {
101 this.addAllowType(t);
102 }
103 }
104
105
106
107
108
109 public void addAllowType(String nodeType) {
110 if (nodeType != null) {
111 this.allowedTypes.add(nodeType);
112 }
113 }
114
115
116
117
118
119 public void removeAllowType(String nodeType) {
120 if (nodeType != null) {
121 this.allowedTypes.remove(nodeType);
122 }
123 }
124
125
126
127
128
129
130 public boolean isAllowed(String nodeType) {
131 boolean allowed = this.allowedTypes.contains(nodeType);
132 if (this.reverse) {
133 return !allowed;
134 }
135
136 return allowed;
137
138 }
139
140
141
142
143
144 public boolean isAllowed(Node node) throws RepositoryException {
145 boolean allowed = false;
146
147 for(String allowedType:this.allowedTypes){
148 allowed |= NodeUtil.isNodeType(node, allowedType);
149 }
150
151 if (this.reverse) {
152 return !allowed;
153 }
154
155 return allowed;
156 }
157
158
159
160
161
162 @Override
163 public String toString() {
164 StringBuffer buffer = new StringBuffer();
165 Iterator<String> typeIterator = allowedTypes.iterator();
166 while (typeIterator.hasNext()) {
167 buffer.append(typeIterator.next());
168 buffer.append(",");
169 }
170 return buffer.toString();
171 }
172
173
174
175
176 public void reverse() {
177 this.reverse = true;
178 }
179
180 private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
181 final ObjectInputStream.GetField field = ois.readFields();
182 final Object o = field.get("allowedTypes", null);
183 if (o instanceof String[]){
184 Set<String> typesCol = new HashSet<String>();
185 typesCol.addAll(Arrays.asList((String[]) o));
186 this.allowedTypes = typesCol;
187 }
188 if(o instanceof HashSet){
189 this.allowedTypes = (Set<String>) o;
190 }
191 this.reverse = field.get("reverse", false);
192 }
193 }