1 16 17 package org.apache.taglibs.standard.lang.jpath.adapter; 18 19 import java.text.DateFormat ; 20 import java.text.DecimalFormat ; 21 import java.text.NumberFormat ; 22 import java.util.Collection ; 23 import java.util.Date ; 24 import java.util.GregorianCalendar ; 25 26 public class Convert { 27 28 public static Double toDouble(Object o) throws ConversionException { 29 Double converted; 30 o = performBasicConversions(o); 31 if (o == null) { 32 converted = new Double (Double.NaN); 33 } else if (o instanceof Boolean ) { 34 converted = toDouble((Boolean )o); 35 } else if (o instanceof Double ) { 36 converted = toDouble((Double )o); 37 } else if (o instanceof String ) { 38 converted = toDouble((String )o); 39 } else if (o instanceof JSPDate) { 40 converted = toDouble((JSPDate)o); 41 } else if (o instanceof JSPList) { 42 converted = toDouble((JSPList)o); 43 } else { 44 converted = toDouble(Convert.toString(o)); 45 } 48 return converted; 49 } 50 51 private static Double toDouble(Boolean b) throws ConversionException { 52 Double converted; 53 if (b.booleanValue() == true) { 54 converted = new Double (1); 55 } else { 56 converted = new Double (0); 57 } 58 return converted; 59 } 60 61 private static Double toDouble(Double d) throws ConversionException { 62 return d; 63 } 64 65 private static Double toDouble(String s) throws ConversionException { 66 Double converted; 67 try { 68 converted = Double.valueOf(s); 69 } catch (NumberFormatException nfe) { 70 converted = new Double (Double.NaN); 71 } 72 return converted; 73 } 74 75 private static Double toDouble(JSPDate d) throws ConversionException { 76 Double converted; 77 converted = d.getTime(); 78 return converted; 79 } 80 81 82 private static Double toDouble(JSPList list) throws ConversionException { 83 Double converted; 84 converted = Convert.toDouble(Convert.toString(list)); 85 return converted; 86 } 87 88 89 public static Boolean toBoolean(Object o) throws ConversionException { 90 Boolean converted; 91 o = performBasicConversions(o); 92 if (o == null) { 93 converted = Boolean.FALSE; 94 } else if (o instanceof Boolean ) { 95 converted = toBoolean((Boolean )o); 96 } else if (o instanceof Double ) { 97 converted = toBoolean((Double )o); 98 } else if (o instanceof String ) { 99 converted = toBoolean((String )o); 100 } else if (o instanceof JSPDate) { 101 converted = toBoolean((JSPDate)o); 102 } else if (o instanceof JSPList) { 103 converted = toBoolean((JSPList)o); 104 } else { 105 converted = toBoolean(Convert.toString(o)); 106 } 109 return converted; 110 } 111 112 private static Boolean toBoolean(Boolean b) throws ConversionException { 113 return b; 114 } 115 116 private static Boolean toBoolean(Double d) throws ConversionException { 117 Boolean converted; 118 if (d == null) { 119 converted = Boolean.FALSE; 120 } else if (!d.isNaN() && d.doubleValue() != 0 && d.doubleValue() != -0) { 121 converted = Boolean.TRUE; 122 } else { 123 converted = Boolean.FALSE; 124 } 125 return converted; 126 } 127 128 private static Boolean toBoolean(String s) throws ConversionException { 129 Boolean converted; 130 if (s == null) { 131 converted = Boolean.FALSE; 132 } else if (s.length() != 0) { 133 converted = Boolean.TRUE; 134 } else { 135 converted = Boolean.FALSE; 136 } 137 return converted; 138 } 139 140 private static Boolean toBoolean(JSPDate d) throws ConversionException { 141 Boolean converted; 142 converted = Convert.toBoolean(Convert.toString(d)); 143 return converted; 144 } 145 146 private static Boolean toBoolean(JSPList list) throws ConversionException { 147 Boolean converted; 148 if (list == null || !list.hasNext()) { 149 converted = Boolean.FALSE; 150 } else { 151 if (list.getPosition() != 0) { 152 throw new ConversionException("cannot convert a list to " 153 + "a Boolean if the list is not at the starting " 154 + "position" ); 155 } 156 converted = Boolean.TRUE; 157 } 158 return converted; 159 } 160 161 162 public static String toString(Object o) throws ConversionException { 163 String converted; 164 o = performBasicConversions(o); 165 if (o == null) { 166 converted = new String (""); 167 } else if (o instanceof Boolean ) { 168 converted = toString((Boolean )o); 169 } else if (o instanceof Double ) { 170 converted = toString((Double )o); 171 } else if (o instanceof String ) { 172 converted = toString((String )o); 173 } else if (o instanceof JSPDate) { 174 converted = toString((JSPDate)o); 175 } else if (o instanceof JSPList) { 176 converted = toString((JSPList)o); 177 } else { 178 converted = o.toString(); 179 } 182 return converted; 183 } 184 185 private static String toString(Boolean b) throws ConversionException { 186 return b.toString(); 187 } 188 189 private static String toString(Double d) throws ConversionException { 190 String converted; 191 if (d == null || d.isNaN()) { 192 converted = new String ("NaN"); 193 } else if (d.doubleValue() == 0 || d.doubleValue() == -0) { 194 converted = new String ("0"); 195 } else if (d.doubleValue() == Double.POSITIVE_INFINITY) { 196 converted = new String ("Infinity"); 197 } else if (d.doubleValue() == Double.NEGATIVE_INFINITY) { 198 converted = new String ("-Infinity"); 199 } else if (Math.floor(d.doubleValue()) == d.doubleValue()) { 200 NumberFormat form; 201 form = NumberFormat.getInstance(); 202 try { 203 ((DecimalFormat )form).applyPattern("#"); 204 converted = form.format(d); 205 } catch (IllegalArgumentException iae) { 206 converted = new String ("NaN"); 207 } 208 } else { 209 converted = d.toString(); 210 } 211 return converted; 212 } 213 214 private static String toString(String s) throws ConversionException { 215 return s; 216 } 217 218 private static String toString(JSPDate d) throws ConversionException { 219 String converted; 220 converted = DateFormat.getDateInstance().format(new Date (d.getTime().longValue())); 221 return converted; 222 } 223 224 private static String toString(JSPList list) throws ConversionException { 225 String converted; 226 if (list == null || !list.hasNext()) { 227 converted = ""; 228 } else { 229 if (list.getPosition() != 0) { 230 throw new ConversionException("cannot convert a list to " 231 + "a String if the list is not at the starting " 232 + "position" ); 233 } 234 converted = Convert.toString(list.next()); 235 } 236 return converted; 237 } 238 239 public static JSPDate toJSPDate(Object o) throws ConversionException { 240 JSPDate converted; 241 o = performBasicConversions(o); 242 if (o == null) { 243 throw new ConversionException("cannot convert null to a JSPDate"); 244 } else if (o instanceof JSPDate) { 245 converted = toJSPDate((JSPDate)o); 246 } else { 247 throw new ConversionException("Object [" + o + "] cannot be " 248 + "converted to a JSPList"); 249 } 250 return converted; 251 } 252 253 private static JSPDate toJSPDate(JSPDate date) throws ConversionException { 254 return date; 255 } 256 257 private static JSPDate toJSPDate(GregorianCalendar gc) throws ConversionException { 258 return (JSPDate)GregorianCalendarAdapter.adapt(gc); 259 } 260 261 public static JSPList toJSPList(Object o) throws ConversionException { 262 JSPList converted; 263 o = performBasicConversions(o); 264 if (o == null) { 265 throw new ConversionException("cannot convert null to a JSPList"); 266 } else if (o instanceof JSPList) { 267 converted = toJSPList((JSPList)o); 268 } else { 269 throw new ConversionException("Object [" + o + "] cannot be " 270 + "converted to a JSPList"); 271 } 272 return converted; 273 } 274 275 private static JSPList toJSPList(JSPList list) throws ConversionException { 276 return list; 277 } 278 279 private static Object performBasicConversions(Object o) { 280 Object converted; 281 if (o == null) { 282 converted = null; 283 } else if (o instanceof Short ) { 284 converted = new Double (((Short )o).toString()); 285 } else if (o instanceof Integer ) { 286 converted = new Double (((Integer )o).toString()); 287 } else if (o instanceof Float ) { 288 converted = new Double (((Float )o).toString()); 289 } else if (o instanceof Long ) { 290 converted = new Double (((Long )o).toString()); 291 } else if (o instanceof Byte ) { 292 converted = new String (((Byte )o).toString()); 293 } else if (o instanceof Character ) { 294 converted = new String (((Character )o).toString()); 295 } else { 296 converted = o; 297 } 298 converted = Convert.toJSPType(converted); 299 return converted; 300 } 301 302 public static Object toJSPType(Object o) { 303 Object converted; 304 if (o == null) { 305 converted = null; 306 } else if (o instanceof Collection ) { 307 converted = CollectionAdapter.adapt(o); 308 } else if (o instanceof GregorianCalendar ) { 309 converted = GregorianCalendarAdapter.adapt(o); 310 } else { 311 converted = o; 312 } 313 return converted; 314 } 315 316 } 317 | Popular Tags |