| 1 21 22 package org.continuent.sequoia.controller.sql.macros; 23 24 import java.util.Random ; 25 26 import org.continuent.sequoia.common.xml.DatabasesXmlTags; 27 28 34 public class RandomMacro extends AbstractMacro 35 { 36 private int numberFormat; 37 38 39 public static final int RAND_INT = 1; 40 41 public static final int RAND_LONG = 2; 42 43 public static final int RAND_FLOAT = 3; 44 45 public static final int RAND_DOUBLE = 4; 46 47 private final Random randGenerator = new Random (System.currentTimeMillis()); 48 49 55 public RandomMacro(String name, int format) 56 { 57 super(name); 58 numberFormat = format; 59 } 60 61 64 public String generateMacroValue(long currentTimeInMs) 65 { 66 switch (numberFormat) 67 { 68 case RAND_INT : 69 return Integer.toString(randGenerator.nextInt()); 70 case RAND_LONG : 71 return Long.toString(randGenerator.nextLong()); 72 case RAND_FLOAT : 73 return Float.toString(randGenerator.nextFloat()); 74 case RAND_DOUBLE : 75 return Double.toString(randGenerator.nextDouble()); 76 default : 77 throw new RuntimeException ( 78 "Unexpected replacement strategy for random macro (" + numberFormat 79 + ")"); 80 } 81 } 82 83 90 public static final int getRandNumberFormat(String numberFormat) 91 throws IllegalArgumentException  92 { 93 if (numberFormat.equalsIgnoreCase(DatabasesXmlTags.VAL_double)) 94 return RAND_DOUBLE; 95 else if (numberFormat.equalsIgnoreCase(DatabasesXmlTags.VAL_float)) 96 return RAND_FLOAT; 97 else if (numberFormat.equalsIgnoreCase(DatabasesXmlTags.VAL_int)) 98 return RAND_INT; 99 else if (numberFormat.equalsIgnoreCase(DatabasesXmlTags.VAL_long)) 100 return RAND_LONG; 101 else 102 throw new IllegalArgumentException ("Invalid random number format tag: " 103 + numberFormat); 104 } 105 106 113 public static final String getStringRandLevel(int numberFormat) 114 throws IllegalArgumentException  115 { 116 switch (numberFormat) 117 { 118 case RAND_DOUBLE : 119 return DatabasesXmlTags.VAL_double; 120 case RAND_FLOAT : 121 return DatabasesXmlTags.VAL_float; 122 case RAND_INT : 123 return DatabasesXmlTags.VAL_int; 124 case RAND_LONG : 125 return DatabasesXmlTags.VAL_long; 126 default : 127 throw new IllegalArgumentException ("Invalid random number format: " 128 + numberFormat); 129 } 130 } 131 132 135 public String getXml() 136 { 137 return "<" + DatabasesXmlTags.ELT_RandomMacro + " " 138 + DatabasesXmlTags.ATT_macroName + "=\"" + macroName + "\" " 139 + DatabasesXmlTags.ATT_numberFormat + "=\"" 140 + getStringRandLevel(numberFormat) + "\" />"; 141 } 142 } 143 | Popular Tags |