1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package com.rapiddweller.benerator.distribution.sequence;
28
29 import com.rapiddweller.benerator.Generator;
30 import com.rapiddweller.benerator.NonNullGenerator;
31 import com.rapiddweller.benerator.distribution.Sequence;
32 import com.rapiddweller.benerator.distribution.SequenceManager;
33 import com.rapiddweller.benerator.wrapper.WrapperFactory;
34 import com.rapiddweller.common.BeanUtil;
35 import com.rapiddweller.common.NumberUtil;
36
37 import java.math.BigDecimal;
38 import java.math.BigInteger;
39
40 import static com.rapiddweller.common.NumberUtil.toBigDecimal;
41 import static com.rapiddweller.common.NumberUtil.toBigInteger;
42 import static com.rapiddweller.common.NumberUtil.toDouble;
43 import static com.rapiddweller.common.NumberUtil.toInteger;
44 import static com.rapiddweller.common.NumberUtil.toLong;
45
46
47
48
49
50
51
52
53
54 public class RandomSequence extends Sequence {
55
56 @Override
57 public <T extends Number> NonNullGenerator<T> createNumberGenerator(Class<T> numberType, T min, T max, T granularity, boolean unique) {
58 NonNullGenerator<? extends Number> base;
59 if (unique) {
60 return SequenceManager.EXPAND_SEQUENCE.createNumberGenerator(numberType, min, max, granularity, unique);
61 } else if (BeanUtil.isIntegralNumberType(numberType)) {
62 long lMax = (max != null ? max.longValue() :
63 Math.min(RandomLongGenerator.DEFAULT_MAX, NumberUtil.maxValue(numberType).longValue()));
64 if (Integer.class.equals(numberType.getClass())) {
65 base = new RandomIntegerGenerator(toInteger(min), toInteger(lMax), toInteger(granularity));
66 } else if (BigInteger.class.equals(numberType.getClass())) {
67 base = new RandomBigIntegerGenerator(toBigInteger(min), toBigInteger(lMax), toBigInteger(granularity));
68 } else if (BigDecimal.class.equals(numberType.getClass())) {
69 base = new RandomBigDecimalGenerator(toBigDecimal(min), toBigDecimal(lMax), toBigDecimal(granularity));
70 } else {
71 base = new RandomLongGenerator(toLong(min), lMax, toLong(granularity));
72 }
73 } else {
74 double dMax = (max != null ? max.doubleValue() : Long.MAX_VALUE);
75 base = new RandomDoubleGenerator(toDouble(min), dMax, toDouble(granularity));
76 }
77 return WrapperFactory.asNonNullNumberGeneratorOfType(numberType, base, min, granularity);
78 }
79
80 @Override
81 public <T> Generator<T> applyTo(Generator<T> source, boolean unique) {
82 if (unique) {
83 return SequenceManager.EXPAND_SEQUENCE.applyTo(source, unique);
84 } else {
85 return super.applyTo(source, unique);
86 }
87 }
88
89 @Override
90 public String toString() {
91 return BeanUtil.toString(this);
92 }
93
94 }