001/* 002 * Copyright 2015-2016 UnboundID Corp. 003 * All Rights Reserved. 004 */ 005/* 006 * Copyright (C) 2015-2016 UnboundID Corp. 007 * 008 * This program is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License (GPLv2 only) 010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only) 011 * as published by the Free Software Foundation. 012 * 013 * This program is distributed in the hope that it will be useful, 014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 016 * GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with this program; if not, see <http://www.gnu.org/licenses>. 020 */ 021package com.unboundid.util.json; 022 023 024 025import com.unboundid.util.NotMutable; 026import com.unboundid.util.ThreadSafety; 027import com.unboundid.util.ThreadSafetyLevel; 028 029 030 031/** 032 * This class provides an implementation of a JSON value that represents a 033 * Java Boolean. The string representation of the JSON Boolean true value is 034 * {@code true}, and the string representation of the JSON Boolean false value 035 * is {@code false}. These values are not surrounded by quotation marks, and 036 * they must be entirely lowercase. 037 */ 038@NotMutable() 039@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) 040public final class JSONBoolean 041 extends JSONValue 042{ 043 /** 044 * A pre-allocated object that represents a value of {@code false}. 045 */ 046 public static final JSONBoolean FALSE = new JSONBoolean(false); 047 048 049 050 /** 051 * A pre-allocated object that represents a value of {@code true}. 052 */ 053 public static final JSONBoolean TRUE = new JSONBoolean(true); 054 055 056 057 /** 058 * The serial version UID for this serializable class. 059 */ 060 private static final long serialVersionUID = -5090296701442873481L; 061 062 063 064 // The boolean value for this object. 065 private final boolean booleanValue; 066 067 // The string representation for this object. 068 private final String stringRepresentation; 069 070 071 072 /** 073 * Creates a new JSON value capable of representing a Boolean value of either 074 * {@code true} or {@code false}. 075 * 076 * @param booleanValue The Boolean value for this JSON value. 077 */ 078 public JSONBoolean(final boolean booleanValue) 079 { 080 this.booleanValue = booleanValue; 081 stringRepresentation = (booleanValue ? "true" : "false"); 082 } 083 084 085 086 /** 087 * Retrieves the Java boolean value for this JSON value. 088 * 089 * @return The Java boolean value for this JSON value. 090 */ 091 public boolean booleanValue() 092 { 093 return booleanValue; 094 } 095 096 097 098 /** 099 * {@inheritDoc} 100 */ 101 @Override() 102 public int hashCode() 103 { 104 return (booleanValue ? Boolean.TRUE.hashCode() : Boolean.FALSE.hashCode()); 105 } 106 107 108 109 /** 110 * {@inheritDoc} 111 */ 112 @Override() 113 public boolean equals(final Object o) 114 { 115 if (o == this) 116 { 117 return true; 118 } 119 120 if (o instanceof JSONBoolean) 121 { 122 final JSONBoolean b = (JSONBoolean) o; 123 return (b.booleanValue == booleanValue); 124 } 125 126 return false; 127 } 128 129 130 131 /** 132 * {@inheritDoc} 133 */ 134 @Override() 135 public boolean equals(final JSONValue v, final boolean ignoreFieldNameCase, 136 final boolean ignoreValueCase, 137 final boolean ignoreArrayOrder) 138 { 139 return ((v instanceof JSONBoolean) && 140 (booleanValue == ((JSONBoolean) v).booleanValue)); 141 } 142 143 144 145 /** 146 * {@inheritDoc} 147 */ 148 @Override() 149 public String toString() 150 { 151 return stringRepresentation; 152 } 153 154 155 156 /** 157 * {@inheritDoc} 158 */ 159 @Override() 160 public void toString(final StringBuilder buffer) 161 { 162 buffer.append(stringRepresentation); 163 } 164 165 166 167 /** 168 * {@inheritDoc} 169 */ 170 @Override() 171 public String toSingleLineString() 172 { 173 return stringRepresentation; 174 } 175 176 177 178 /** 179 * {@inheritDoc} 180 */ 181 @Override() 182 public void toSingleLineString(final StringBuilder buffer) 183 { 184 buffer.append(stringRepresentation); 185 } 186 187 188 189 /** 190 * {@inheritDoc} 191 */ 192 @Override() 193 public String toNormalizedString() 194 { 195 return stringRepresentation; 196 } 197 198 199 200 /** 201 * {@inheritDoc} 202 */ 203 @Override() 204 public void toNormalizedString(final StringBuilder buffer) 205 { 206 buffer.append(stringRepresentation); 207 } 208 209 210 211 /** 212 * {@inheritDoc} 213 */ 214 @Override() 215 public void appendToJSONBuffer(final JSONBuffer buffer) 216 { 217 buffer.appendBoolean(booleanValue); 218 } 219 220 221 222 /** 223 * {@inheritDoc} 224 */ 225 @Override() 226 public void appendToJSONBuffer(final String fieldName, 227 final JSONBuffer buffer) 228 { 229 buffer.appendBoolean(fieldName, booleanValue); 230 } 231}