01 package trail.security;
02
03 import trail.entity.beans.*;
04 import javax.ejb.*;
05 import javax.persistence.*;
06 import javax.annotation.security.*;
07 import java.util.*;
08 import java.sql.Timestamp;
09
10 import org.jboss.annotation.security.SecurityDomain;
11
12 @Stateless
13 @SecurityDomain("other")
14 public class SecureCalculator implements Calculator {
15
16 @PersistenceContext
17 protected EntityManager em;
18
19 @RolesAllowed({"AdminUser"})
20 public void addFund (String name, double growthrate) {
21 Fund fund = new Fund (name, growthrate);
22 em.persist (fund);
23 }
24
25 @RolesAllowed({"AdminUser"})
26 public void addInvestor (String name, int start, int end) {
27 Investor investor = new Investor (name, start, end);
28 em.persist (investor);
29 }
30
31 @PermitAll
32 public Collection<Fund> getFunds () {
33 return em.createQuery("from Fund f").getResultList();
34 }
35 @PermitAll
36 public Collection <Investor> getInvestors () {
37 return em.createQuery("from Investor p").getResultList();
38 }
39 @PermitAll
40 public Collection <TimedRecord> getRecords () {
41 return em.createQuery("from TimedRecord r order by r.id desc").getResultList();
42 }
43
44 @RolesAllowed({"RegularUser"})
45 public double calculate (int fundId, int investorId, double saving) {
46
47 Investor investor =
48 em.find(Investor.class,
49 Integer.valueOf(investorId));
50 Fund fund =
51 em.find(Fund.class,
52 Integer.valueOf(fundId));
53
54 int start = investor.getStartAge();
55 int end = investor.getEndAge();
56 double growthrate = fund.getGrowthrate();
57
58 double tmp = Math.pow(1. + growthrate / 12., 12. * (end - start) + 1);
59 double result = saving * 12. * (tmp - 1) / growthrate;
60 Timestamp ts = new Timestamp (System.currentTimeMillis());
61
62 TimedRecord rec =
63 new TimedRecord (fund, investor, saving, result, ts);
64 em.persist (rec);
65
66 return result;
67 }
68 }
|