Package org.hivedb.util

Source Code of org.hivedb.util.PrimitiveUtils

package org.hivedb.util;

import org.hivedb.util.functional.Binary;
import org.hivedb.util.classgen.ReflectionTools;

import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Blob;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class PrimitiveUtils {
 
  static Date date;
  static {
    Calendar calendar = GregorianCalendar.getInstance();
    calendar.clear();
    date = calendar.getTime();
  }
 
  public static boolean isUndefinedId(Object id) {
    return getUndefinedValue(id.getClass()).equals(id);
  }
  public static Object getUndefinedValue(Class clazz) {
    if (isInteger(clazz))
      return 0;
    if (isLong(clazz))
      return 0L;
    if (isShort(clazz))
      return (short) 0;
    if (isDouble(clazz))
      return (double) 0;
    if (isFloat(clazz))
      return (float) 0;
    if (isBigDecimal(clazz))
      return BigDecimal.ZERO;
    if (isString(clazz))
      return "";
    if (isDate(clazz)) {   
      return date;
    }
      
    throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
  }
  public static Object getPrimitiveEquivalent(Object value) {
    if (isInteger(value.getClass()))
      return (int)(Integer)value;
    if (isLong(value.getClass()))
      return (long)(Long)value;
    if (isShort(value.getClass()))
      return (short)(Short)value;
    if (isDouble(value.getClass()))
      return (double)(Double)value;
    if (isFloat(value.getClass()))
      return (float)(Float)value;
    return value;
  }
 
  public static<T> T getMinValue(Class<T> clazz) {
    if (isInteger(clazz))
      return (T)new Integer(Integer.MIN_VALUE);
    if (isLong(clazz))
      return (T)new Long(Long.MIN_VALUE);
    if (isShort(clazz))
      return (T)new Short(Short.MIN_VALUE);
    if (isDouble(clazz))
      return (T)new Double(Double.MIN_VALUE);
    if (isFloat(clazz))
      return (T)new Float(Float.MIN_VALUE);
      
    throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
  }
  public static<T> T getMaxValue(Class<T> clazz) {
    if (isInteger(clazz))
      return (T)new Integer(Integer.MAX_VALUE);
    if (isLong(clazz))
      return (T)new Long(Long.MAX_VALUE);
    if (isShort(clazz))
      return (T)new Short(Short.MAX_VALUE);
    if (isDouble(clazz))
      return (T)new Double(Double.MAX_VALUE);
    if (isFloat(clazz))
      return (T)new Float(Float.MAX_VALUE);
      
    throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
  }
 
  public static Binary getMinFunction(final Class<?> clazz) {
   
    return new Binary() {
      public Object f(Object t1, Object t2) {
        if (isInteger(clazz))
          return Math.min((Integer)t1, (Integer)t2);
        if (isLong(clazz))
          return Math.min((Long)t1, (Long)t2);
        if (isFloat(clazz))
          return Math.min((Float)t1, (Float)t2);
        if (isDouble(clazz))
          return Math.min((Double)t1, (Double)t2);
        throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
    }};
  }
  public static Binary getMaxFunction(final Class<?> clazz) {
   
    return new Binary() {
      public Object f(Object t1, Object t2) {
        if (isInteger(clazz))
          return Math.max((Integer)t1, (Integer)t2);
        if (isLong(clazz))
          return Math.max((Long)t1, (Long)t2);
        if (isFloat(clazz))
          return Math.max((Float)t1, (Float)t2);
        if (isDouble(clazz))
          return Math.max((Double)t1, (Double)t2);
        throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
    }};
  }
 
  public static <T> T copyInstance(T instance) {
    if (isInteger(instance.getClass()))
      return (T) new Integer(((Integer)instance).intValue());
    if (isLong(instance.getClass()))
      return (T) new Long(((Long)instance).longValue());
    if (isShort(instance.getClass()))
      return (T) new Short(((Short)instance).shortValue());
    if (isDouble(instance.getClass()))
      return (T) new Double(((Double)instance).doubleValue());
    if (isFloat(instance.getClass()))
      return (T) new Float(((Float)instance).floatValue());
    if (isBigDecimal(instance.getClass())) {   
      return (T) ((BigDecimal)instance).multiply(new BigDecimal(new Integer(1)));
    }
    if (isString(instance.getClass()))
      return (T)new String((String)instance); // copy so we can tell that it changed (even though Strings are immutable)
    if (isDate(instance.getClass())) {   
      return (T) ((Date)instance).clone();
    }
    throw new RuntimeException(String.format("Class %s not supported", instance.getClass().getSimpleName()));
  }
 
  /**
   *  Convert the given string to the given primitive class
   * @param clazz
   * @param string
   * @return
   */
  public static<T> T parseString(Class<T> clazz, String string) {
    if (isInteger(clazz))
      return (T) new Integer(Integer.parseInt(string));
    if (isLong(clazz))
      return (T) new Long(Long.parseLong(string));
    if (isShort(clazz))
      return (T) new Short(Short.parseShort(string));
    if (isDouble(clazz))
      return (T) new Double(Double.parseDouble(string));
    if (isFloat(clazz))
      return (T) new Float(Float.parseFloat(string));
    if (isBigDecimal(clazz)) {   
      return (T) new BigDecimal(string);
    }
    if (isString(clazz))
      return (T)new String(string); // copy so we can tell that it changed (even though Strings are immutable)
    if (isDate(clazz)) {   
      try {
        return (T)DateFormat.getDateInstance().parse(string);
      } catch (ParseException e) {
        throw new RuntimeException(e);
      }
    }
    throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName()));
  }
 
  /**
   *  Is this class representable as one our supported noncomplex types
   * @param clazz
   */
  public static boolean isPrimitiveClass(Class clazz) {
    return isInteger(clazz) || isLong(clazz) || isShort(clazz) || isDouble(clazz) || isFloat(clazz) || isBigDecimal(clazz) || isString(clazz) || isDate(clazz)
      || isBoolean(clazz) || isClass(clazz) || isObject(clazz) || isSerializationClass(clazz);
  }
 
  public static boolean isString(Class clazz) {
    return clazz.equals(String.class);
  }
 
  public static boolean isLong(Class clazz) {
    return clazz.equals(long.class)
        || clazz.equals(Long.class);
  }
  public static boolean isInteger(Class clazz) {
    return clazz.equals(int.class)
        || clazz.equals(Integer.class);
  }
  public static boolean isShort(Class clazz) {
    return clazz.equals(short.class)
        || clazz.equals(Short.class);
  }
  public static boolean isDouble(Class clazz) {
    return clazz.equals(double.class)
    || clazz.equals(Double.class);
  }
  public static boolean isFloat(Class clazz) {
    return clazz.equals(float.class)
    || clazz.equals(Float.class);
  }
 
  public static boolean isBigDecimal(Class clazz) {
    return clazz.equals(BigDecimal.class);
  }
 
  public static boolean isDate(Class clazz) {
    return ReflectionTools.doesImplementOrExtend(clazz, Date.class); // account for java.sql derivatives
  }
  public static boolean isBoolean(Class clazz) {
    return clazz.equals(boolean.class) || clazz.equals(Boolean.class);
  }
  public static boolean isClass(Class clazz) {
    return clazz.equals(Class.class);
  }
  public static boolean isObject(Class clazz) {
    return clazz.equals(Object.class);
  }
  public static boolean isSerializationClass(Class clazz) {
    return clazz.equals(Blob.class) || clazz.equals(InputStream.class);
  }
 
}
TOP

Related Classes of org.hivedb.util.PrimitiveUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.