1 package nl.justobjects.pushlet.util;
2 
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.PrintWriter;
6 import java.util.Random;
7 
8 /**
9  * Randomizing routines.
10 *
11 * @author Just van den Broecke
12 * @version $Id: Rand.java,v 1.3 2007/11/23 21:10:17 justb Exp $
13 */
14public class Rand {
15    private static char CHARS[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'w', 'y', 'z'};
16    private static char NON_VOWELS[] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'z'};
17    private static char VOWELS[] = {'a', 'e', 'i', 'o', 'u', 'y'};
18    private static Random random = new Random();
19
20    public static char randomChar() {
21        return CHARS[randomInt(0, CHARS.length - 1)];
22    }
23
24    public static char randomVowel() {
25        return VOWELS[randomInt(0, VOWELS.length - 1)];
26    }
27
28    public static char randomNonVowel() {
29        return NON_VOWELS[randomInt(0, NON_VOWELS.length - 1)];
30    }
31
32    public static File randomTempDir() throws Exception {
33        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + "oasetest" + File.separator + randomString(12));
34        file.mkdirs();
35        file.deleteOnExit();
36        return file;
37    }
38
39    public static File randomTempFile() throws Exception {
40        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + "oase-" + randomString(6));
41        file.createNewFile();
42        file.deleteOnExit();
43        return file;
44    }
45
46    public static File randomBinaryFile(int aSize) throws Exception {
47        File file = randomTempFile();
48        FileOutputStream fos = new FileOutputStream(file);
49        fos.write(randomBytes(aSize));
50        fos.close();
51        return file;
52    }
53
54    public static File randomTextFile(int aSize) throws Exception {
55        File file = randomTempFile();
56        PrintWriter pw = new PrintWriter(new FileOutputStream(file));
57        pw.write(randomString(aSize));
58        pw.close();
59        return file;
60    }
61
62    public static byte[] randomBytes(int aSize) {
63        return randomBlob(aSize);
64    }
65
66    public static byte[] randomBlob(int aSize) {
67        byte[] retval = new byte[aSize];
68        for (int i = 0; i < retval.length; i++) {
69            retval[i] = randomByte();
70        }
71        return retval;
72    }
73
74    public static byte randomByte() {
75        return (byte) random.nextInt();
76    }
77
78    public static double randomDouble() {
79        return random.nextLong();
80    }
81
82
83    public static int randomInt() {
84        return random.nextInt();
85    }
86
87    public static int randomInt(int min, int max) {
88        return (int) ((Math.random() * (double) (max + 1 - min)) + min);
89    }
90
91    public static long randomLong() {
92        return random.nextLong();
93    }
94
95    public static long randomLong(long min, long max) {
96        return (long) ((Math.random() * (double) (max + 1L - min)) + min);
97    }
98
99    public static String randomName(int aLength) {
00        StringBuffer sb = new StringBuffer(aLength);
01        for (int i = 0; i < aLength; i++) {
02            sb.append(i % 2 == 0 ? randomNonVowel() : randomVowel());
03        }
04        return sb.toString();
05    }
06
07    public static void randomSleep(long min, long max) {
08        try {
09            Thread.sleep(randomLong(min, max));
10        } catch (InterruptedException ie) {
11
12        }
13    }
14
15    public static String randomString(int aLength) {
16        StringBuffer sb = new StringBuffer(aLength);
17        for (int i = 0; i < aLength; i++) {
18            sb.append(randomChar());
19        }
20        return sb.toString();
21    }
22
23    public static String randomString() {
24        return "" + randomLong();
25    }
26
27
28}
29
30/*
31 * $Log: Rand.java,v $
32 * Revision 1.3  2007/11/23 21:10:17  justb
33 * add hooks for custom logging (you can override DefaultLogger in pushlet.properties)
34 *
35 * Revision 1.2  2004/09/03 22:35:38  justb
36 * Almost complete rewrite, just checking in now
37 *
38 * Revision 1.1  2004/03/10 12:21:27  justb
39 * *** empty log message ***
40 *
41 *
42 */