package org.hivedb.util.classgen; import org.hivedb.util.PrimitiveUtils; import org.hivedb.util.functional.Generator; import java.math.BigDecimal; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Random; public class GeneratePrimitiveValue<F> implements Generator<F> { Class<F> clazz; static Random random; public GeneratePrimitiveValue(Class<F> clazz) { this.clazz = clazz; this.random = new Random(); } @SuppressWarnings("unchecked") /** * Generate random values that are zero or positive when applicable */ public F generate() { if (PrimitiveUtils.isInteger(clazz)) return (F)new Integer(Math.abs(random.nextInt(Integer.MAX_VALUE))); else if (PrimitiveUtils.isLong(clazz)) return (F)new Long(Math.abs(random.nextLong())); else if (PrimitiveUtils.isShort(clazz)) return (F)new Short((short)Math.abs(random.nextInt(Integer.MAX_VALUE >> 16))); else if (PrimitiveUtils.isDouble(clazz)) return (F)new Double(Math.floor(Math.abs(random.nextDouble()))+.1); else if (PrimitiveUtils.isFloat(clazz)) return (F)new Float(Math.floor(Math.abs(random.nextFloat()))+.1); else if (PrimitiveUtils.isBigDecimal(clazz)) return (F)new BigDecimal(Math.floor(Math.abs(random.nextFloat()))+.1); else if (PrimitiveUtils.isString(clazz)) return (F)new String("String"+Math.abs(random.nextInt())); else if (PrimitiveUtils.isDate(clazz)) { final long min = maxTime + random.nextInt(); calendar.setTimeInMillis(min); return (F)calendar.getTime(); } else if (PrimitiveUtils.isBoolean(clazz)) return (F)(random.nextInt() % 2 == 0 ? Boolean.TRUE : Boolean.FALSE); else if (PrimitiveUtils.isObject(clazz)) return (F)new Integer(-1); throw new RuntimeException(String.format("Class %s not supported", clazz.getSimpleName())); } static Calendar calendar; static long maxTime; static { calendar = GregorianCalendar.getInstance(); maxTime = calendar.getTimeInMillis(); random = new Random(System.currentTimeMillis()); } }