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