package org.jboss.seam.remoting.wrapper; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Type; /** * Int wrapper class. * * @author Shane Bryzak */ public class NumberWrapper extends BaseWrapper implements Wrapper { private static final byte[] NUMBER_TAG_OPEN = "<number>".getBytes(); private static final byte[] NUMBER_TAG_CLOSE = "</number>".getBytes(); public Object convert(Type type) throws ConversionException { String val = element.getStringValue().trim(); if (type.equals(Short.class)) { value = !"".equals(val) ? Short.valueOf(val) : null; } else if (type.equals(Short.TYPE)) { value = Short.parseShort(val); } else if (type.equals(Integer.class)) { value = !"".equals(val) ? Integer.valueOf(val) : null; } else if (type.equals(Integer.TYPE)) { value = Integer.parseInt(val); } else if (type.equals(Long.class) || type.equals(Object.class)) { value = !"".equals(val) ? Long.valueOf(val) : null; } else if (type.equals(Long.TYPE)) { value = Long.parseLong(val); } else if (type.equals(Float.class)) { value = !"".equals(val) ? Float.valueOf(val) : null; } else if (type.equals(Float.TYPE)) { value = Float.parseFloat(val); } else if (type.equals(Double.class)) { value = !"".equals(val) ? Double.valueOf(val) : null; } else if (type.equals(Double.TYPE)) { value = Double.parseDouble(val); } else if (type.equals(Byte.class)) { value = !"".equals(val) ? Byte.valueOf(val) : null; } else if (type.equals(Byte.TYPE)) { value = Byte.parseByte(val); } else if (type.equals(String.class)) { value = val; } else { throw new ConversionException(String.format("Value [%s] cannot be converted to type [%s].", element.getStringValue(), type)); } return value; } /** * * @param out OutputStream * @throws IOException */ public void marshal(OutputStream out) throws IOException { out.write(NUMBER_TAG_OPEN); out.write(value.toString().getBytes()); out.write(NUMBER_TAG_CLOSE); } /** * Allow conversions to either Integer or String. * * @param cls Class * @return ConversionScore */ public ConversionScore conversionScore(Class cls) { if (cls.equals(Integer.class) || cls.equals(Integer.TYPE) || cls.equals(Long.class) || cls.equals(Long.TYPE) || cls.equals(Short.class) || cls.equals(Short.TYPE) || cls.equals(Double.class) || cls.equals(Double.TYPE) || cls.equals(Float.class) || cls.equals(Float.TYPE) || cls.equals(Byte.class) || cls.equals(Byte.TYPE)) { return ConversionScore.exact; } if (cls.equals(String.class) || cls.equals(Object.class)) { return ConversionScore.compatible; } return ConversionScore.nomatch; } }