001 /*
002 * JBoss DNA (http://www.jboss.org/dna)
003 * See the COPYRIGHT.txt file distributed with this work for information
004 * regarding copyright ownership. Some portions may be licensed
005 * to Red Hat, Inc. under one or more contributor license agreements.
006 * See the AUTHORS.txt file in the distribution for a full listing of
007 * individual contributors.
008 *
009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
010 * is licensed to you under the terms of the GNU Lesser General Public License as
011 * published by the Free Software Foundation; either version 2.1 of
012 * the License, or (at your option) any later version.
013 *
014 * JBoss DNA is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
017 * Lesser General Public License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this software; if not, write to the Free
021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
023 */
024 package org.jboss.dna.graph.property.basic;
025
026 import java.io.InputStream;
027 import java.io.Reader;
028 import java.math.BigDecimal;
029 import java.net.URI;
030 import java.util.Calendar;
031 import java.util.Date;
032 import java.util.UUID;
033 import net.jcip.annotations.Immutable;
034 import org.jboss.dna.common.text.TextDecoder;
035 import org.jboss.dna.graph.GraphI18n;
036 import org.jboss.dna.graph.property.Binary;
037 import org.jboss.dna.graph.property.DateTime;
038 import org.jboss.dna.graph.property.IoException;
039 import org.jboss.dna.graph.property.Name;
040 import org.jboss.dna.graph.property.Path;
041 import org.jboss.dna.graph.property.PropertyType;
042 import org.jboss.dna.graph.property.Reference;
043 import org.jboss.dna.graph.property.ValueFactory;
044 import org.jboss.dna.graph.property.ValueFormatException;
045
046 /**
047 * The standard {@link ValueFactory} for {@link PropertyType#BOOLEAN} values.
048 *
049 * @author Randall Hauch
050 * @author John Verhaeg
051 */
052 @Immutable
053 public class BooleanValueFactory extends AbstractValueFactory<Boolean> {
054
055 public BooleanValueFactory( TextDecoder decoder,
056 ValueFactory<String> stringValueFactory ) {
057 super(PropertyType.BOOLEAN, decoder, stringValueFactory);
058 }
059
060 /**
061 * {@inheritDoc}
062 */
063 public Boolean create( String value ) {
064 if (value == null) return null;
065 return Boolean.valueOf(value.trim());
066 }
067
068 /**
069 * {@inheritDoc}
070 */
071 public Boolean create( String value,
072 TextDecoder decoder ) {
073 // this probably doesn't really need to call the decoder, but by doing so then we don't care at all what the decoder does
074 return create(getDecoder(decoder).decode(value));
075 }
076
077 /**
078 * {@inheritDoc}
079 */
080 public Boolean create( int value ) {
081 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
082 Integer.class.getSimpleName(),
083 value));
084 }
085
086 /**
087 * {@inheritDoc}
088 */
089 public Boolean create( long value ) {
090 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
091 Long.class.getSimpleName(),
092 value));
093 }
094
095 /**
096 * {@inheritDoc}
097 */
098 public Boolean create( boolean value ) {
099 return value;
100 }
101
102 /**
103 * {@inheritDoc}
104 */
105 public Boolean create( float value ) {
106 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
107 Float.class.getSimpleName(),
108 value));
109 }
110
111 /**
112 * {@inheritDoc}
113 */
114 public Boolean create( double value ) {
115 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
116 Double.class.getSimpleName(),
117 value));
118 }
119
120 /**
121 * {@inheritDoc}
122 */
123 public Boolean create( BigDecimal value ) {
124 throw new ValueFormatException(value, getPropertyType(),
125 GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
126 BigDecimal.class.getSimpleName(),
127 value));
128 }
129
130 /**
131 * {@inheritDoc}
132 */
133 public Boolean create( Calendar value ) {
134 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
135 Calendar.class.getSimpleName(),
136 value));
137 }
138
139 /**
140 * {@inheritDoc}
141 */
142 public Boolean create( Date value ) {
143 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
144 Date.class.getSimpleName(),
145 value));
146 }
147
148 /**
149 * {@inheritDoc}
150 *
151 * @see org.jboss.dna.graph.property.ValueFactory#create(org.jboss.dna.graph.property.DateTime)
152 */
153 public Boolean create( DateTime value ) throws ValueFormatException {
154 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
155 DateTime.class.getSimpleName(),
156 value));
157 }
158
159 /**
160 * {@inheritDoc}
161 */
162 public Boolean create( Name value ) {
163 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
164 Name.class.getSimpleName(),
165 value));
166 }
167
168 /**
169 * {@inheritDoc}
170 */
171 public Boolean create( Path value ) {
172 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
173 Path.class.getSimpleName(),
174 value));
175 }
176
177 /**
178 * {@inheritDoc}
179 */
180 public Boolean create( Reference value ) {
181 throw new ValueFormatException(value, getPropertyType(),
182 GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
183 Reference.class.getSimpleName(),
184 value));
185 }
186
187 /**
188 * {@inheritDoc}
189 */
190 public Boolean create( URI value ) {
191 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
192 URI.class.getSimpleName(),
193 value));
194 }
195
196 /**
197 * {@inheritDoc}
198 *
199 * @see org.jboss.dna.graph.property.ValueFactory#create(java.util.UUID)
200 */
201 public Boolean create( UUID value ) {
202 throw new ValueFormatException(value, getPropertyType(), GraphI18n.unableToCreateValue.text(getPropertyType().getName(),
203 UUID.class.getSimpleName(),
204 value));
205 }
206
207 /**
208 * {@inheritDoc}
209 */
210 public Boolean create( byte[] value ) {
211 // First create a string and then create the boolean from the string value ...
212 return create(getStringValueFactory().create(value));
213 }
214
215 /**
216 * {@inheritDoc}
217 *
218 * @see org.jboss.dna.graph.property.ValueFactory#create(org.jboss.dna.graph.property.Binary)
219 */
220 public Boolean create( Binary value ) throws ValueFormatException, IoException {
221 // First create a string and then create the boolean from the string value ...
222 return create(getStringValueFactory().create(value));
223 }
224
225 /**
226 * {@inheritDoc}
227 */
228 public Boolean create( InputStream stream,
229 long approximateLength ) throws IoException {
230 // First create a string and then create the boolean from the string value ...
231 return create(getStringValueFactory().create(stream, approximateLength));
232 }
233
234 /**
235 * {@inheritDoc}
236 */
237 public Boolean create( Reader reader,
238 long approximateLength ) throws IoException {
239 // First create a string and then create the boolean from the string value ...
240 return create(getStringValueFactory().create(reader, approximateLength));
241 }
242
243 /**
244 * {@inheritDoc}
245 */
246 @Override
247 protected Boolean[] createEmptyArray( int length ) {
248 return new Boolean[length];
249 }
250
251 }