1 /**
2 * This file Copyright (c) 2003-2010 Magnolia International
3 * Ltd. (http://www.magnolia-cms.com). All rights reserved.
4 *
5 *
6 * This file is dual-licensed under both the Magnolia
7 * Network Agreement and the GNU General Public License.
8 * You may elect to use one or the other of these licenses.
9 *
10 * This file is distributed in the hope that it will be
11 * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12 * implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14 * Redistribution, except as permitted by whichever of the GPL
15 * or MNA you select, is prohibited.
16 *
17 * 1. For the GPL license (GPL), you can redistribute and/or
18 * modify this file under the terms of the GNU General
19 * Public License, Version 3, as published by the Free Software
20 * Foundation. You should have received a copy of the GNU
21 * General Public License, Version 3 along with this program;
22 * if not, write to the Free Software Foundation, Inc., 51
23 * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24 *
25 * 2. For the Magnolia Network Agreement (MNA), this file
26 * and the accompanying materials are made available under the
27 * terms of the MNA which accompanies this distribution, and
28 * is available at http://www.magnolia-cms.com/mna.html
29 *
30 * Any modifications to this file must keep this entire header
31 * intact.
32 *
33 */
34 package info.magnolia.cms.util;
35
36 import java.io.Serializable;
37 import java.util.Iterator;
38
39 import org.apache.commons.collections.IteratorUtils;
40 import org.apache.commons.lang.ArrayUtils;
41 import org.apache.commons.lang.StringUtils;
42
43
44 /**
45 * This class defines the rules to be used by the activation content aggregator this is simply a collection of node
46 * types
47 * @author Sameer Charles
48 * @version $Revision: 32667 $ ($Author: gjoseph $)
49 */
50 public class Rule implements Serializable {
51
52 /**
53 * generated Stable serialVersionUID.
54 */
55 private static final long serialVersionUID = 222L;
56
57 /**
58 * list of node types allowed
59 */
60 private String[] allowedTypes = new String[0];
61
62 /**
63 * reverse rule
64 */
65 private boolean reverse = false;
66
67 /**
68 * Default
69 */
70 public Rule() {
71 }
72
73 /**
74 * generate list from string array
75 * @param allowedTypes
76 */
77 public Rule(String[] allowedTypes) {
78 for (int j = 0; j < allowedTypes.length; j++) {
79 this.addAllowType(allowedTypes[j]);
80 }
81 }
82
83 /**
84 * generate list from the string
85 * @param allowedTypes
86 * @param separator
87 */
88 public Rule(String allowedTypes, String separator) {
89 String[] types = StringUtils.split(allowedTypes, separator);
90 for (int j = 0; j < types.length; j++) {
91 this.addAllowType(types[j]);
92 }
93 }
94
95 /**
96 * add to allow list
97 * @param nodeType
98 */
99 public void addAllowType(String nodeType) {
100 if (nodeType != null) {
101 this.allowedTypes = (String[]) ArrayUtils.add(allowedTypes, nodeType);
102 }
103 }
104
105 /**
106 * remove from allow list
107 * @param nodeType
108 */
109 public void removeAllowType(String nodeType) {
110 if (nodeType != null) {
111 for (int j = 0; j < allowedTypes.length; j++) {
112 if (nodeType.equals(allowedTypes[j])) {
113 this.allowedTypes = (String[]) ArrayUtils.remove(allowedTypes, j);
114 break;
115 }
116 }
117 }
118 }
119
120 /**
121 * is allowed
122 * @param nodeType
123 * @return true if given nodeType is allowed
124 */
125 public boolean isAllowed(String nodeType) {
126 boolean allowed = ArrayUtils.contains(allowedTypes, nodeType);
127 if (this.reverse) {
128 return !allowed;
129 }
130
131 return allowed;
132
133 }
134
135 /**
136 * get a string representation of this rule
137 * @return string representation
138 */
139 public String toString() {
140 StringBuffer buffer = new StringBuffer();
141 Iterator typeIterator = IteratorUtils.arrayIterator(allowedTypes);
142 while (typeIterator.hasNext()) {
143 buffer.append((String) typeIterator.next());
144 buffer.append(",");
145 }
146 return new String(buffer);
147 }
148
149 /**
150 * set reverse
151 */
152 public void reverse() {
153 this.reverse = true;
154 }
155
156 }