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