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