InterceptorCalculator.java
01 package trail.interceptor;
02 
03 import javax.ejb.*;
04 import javax.interceptor.*;
05 import java.util.*;
06 import java.io.Serializable;
07 
08 //TODO: Fix the client
09 @Stateful
10 @Interceptors (Tracer.class)
11 public class
12     InterceptorCalculator implements Calculator, Serializable {
13 
14   public ArrayList <Integer> starts = new ArrayList <Integer> ();
15   public ArrayList <Integer> ends = new ArrayList <Integer> ();
16   public ArrayList <Double> growthrates = new ArrayList <Double> ();
17   public ArrayList <Double> savings = new ArrayList <Double> ();
18   public ArrayList <Double> results = new ArrayList <Double> ();
19 
20   private String trace;
21 
22   /*
23   @PostConstruct
24   public void initialize () {
25     // System.err.println("Init is called");
26     starts = new ArrayList <Integer> ();
27     ends = new ArrayList <Integer> ();
28     growthrates = new ArrayList <Double> ();
29     savings = new ArrayList <Double> ();
30     results = new ArrayList <Double> ();
31   }
32   */
33 
34   public double calculate (int start, int end, double growthrate, double saving) {
35     double tmp = Math.pow(1. + growthrate / 12.12. (end - start1);
36     double result = saving * 12. (tmp - 1/ growthrate;
37 
38     starts.add(Integer.valueOf(start));
39     ends.add(Integer.valueOf(end));
40     growthrates.add(Double.valueOf(growthrate));
41     savings.add(Double.valueOf(saving));
42     results.add(Double.valueOf(result));
43 
44     return result;
45   }
46 
47   public ArrayList <Integer> getStarts () {
48     return starts;
49   }
50 
51   public ArrayList <Integer> getEnds () {
52     return ends;
53   }
54 
55   public ArrayList <Double> getGrowthrates () {
56     return growthrates;
57   }
58 
59   public ArrayList <Double> getSavings () {
60     return savings;
61   }
62 
63   public ArrayList <Double> getResults () {
64     return results;
65   }
66 
67   @AroundInvoke
68   public Object limitStateSize (InvocationContext ctx)
69                                       throws Exception {
70 
71     // Remove the earliest entry when the history
72     // list gets too long
73     if (starts.size() 4) {
74       starts.remove (0);
75       ends.remove (0);
76       growthrates.remove (0);
77       savings.remove (0);
78       results.remove (0);
79     }
80 
81     return ctx.proceed();
82   }
83 
84   public void setTrace (String s) {
85     trace = s;
86   }
87 
88   public String getTrace () {
89     return trace;
90   }
91 }