001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     * 
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.lang3.mutable;
019    
020    import java.io.Serializable;
021    
022    /**
023     * A mutable <code>boolean</code> wrapper.
024     * 
025     * @see Boolean
026     * @since 2.2
027     * @version $Id: MutableBoolean.java 1088899 2011-04-05 05:31:27Z bayard $
028     */
029    public class MutableBoolean implements Mutable<Boolean>, Serializable, Comparable<MutableBoolean> {
030    
031        /**
032         * Required for serialization support.
033         * 
034         * @see java.io.Serializable
035         */
036        private static final long serialVersionUID = -4830728138360036487L;
037    
038        /** The mutable value. */
039        private boolean value;
040    
041        /**
042         * Constructs a new MutableBoolean with the default value of false.
043         */
044        public MutableBoolean() {
045            super();
046        }
047    
048        /**
049         * Constructs a new MutableBoolean with the specified value.
050         * 
051         * @param value  the initial value to store
052         */
053        public MutableBoolean(boolean value) {
054            super();
055            this.value = value;
056        }
057    
058        /**
059         * Constructs a new MutableBoolean with the specified value.
060         * 
061         * @param value  the initial value to store, not null
062         * @throws NullPointerException if the object is null
063         */
064        public MutableBoolean(Boolean value) {
065            super();
066            this.value = value.booleanValue();
067        }
068    
069        //-----------------------------------------------------------------------
070        /**
071         * Gets the value as a Boolean instance.
072         * 
073         * @return the value as a Boolean, never null
074         */
075        public Boolean getValue() {
076            return Boolean.valueOf(this.value);
077        }
078    
079        /**
080         * Sets the value.
081         * 
082         * @param value  the value to set
083         */
084        public void setValue(boolean value) {
085            this.value = value;
086        }
087    
088        /**
089         * Sets the value from any Boolean instance.
090         * 
091         * @param value  the value to set, not null
092         * @throws NullPointerException if the object is null
093         */
094        public void setValue(Boolean value) {
095            this.value = value.booleanValue();
096        }
097    
098        //-----------------------------------------------------------------------
099        /**
100         * Checks if the current value is <code>true</code>.
101         * 
102         * @return <code>true</code> if the current value is <code>true</code>
103         * @since 2.5
104         */
105        public boolean isTrue() {
106            return value == true;
107        }
108    
109        /**
110         * Checks if the current value is <code>false</code>.
111         * 
112         * @return <code>true</code> if the current value is <code>false</code>
113         * @since 2.5
114         */
115        public boolean isFalse() {
116            return value == false;
117        }
118    
119        //-----------------------------------------------------------------------
120        /**
121         * Returns the value of this MutableBoolean as a boolean.
122         * 
123         * @return the boolean value represented by this object.
124         */
125        public boolean booleanValue() {
126            return value;
127        }
128    
129        //-----------------------------------------------------------------------
130        /**
131         * Gets this mutable as an instance of Boolean.
132         *
133         * @return a Boolean instance containing the value from this mutable, never null
134         * @since 2.5
135         */
136        public Boolean toBoolean() {
137            return Boolean.valueOf(booleanValue());
138        }
139    
140        //-----------------------------------------------------------------------
141        /**
142         * Compares this object to the specified object. The result is <code>true</code> if and only if the argument is
143         * not <code>null</code> and is an <code>MutableBoolean</code> object that contains the same
144         * <code>boolean</code> value as this object.
145         * 
146         * @param obj  the object to compare with, null returns false
147         * @return <code>true</code> if the objects are the same; <code>false</code> otherwise.
148         */
149        @Override
150        public boolean equals(Object obj) {
151            if (obj instanceof MutableBoolean) {
152                return value == ((MutableBoolean) obj).booleanValue();
153            }
154            return false;
155        }
156    
157        /**
158         * Returns a suitable hash code for this mutable.
159         * 
160         * @return the hash code returned by <code>Boolean.TRUE</code> or <code>Boolean.FALSE</code>
161         */
162        @Override
163        public int hashCode() {
164            return value ? Boolean.TRUE.hashCode() : Boolean.FALSE.hashCode();
165        }
166    
167        //-----------------------------------------------------------------------
168        /**
169         * Compares this mutable to another in ascending order.
170         * 
171         * @param other  the other mutable to compare to, not null
172         * @return negative if this is less, zero if equal, positive if greater
173         *  where false is less than true
174         */
175        public int compareTo(MutableBoolean other) {
176            boolean anotherVal = other.value;
177            return value == anotherVal ? 0 : (value ? 1 : -1);
178        }
179    
180        //-----------------------------------------------------------------------
181        /**
182         * Returns the String value of this mutable.
183         * 
184         * @return the mutable value as a string
185         */
186        @Override
187        public String toString() {
188            return String.valueOf(value);
189        }
190    
191    }