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
100
101
102
103 public void addAllowType(String nodeType) {
104 if (nodeType != null) {
105 this.allowedTypes.add(nodeType);
106 }
107 }
108
109
110
111
112
113 public void removeAllowType(String nodeType) {
114 if (nodeType != null) {
115 this.allowedTypes.remove(nodeType);
116 }
117 }
118
119
120
121
122 public boolean isAllowed(String nodeType) {
123 boolean allowed = this.allowedTypes.contains(nodeType);
124 if (this.reverse) {
125 return !allowed;
126 }
127
128 return allowed;
129
130 }
131
132
133
134
135
136 public boolean isAllowed(Node node) throws RepositoryException {
137 boolean allowed = false;
138
139 for(String allowedType:this.allowedTypes){
140 allowed |= NodeUtil.isNodeType(node, allowedType);
141 }
142
143 if (this.reverse) {
144 return !allowed;
145 }
146
147 return allowed;
148 }
149
150
151
152
153
154 @Override
155 public String toString() {
156 StringBuffer buffer = new StringBuffer();
157 Iterator<String> typeIterator = allowedTypes.iterator();
158 while (typeIterator.hasNext()) {
159 buffer.append(typeIterator.next());
160 buffer.append(",");
161 }
162 return buffer.toString();
163 }
164
165
166
167
168 public void reverse() {
169 this.reverse = true;
170 }
171
172 private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
173 final ObjectInputStream.GetField field = ois.readFields();
174 final Object o = field.get("allowedTypes", null);
175 if (o instanceof String[]){
176 Set<String> typesCol = new HashSet<String>();
177 typesCol.addAll(Arrays.asList((String[]) o));
178 this.allowedTypes = typesCol;
179 }
180 if(o instanceof HashSet){
181 this.allowedTypes = (Set<String>) o;
182 }
183 this.reverse = field.get("reverse", false);
184 }
185 }