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