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.common.util.CheckArg;
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#OBJECT} values.
048 *
049 * @author Randall Hauch
050 * @author John Verhaeg
051 */
052 @Immutable
053 public class ObjectValueFactory extends AbstractValueFactory<Object> {
054
055 private final ValueFactory<Binary> binaryValueFactory;
056
057 public ObjectValueFactory( TextDecoder decoder,
058 ValueFactory<String> stringValueFactory,
059 ValueFactory<Binary> binaryValueFactory ) {
060 super(PropertyType.OBJECT, decoder, stringValueFactory);
061 CheckArg.isNotNull(binaryValueFactory, "binaryValueFactory");
062 this.binaryValueFactory = binaryValueFactory;
063 }
064
065 /**
066 * @return binaryValueFactory
067 */
068 protected ValueFactory<Binary> getBinaryValueFactory() {
069 return this.binaryValueFactory;
070 }
071
072 /**
073 * {@inheritDoc}
074 */
075 public Object create( String value ) {
076 return this.getStringValueFactory().create(value);
077 }
078
079 /**
080 * {@inheritDoc}
081 */
082 public Object create( String value,
083 TextDecoder decoder ) {
084 return this.getStringValueFactory().create(value, decoder);
085 }
086
087 /**
088 * {@inheritDoc}
089 */
090 public Object create( int value ) {
091 return Integer.valueOf(value);
092 }
093
094 /**
095 * {@inheritDoc}
096 */
097 public Object create( long value ) {
098 return Long.valueOf(value);
099 }
100
101 /**
102 * {@inheritDoc}
103 */
104 public Object create( boolean value ) {
105 return Boolean.valueOf(value);
106 }
107
108 /**
109 * {@inheritDoc}
110 */
111 public Object create( float value ) {
112 return Float.valueOf(value);
113 }
114
115 /**
116 * {@inheritDoc}
117 */
118 public Object create( double value ) {
119 return Double.valueOf(value);
120 }
121
122 /**
123 * {@inheritDoc}
124 */
125 public Object create( BigDecimal value ) {
126 return value;
127 }
128
129 /**
130 * {@inheritDoc}
131 */
132 public Object create( Calendar value ) {
133 return value;
134 }
135
136 /**
137 * {@inheritDoc}
138 */
139 public Object create( Date value ) {
140 return value;
141 }
142
143 /**
144 * {@inheritDoc}
145 *
146 * @see org.jboss.dna.graph.property.ValueFactory#create(org.jboss.dna.graph.property.DateTime)
147 */
148 public Object create( DateTime value ) {
149 return value;
150 }
151
152 /**
153 * {@inheritDoc}
154 */
155 public Object create( Name value ) {
156 return value;
157 }
158
159 /**
160 * {@inheritDoc}
161 */
162 public Object create( Path value ) {
163 return value;
164 }
165
166 /**
167 * {@inheritDoc}
168 */
169 public Object create( Reference value ) {
170 return value;
171 }
172
173 /**
174 * {@inheritDoc}
175 */
176 public Object create( URI value ) {
177 return value;
178 }
179
180 /**
181 * {@inheritDoc}
182 *
183 * @see org.jboss.dna.graph.property.ValueFactory#create(java.util.UUID)
184 */
185 public Object create( UUID value ) {
186 return value;
187 }
188
189 /**
190 * {@inheritDoc}
191 *
192 * @see org.jboss.dna.graph.property.basic.AbstractValueFactory#create(java.lang.Object)
193 */
194 @Override
195 public Object create( Object value ) {
196 return value;
197 }
198
199 /**
200 * {@inheritDoc}
201 *
202 * @see org.jboss.dna.graph.property.basic.AbstractValueFactory#create(java.lang.Object[])
203 */
204 @Override
205 public Object[] create( Object[] values ) {
206 return values;
207 }
208
209 /**
210 * {@inheritDoc}
211 */
212 public Object create( byte[] value ) {
213 return getBinaryValueFactory().create(value);
214 }
215
216 /**
217 * {@inheritDoc}
218 *
219 * @see org.jboss.dna.graph.property.ValueFactory#create(org.jboss.dna.graph.property.Binary)
220 */
221 public Object create( Binary value ) throws ValueFormatException, IoException {
222 return value;
223 }
224
225 /**
226 * {@inheritDoc}
227 */
228 public Object create( InputStream stream,
229 long approximateLength ) {
230 return getBinaryValueFactory().create(stream, approximateLength);
231 }
232
233 /**
234 * {@inheritDoc}
235 */
236 public Object create( Reader reader,
237 long approximateLength ) {
238 return getBinaryValueFactory().create(reader, approximateLength);
239 }
240
241 /**
242 * {@inheritDoc}
243 */
244 @Override
245 protected Object[] createEmptyArray( int length ) {
246 return new Object[length];
247 }
248
249 }