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