1
2
3
4
5
6 package org.weda.store.functions;
7
8 import org.weda.store.SummaryFunction;
9 import org.weda.store.SummaryFunctionException;
10
11 /**
12 *
13 * @author Mikhail Titov
14 */
15 public class Sum implements SummaryFunction{
16 private Object resultValue;
17 private boolean realNumber;
18
19 public void startCalculation(Class valueType)
20 throws SummaryFunctionException
21 {
22 resultValue = null;
23 if (Number.class.isAssignableFrom(valueType)){
24 if ( Double.class.isAssignableFrom(valueType)
25 || Float.class.isAssignableFrom(valueType))
26 {
27 realNumber = true;
28 }else
29 realNumber = false;
30 }else
31 throw new SummaryFunctionException(
32 String.format(
33 "Summary function (%s) doesn't work with values " +
34 "of type (%s)"
35 , Sum.class.getName()
36 , (valueType==null ? "null" : valueType.getName())));
37 }
38
39 public void nextCalculation(Object nextValue) {
40 if (nextValue!=null){
41 if (realNumber){
42 double prevValue =
43 resultValue==null ?
44 0.0 : ((Number)resultValue).doubleValue();
45 resultValue = prevValue + ((Number)nextValue).doubleValue();
46 }else {
47 long prevValue =
48 resultValue==null ?
49 0 : ((Number)resultValue).longValue();
50 resultValue = prevValue + ((Number)nextValue).longValue();
51 }
52 }
53 }
54
55 public Object getResultValue() {
56 return resultValue;
57 }
58
59 public void finishCalculation() {
60 }
61
62 }