1 48 49 50 package org.krysalis.jcharts.test; 51 52 53 import org.krysalis.jcharts.properties.*; 54 import org.krysalis.jcharts.properties.util.ChartStroke; 55 import org.krysalis.jcharts.properties.util.ChartFont; 56 import org.krysalis.jcharts.chartData.ScatterPlotDataSet; 57 58 import java.awt.*; 59 60 61 final public class TestDataGenerator 62 { 63 private final static Font[] ALL_FONTS=GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); 64 65 66 73 public static Font getRandomFont( double minSize, double maxSize ) 74 { 75 Font font=ALL_FONTS[ (int) TestDataGenerator.getRandomNumber( ALL_FONTS.length ) ]; 76 font=font.deriveFont( (float) TestDataGenerator.getRandomNumber( minSize, maxSize ) ); 77 return font; 78 } 79 80 81 87 public static double getRandomNumber( double maxValue ) 88 { 89 return Math.random() * maxValue; 90 } 91 92 93 100 protected static double getRandomNumber( double minValue, double maxValue ) 101 { 102 return ( minValue + ( Math.random() * ( maxValue - minValue ) ) ); 103 } 104 105 106 114 protected static double getRandomNumberIncludingZero( double minValue, double maxValue ) 115 { 116 if( ( TestDataGenerator.getRandomNumber( 1 ) > 0.8d ) ) 117 { 118 return 0.0d; 119 } 120 else 121 { 122 return getRandomNumber( minValue, maxValue ); 123 } 124 } 125 126 127 135 public static double[] getRandomNumbers( int numToGenerate, double minValue, double maxValue ) 136 { 137 double[] data=new double[ numToGenerate ]; 138 for( int i=0; i < numToGenerate; i++ ) 139 { 140 data[ i ]=getRandomNumber( minValue, maxValue ); 141 } 142 return data; 143 } 144 145 146 155 public static double[][] getRandomNumbers( int numberOfDataSets, int numToGenerate, double minValue, double maxValue ) 156 { 157 double[][] data=new double[ numberOfDataSets ][ numToGenerate ]; 158 for( int j=0; j < numberOfDataSets; j++ ) 159 { 160 for( int i=0; i < numToGenerate; i++ ) 161 { 162 data[ j ][ i ]=getRandomNumberIncludingZero( minValue, maxValue ); 163 } 164 } 165 return data; 166 } 167 168 169 170 180 public static Point.Double[] getRandomPoints( int numToGenerate, 181 double xMinValue, 182 double xMaxValue, 183 double yMinValue, 184 double yMaxValue ) 185 { 186 Point.Double[] points= new Point.Double[ numToGenerate ]; 187 for( int j=0; j < numToGenerate; j++ ) 188 { 189 points[ j ]= ScatterPlotDataSet.createPoint2DDouble(); 190 points[ j ].setLocation( getRandomNumber( xMinValue, xMaxValue ), getRandomNumber( yMinValue, yMaxValue ) ); 191 } 192 return points; 193 } 194 195 196 201 protected static Paint getRandomPaint() 202 { 203 if( getRandomNumber( 1 ) > 0.5 ) 204 { 205 return getRandomColor(); 206 } 207 else 208 { 209 float width=(float) TestDataGenerator.getRandomNumber( 10, 800 ); 210 float height=(float) TestDataGenerator.getRandomNumber( 10, 600 ); 211 float x=(float) TestDataGenerator.getRandomNumber( 0, 800 ); 212 float y=(float) TestDataGenerator.getRandomNumber( 0, 600 ); 213 return new GradientPaint( x, y, getRandomColor(), width, height, getRandomColor() ); 214 } 215 } 216 217 218 223 public static Paint[] getRandomPaints( int numToCreate ) 224 { 225 Paint paints[]=new Paint[ numToCreate ]; 226 for( int i=0; i < numToCreate; i++ ) 227 { 228 paints[ i ]=getRandomPaint(); 229 } 230 return paints; 231 } 232 233 234 239 protected static Color getRandomColor() 240 { 241 int transparency=(int) getRandomNumber( 100, 375 ); 242 if( transparency > 255 ) 243 { 244 transparency=255; 245 } 246 247 return new Color( (int) getRandomNumber( 255 ), (int) getRandomNumber( 255 ), (int) getRandomNumber( 255 ), transparency ); 248 } 249 250 251 258 protected static String getRandomString( int maxStringLength, boolean canBeNull ) 259 { 260 if( canBeNull ) 261 { 262 if( TestDataGenerator.getRandomNumber( 10 ) <= 1 ) 263 { 264 return null; 265 } 266 } 267 268 269 int tempVal; 270 271 int stringLength=1 + (int) getRandomNumber( maxStringLength ); 272 StringBuffer stringBuffer=new StringBuffer ( stringLength ); 273 274 while( stringLength-- > 0 ) 275 { 276 tempVal=65 + (int) getRandomNumber( 58 ); 277 while( tempVal > 90 && tempVal < 97 ) 278 { 279 tempVal=65 + (int) getRandomNumber( 58 ); 280 } 281 282 stringBuffer.append( (char) tempVal ); 283 } 284 285 return stringBuffer.toString(); 286 } 287 288 289 294 protected static String [] getRandomStrings( int numToCreate, int maxStringLength, boolean canBeNull ) 295 { 296 if( canBeNull ) 297 { 298 if( (int) TestDataGenerator.getRandomNumber( 10 ) <= 1 ) 299 { 300 return null; 301 } 302 } 303 304 String strings[]=new String [ numToCreate ]; 305 306 for( int i=0; i < numToCreate; i++ ) 307 { 308 strings[ i ]=getRandomString( maxStringLength, false ); 309 } 310 311 return strings; 312 } 313 314 315 320 protected static void randomizeAxisProperties( AxisProperties axisProperties ) 321 { 322 DataAxisProperties dataAxisProperties; 323 LabelAxisProperties labelAxisProperties; 324 if( axisProperties.isPlotHorizontal() ) 325 { 326 dataAxisProperties= (DataAxisProperties) axisProperties.getXAxisProperties(); 327 labelAxisProperties= (LabelAxisProperties) axisProperties.getYAxisProperties(); 328 } 329 else 330 { 331 dataAxisProperties= (DataAxisProperties) axisProperties.getYAxisProperties(); 332 labelAxisProperties= (LabelAxisProperties) axisProperties.getXAxisProperties(); 333 } 334 335 dataAxisProperties.setNumItems( (int) TestDataGenerator.getRandomNumber( 2, 15 ) ); 336 dataAxisProperties.setRoundToNearest( (int) TestDataGenerator.getRandomNumber( -5, 3 ) ); 337 338 dataAxisProperties.setUseDollarSigns( TestDataGenerator.getRandomNumber( 1 ) > 0.5d ); 339 dataAxisProperties.setUseCommas( TestDataGenerator.getRandomNumber( 1 ) > 0.5d ); 340 341 344 348 dataAxisProperties.setShowEndBorder( TestDataGenerator.getRandomNumber( 1 ) > 0.5d ); 349 labelAxisProperties.setShowEndBorder( TestDataGenerator.getRandomNumber( 1 ) > 0.5d ); 350 351 355 358 359 362 364 axisProperties.getXAxisProperties().setAxisStroke( new ChartStroke( new BasicStroke( 1.5f ), TestDataGenerator.getRandomPaint() ) ); 365 axisProperties.getYAxisProperties().setAxisStroke( new ChartStroke( new BasicStroke( 1.5f ), TestDataGenerator.getRandomPaint() ) ); 366 367 368 } 370 371 372 377 protected static void randomizeLegend( LegendProperties legendProperties ) 378 { 379 Font font; 380 int fontSize; 381 382 int numColumns=(int) TestDataGenerator.getRandomNumber( 1, 6 ); 383 if( numColumns == 6 ) 384 { 385 numColumns=LegendAreaProperties.COLUMNS_AS_MANY_AS_NEEDED; 386 } 387 388 legendProperties.setNumColumns( numColumns ); 389 legendProperties.setPlacement( (int) TestDataGenerator.getRandomNumber( 4 ) ); 390 391 fontSize=(int) TestDataGenerator.getRandomNumber( 6, 20 ); 392 font=ALL_FONTS[ (int) TestDataGenerator.getRandomNumber( ALL_FONTS.length ) ]; 393 font=font.deriveFont( (float) fontSize ); 394 legendProperties.setChartFont( new ChartFont( font, TestDataGenerator.getRandomPaint() ) ); 395 396 397 if( (int) TestDataGenerator.getRandomNumber( 2 ) == 0 ) 399 { 400 legendProperties.setBorderStroke( null ); 401 } 402 else 403 { 404 legendProperties.setBorderStroke( ChartStroke.DEFAULT_LEGEND_OUTLINE ); 405 } 406 407 if( (int) TestDataGenerator.getRandomNumber( 2 ) == 0 ) 409 { 410 legendProperties.setBackgroundPaint( null ); 411 } 412 else 413 { 414 legendProperties.setBackgroundPaint( TestDataGenerator.getRandomPaint() ); 415 } 416 } 417 } | Popular Tags |