JavaXT
|
|
Value Classpackage javaxt.utils; //****************************************************************************** //** Value Class //****************************************************************************** /** * A general purpose wrapper for Objects. The value can be converted into a * number of Java primitives including strings, integers, doubles, booleans, * etc. * ******************************************************************************/ public class Value { private Object value = null; //************************************************************************** //** Constructor //************************************************************************** /** Creates a new instance of this class. */ public Value(Object value){ this.value = value; } //************************************************************************** //** toObject //************************************************************************** /** Returns the object used to instantiate this class. */ public Object toObject(){ return value; } //************************************************************************** //** toInteger //************************************************************************** /** Returns the value as an integer. Returns a null if there was a problem * converting the value to an integer or if the value is null. */ public Integer toInteger(){ if (value==null) return null; if (value instanceof Integer) return (Integer) value; String val = null; try{ val = prepNumber(value+""); return Integer.valueOf(val); } catch(Exception e){ try{ return (int) Math.round(Double.valueOf(val)); } catch(Exception ex){ return null; } } } //************************************************************************** //** toShort //************************************************************************** /** Returns the value as a short. Returns a null if there was a problem * converting the value to a short or if the value is null. */ public Short toShort(){ if (value==null) return null; if (value instanceof Short) return (Short) value; String val = null; try{ val = prepNumber(value+""); return Short.valueOf(val); } catch(Exception e){ try{ return new Integer((int) Math.round(Double.valueOf(val))).shortValue(); } catch(Exception ex){ return null; } } } //************************************************************************** //** toDouble //************************************************************************** /** Returns the value as a double. Returns a null if there was a problem * converting the value to a double or if the value is null. */ public Double toDouble(){ if (value==null) return null; if (value instanceof Double) return (Double) value; if (value instanceof Integer) return ((Integer) value).doubleValue(); try{ return Double.valueOf(prepNumber(value+"")); } catch(Exception e){ return null; } } //************************************************************************** //** toLong //************************************************************************** /** Returns the value as a long. Returns a null if there was a problem * converting the value to a long or if the value is null. */ public Long toLong(){ if (value==null) return null; if (value instanceof Long) return (Long) value; if (value instanceof Integer) return ((Integer) value).longValue(); String val = null; try{ val = prepNumber(value+""); return Long.valueOf(val); } catch(Exception e){ try{ return Math.round(Double.valueOf(val)); } catch(Exception ex){ return null; } } } //************************************************************************** //** toBigDecimal //************************************************************************** /** Returns the value as a BigDecimal. Returns a null if there was a problem * converting the value to a BigDecimal or if the value is null. */ public java.math.BigDecimal toBigDecimal(){ if (value==null) return null; if (value instanceof java.math.BigDecimal) return (java.math.BigDecimal) value; try{ return java.math.BigDecimal.valueOf(toDouble()); } catch(Exception e){ return null; } } //************************************************************************** //** toFloat //************************************************************************** /** Returns the value as a float. Returns a null if there was a problem * converting the value to a float or if the value is null. */ public Float toFloat(){ if (value==null) return null; if (value instanceof Float) return (Float) value; try{ return Float.valueOf(prepNumber(value+"")); } catch(Exception e){ return null; } } //************************************************************************** //** toDate //************************************************************************** /** Returns the value as a Date. Returns a null if there was a problem * converting the value to a Date or if the value is null. */ public javaxt.utils.Date toDate(){ if (value!=null){ if (value instanceof javaxt.utils.Date){ return (javaxt.utils.Date) value; } else if (value instanceof java.sql.Timestamp){ java.sql.Timestamp ts = (java.sql.Timestamp) value; return new javaxt.utils.Date(ts.getTime()); } else if (value instanceof java.util.Date){ return new javaxt.utils.Date((java.util.Date) value); } else if (value instanceof java.util.Calendar){ return new javaxt.utils.Date((java.util.Calendar) value); } else{ try{ return new javaxt.utils.Date(value.toString()); } catch(Exception e){ } } } return null; } //************************************************************************** //** toByteArray //************************************************************************** /** Returns the value as a byte array. Returns a null if the value is null * or if there was a problem converting the value to a byte array. Note * that if the underlying object is a String, and if the String appears to * represent a Base64 encoded byte array, then an attempt is made to decode * the Base64 String. Otherwise, this method will simply write the value to * a ByteArrayOutputStream and return the raw bytes. */ public byte[] toByteArray(){ if (value==null) return null; if (value instanceof byte[]) return (byte[]) value; //Check if string is Base64 encoded if (value instanceof String){ String data = (String) value; if (data.startsWith("data:") && data.contains(";base64,")){ String type = data.substring(data.indexOf(":")+1, data.indexOf(";")); data = data.substring(("data:" + type + ";base64,").length()); byte[] b = Base64.decode(data); if (b!=null) return b; } } java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream(); try (java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(bos)){ out.writeObject(value); out.flush(); bos.close(); return bos.toByteArray(); } catch (Exception ex) { return null; } } //************************************************************************** //** toBoolean //************************************************************************** /** Returns the value as a Boolean. Returns null if the value is null or * cannot be converted to a Boolean. */ public Boolean toBoolean(){ if (value==null) return null; if (value instanceof Boolean) return (Boolean) value; String value = this.value.toString().toLowerCase().trim(); if (value.equals("true")) return true; if (value.equals("false")) return false; if (value.equals("yes")) return true; if (value.equals("no")) return false; if (value.equals("y")) return true; if (value.equals("n")) return false; if (value.equals("t")) return true; if (value.equals("f")) return false; if (value.equals("1")) return true; if (value.equals("0")) return false; return null; } //************************************************************************** //** isNumeric //************************************************************************** /** Returns true if the value is numeric. */ public boolean isNumeric(){ return (toDouble()!=null); } //************************************************************************** //** isArray //************************************************************************** /** Returns true is the value is an array. */ public boolean isArray(){ return value!=null && value.getClass().isArray(); } //************************************************************************** //** isNull //************************************************************************** /** Returns true if the value is null. */ public boolean isNull(){ return value==null; } //************************************************************************** //** toString //************************************************************************** /** Returns a string representation of the object by calling the object's * native toString() method. Returns a null if the object itself is null. */ public String toString(){ if (value==null) return null; else return value.toString(); } //************************************************************************** //** equals //************************************************************************** /** Used to compare values. Accepts any object. */ public boolean equals(Object obj){ if (obj instanceof Value) obj = ((Value) obj).toObject(); if (obj==null) { if (value==null) return true; else return false; } else{ if (value==null) return false; } //Special case for BigDecimal. BigDecimal objects equal only if they are //equal in value and scale. Thus 2.0 is not equal to 2.00 when compared //using the equals() method. The following code removes this ambiguity. if (!obj.equals(value)){ if (obj.getClass().equals(value.getClass())){ if (obj.getClass().equals(java.math.BigDecimal.class)){ java.math.BigDecimal bd1 = (java.math.BigDecimal) obj; java.math.BigDecimal bd2 = (java.math.BigDecimal) value; return bd1.stripTrailingZeros().equals(bd2.stripTrailingZeros()); } } } return obj.equals(value); } //************************************************************************** //** prepNumber //************************************************************************** private String prepNumber(String value){ value = value.trim(); //Replace currency or any other unexpected characters at the start of the string char a = value.charAt(0); boolean isNumeric = false; for (char c : chars){ if (c==a){ isNumeric = true; break; } } if (!isNumeric) value = value.substring(1).trim(); //Replace percentages or any other unexpected characters at the end of the string a = value.charAt(value.length()-1); isNumeric = false; for (char c : chars){ if (c==a){ isNumeric = true; break; } } if (!isNumeric) value = value.substring(0, value.length()-1).trim(); value = value.replace(",", ""); return value; } private static final char[] chars = new char[]{'-','.','0','1','2','3','4','5','6','7','8','9'}; } |