1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package it.jnrpe.utils.thresholds;
17
18
19
20
21
22
23 final class RangeStringParser {
24
25
26
27
28 private static final Stage ROOT_STAGE = configureParser();
29
30
31
32
33 private RangeStringParser() {
34
35 }
36
37
38
39
40
41
42 private static Stage configureParser() {
43 Stage startStage = new StartStage();
44 Stage negativeInfinityStage = new NegativeInfinityStage();
45 Stage positiveInfinityStage = new PositiveInfinityStage();
46 NegateStage negateStage = new NegateStage();
47 BracketStage.OpenBracketStage openBraceStage = new BracketStage.OpenBracketStage();
48 NumberBoundaryStage.LeftBoundaryStage startBoundaryStage = new NumberBoundaryStage.LeftBoundaryStage();
49 NumberBoundaryStage.RightBoundaryStage rightBoundaryStage = new NumberBoundaryStage.RightBoundaryStage();
50 SeparatorStage separatorStage = new SeparatorStage();
51 BracketStage.ClosedBracketStage closedBraketStage = new BracketStage.ClosedBracketStage();
52
53 startStage.addTransition(negateStage);
54 startStage.addTransition(openBraceStage);
55 startStage.addTransition(negativeInfinityStage);
56 startStage.addTransition(startBoundaryStage);
57
58 negateStage.addTransition(negativeInfinityStage);
59 negateStage.addTransition(openBraceStage);
60 negateStage.addTransition(startBoundaryStage);
61
62 openBraceStage.addTransition(startBoundaryStage);
63 startBoundaryStage.addTransition(separatorStage);
64 negativeInfinityStage.addTransition(separatorStage);
65
66 separatorStage.addTransition(positiveInfinityStage);
67 separatorStage.addTransition(rightBoundaryStage);
68
69 rightBoundaryStage.addTransition(closedBraketStage);
70
71 return startStage;
72 }
73
74
75
76
77
78
79
80
81
82
83
84 public static void parse(final String range, final RangeConfig tc)
85 throws RangeException {
86 if (range == null) {
87 throw new RangeException("Null range specified");
88 }
89 ROOT_STAGE.parse(range, tc);
90 checkBoundaries(tc);
91 }
92
93
94
95
96
97
98
99
100
101 private static void checkBoundaries(final RangeConfig rc)
102 throws RangeException {
103 if (rc.isNegativeInfinity()) {
104
105
106 return;
107 }
108
109 if (rc.isPositiveInfinity()) {
110
111
112 return;
113 }
114
115 if (rc.getLeftBoundary().compareTo(rc.getRightBoundary()) > 0) {
116 throw new RangeException(
117 "Left boundary must be less than right boundary (left:"
118 + rc.getLeftBoundary() + ", right:"
119 + rc.getRightBoundary() + ")");
120 }
121 }
122 }