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 - start) + 1);
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 }
|