1 /*
2 * $Header: /home/cvs/jakarta-commons/validator/src/share/org/apache/commons/validator/util/Flags.java,v 1.8 2004/02/21 17:10:30 rleland Exp $
3 * $Revision: 1.8 $
4 * $Date: 2004/02/21 17:10:30 $
5 *
6 * ====================================================================
7 * Copyright 2003-2004 The Apache Software Foundation
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22 package org.apache.commons.validator.util;
23
24 import java.io.Serializable;
25
26 /***
27 * Represents a collection of 64 boolean (on/off) flags. Individual flags
28 * are represented by powers of 2. For example,<br/>
29 * Flag 1 = 1<br/>
30 * Flag 2 = 2<br/>
31 * Flag 3 = 4<br/>
32 * Flag 4 = 8<br/><br/>
33 * or using shift operator to make numbering easier:<br/>
34 * Flag 1 = 1 << 0<br/>
35 * Flag 2 = 1 << 1<br/>
36 * Flag 3 = 1 << 2<br/>
37 * Flag 4 = 1 << 3<br/>
38 *
39 * <p>
40 * There cannot be a flag with a value of 3 because that represents Flag 1
41 * and Flag 2 both being on/true.
42 * </p>
43 */
44 public class Flags implements Serializable {
45
46 /***
47 * Represents the current flag state.
48 */
49 private long flags = 0;
50
51 /***
52 * Create a new Flags object.
53 */
54 public Flags() {
55 super();
56 }
57
58 /***
59 * Initialize a new Flags object with the given flags.
60 */
61 public Flags(long flags) {
62 super();
63 this.flags = flags;
64 }
65
66 /***
67 * Returns the current flags.
68 */
69 public long getFlags() {
70 return this.flags;
71 }
72
73 /***
74 * Tests whether the given flag is on. If the flag is not a power of 2
75 * (ie. 3) this tests whether the combination of flags is on.
76 */
77 public boolean isOn(long flag) {
78 return (this.flags & flag) > 0;
79 }
80
81 /***
82 * Tests whether the given flag is off. If the flag is not a power of 2
83 * (ie. 3) this tests whether the combination of flags is off.
84 */
85 public boolean isOff(long flag) {
86 return (this.flags & flag) == 0;
87 }
88
89 /***
90 * Turns on the given flag. If the flag is not a power of 2 (ie. 3) this
91 * turns on multiple flags.
92 */
93 public void turnOn(long flag) {
94 this.flags |= flag;
95 }
96
97 /***
98 * Turns off the given flag. If the flag is not a power of 2 (ie. 3) this
99 * turns off multiple flags.
100 */
101 public void turnOff(long flag) {
102 this.flags &= ~flag;
103 }
104
105 /***
106 * Turn off all flags.
107 */
108 public void turnOffAll() {
109 this.flags = 0;
110 }
111
112 /***
113 * Turn off all flags. This is a synonym for <code>turnOffAll()</code>.
114 * @since Validator 1.1.1
115 */
116 public void clear() {
117 this.flags = 0;
118 }
119
120 /***
121 * Turn on all 64 flags.
122 */
123 public void turnOnAll() {
124 this.flags = Long.MAX_VALUE;
125 }
126
127 /***
128 * Clone this Flags object.
129 * @see java.lang.Object#clone()
130 */
131 public Object clone() {
132 try {
133 return super.clone();
134 } catch(CloneNotSupportedException e) {
135 throw new RuntimeException("Couldn't clone Flags object.");
136 }
137 }
138
139 /***
140 * Tests if two Flags objects are in the same state.
141 * @param obj object being tested
142 * @see java.lang.Object#equals(java.lang.Object)
143 */
144 public boolean equals(Object obj) {
145 if (!(obj instanceof Flags)) {
146 return false;
147 }
148
149 if (obj == this) {
150 return true;
151 }
152
153 Flags f = (Flags) obj;
154
155 return this.flags == f.flags;
156 }
157
158 /***
159 * The hash code is based on the current state of the flags.
160 * @see java.lang.Object#hashCode()
161 */
162 public int hashCode() {
163 return (int) this.flags;
164 }
165
166 /***
167 * Returns a 64 length String with the first flag on the right and the
168 * 64th flag on the left. A 1 indicates the flag is on, a 0 means it's
169 * off.
170 */
171 public String toString() {
172 StringBuffer bin = new StringBuffer(Long.toBinaryString(this.flags));
173 for (int i = 64 - bin.length(); i > 0; i--) {
174 bin.insert(0, "0");
175 }
176 return bin.toString();
177 }
178
179 }
This page was automatically generated by Maven