View Javadoc

1   /*
2    * Sum.java
3    * Created on 29 Июль 2006 г., 2:26
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  }