1
24 package net.sf.jasperreports.engine.fill;
25
26 import net.sf.jasperreports.engine.type.CalculationEnum;
27
28
29
32 public final class JRComparableIncrementerFactory extends JRAbstractExtendedIncrementerFactory
33 {
34
35
36
39 private static JRComparableIncrementerFactory mainInstance = new JRComparableIncrementerFactory();
40
41
42
45 private JRComparableIncrementerFactory()
46 {
47 }
48
49
50
53 public static JRComparableIncrementerFactory getInstance()
54 {
55 return mainInstance;
56 }
57
58
59 @Override
60 public JRExtendedIncrementer getExtendedIncrementer(CalculationEnum calculation)
61 {
62 JRExtendedIncrementer incrementer = null;
63
64 switch (calculation)
65 {
66 case LOWEST :
67 {
68 incrementer = JRComparableLowestIncrementer.getInstance();
69 break;
70 }
71 case HIGHEST :
72 {
73 incrementer = JRComparableHighestIncrementer.getInstance();
74 break;
75 }
76 case SYSTEM :
77 case NOTHING :
78 case COUNT :
79 case SUM :
80 case AVERAGE :
81 case STANDARD_DEVIATION :
82 case VARIANCE :
83 case FIRST :
84 case DISTINCT_COUNT :
85 default :
86 {
87 incrementer = JRDefaultIncrementerFactory.getInstance().getExtendedIncrementer(calculation);
88 break;
89 }
90 }
91
92 return incrementer;
93 }
94 }
95
96
97
100 final class JRComparableLowestIncrementer extends JRAbstractExtendedIncrementer
101 {
102
105 private static JRComparableLowestIncrementer mainInstance = new JRComparableLowestIncrementer();
106
107
110 private JRComparableLowestIncrementer()
111 {
112 }
113
114
117 public static JRComparableLowestIncrementer getInstance()
118 {
119 return mainInstance;
120 }
121
122 @Override
123 @SuppressWarnings({ "rawtypes", "unchecked" })
124 public Object increment(
125 JRCalculable variable,
126 Object expressionValue,
127 AbstractValueProvider valueProvider
128 )
129 {
130 Comparable value = (Comparable)variable.getIncrementedValue();
131 Comparable newValue = (Comparable)expressionValue;
132
133 if (
134 value != null && !variable.isInitialized() &&
135 (newValue == null || value.compareTo(newValue) < 0)
136 )
137 {
138 newValue = value;
139 }
140
141 return newValue;
142 }
143
144
145 @Override
146 public Object initialValue()
147 {
148 return null;
149 }
150 }
151
152
153
156 final class JRComparableHighestIncrementer extends JRAbstractExtendedIncrementer
157 {
158
161 private static JRComparableHighestIncrementer mainInstance = new JRComparableHighestIncrementer();
162
163
166 private JRComparableHighestIncrementer()
167 {
168 }
169
170
173 public static JRComparableHighestIncrementer getInstance()
174 {
175 return mainInstance;
176 }
177
178 @Override
179 @SuppressWarnings({ "rawtypes", "unchecked" })
180 public Object increment(
181 JRCalculable variable,
182 Object expressionValue,
183 AbstractValueProvider valueProvider
184 )
185 {
186 Comparable value = (Comparable)variable.getIncrementedValue();
187 Comparable newValue = (Comparable)expressionValue;
188
189 if (
190 value != null && !variable.isInitialized() &&
191 (newValue == null || value.compareTo(newValue) > 0)
192 )
193 {
194 newValue = value;
195 }
196
197 return newValue;
198 }
199
200
201 @Override
202 public Object initialValue()
203 {
204 return null;
205 }
206 }
207