]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/account/MyDetailsForm.java
a8ca49fc5d471e377fc0224b989604f744302482
[gigi.git] / src / org / cacert / gigi / pages / account / MyDetailsForm.java
1 package org.cacert.gigi.pages.account;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5
6 import javax.servlet.http.HttpServletRequest;
7
8 import org.cacert.gigi.GigiApiException;
9 import org.cacert.gigi.dbObjects.Name;
10 import org.cacert.gigi.dbObjects.User;
11 import org.cacert.gigi.localisation.Language;
12 import org.cacert.gigi.output.ArrayIterable;
13 import org.cacert.gigi.output.CountrySelector;
14 import org.cacert.gigi.output.DateSelector;
15 import org.cacert.gigi.output.NameInput;
16 import org.cacert.gigi.output.template.Form;
17 import org.cacert.gigi.output.template.Template;
18 import org.cacert.gigi.pages.Page;
19
20 public class MyDetailsForm extends Form {
21
22     private static final Template assured = new Template(MyDetails.class.getResource("MyDetailsFormAssured.templ"));
23
24     private static final Template templ = new Template(MyDetailsForm.class.getResource("MyDetailsForm.templ"));
25
26     private static final Template names = new Template(MyDetailsForm.class.getResource("NamesForm.templ"));
27
28     private User target;
29
30     private DateSelector ds;
31
32     private NameInput ni;
33
34     private CountrySelector cs;
35
36     public MyDetailsForm(HttpServletRequest hsr, User target) {
37         super(hsr);
38         this.target = target;
39         ni = new NameInput();
40
41         this.ds = new DateSelector("day", "month", "year", target.getDoB());
42
43         if (target.getResidenceCountry() == null) {
44             this.cs = new CountrySelector("residenceCountry", true);
45         } else {
46             this.cs = new CountrySelector("residenceCountry", true, target.getResidenceCountry());
47         }
48     }
49
50     @Override
51     public boolean submit(PrintWriter out, HttpServletRequest req) {
52         try {
53             String rn = req.getParameter("removeName");
54             if (rn != null) {
55                 Name n = Name.getById(Integer.parseInt(rn));
56                 if (n.getOwner() != target) {
57                     throw new GigiApiException("Cannot remove a name that does not belong to this account.");
58                 }
59                 if (n.equals(target.getPreferredName())) {
60                     throw new GigiApiException("Cannot remove the account's preferred name.");
61                 }
62                 n.remove();
63                 return true;
64             }
65             String dn = req.getParameter("deprecateName");
66             if (dn != null) {
67                 Name n = Name.getById(Integer.parseInt(dn));
68                 if (n.getOwner() != target) {
69                     throw new GigiApiException("Cannot deprecate a name that does not belong to this account.");
70                 }
71                 if (n.equals(target.getPreferredName())) {
72                     throw new GigiApiException("Cannot deprecate the account's preferred name.");
73                 }
74                 n.deprecate();
75                 return true;
76             }
77             String pn = req.getParameter("preferred");
78             if (pn != null) {
79                 Name n = Name.getById(Integer.parseInt(pn));
80                 target.setPreferredName(n);
81                 return true;
82             }
83
84             String action = req.getParameter("action");
85             if ("addName".equals(action)) {
86                 ni.update(req);
87                 ni.createName(target);
88                 return true;
89             }
90             if ("updateDoB".equals(action)) {
91                 ds.update(req);
92                 target.setDoB(ds.getDate());
93             }
94             if ("updateResidenceCountry".equals(action)) {
95                 cs.update(req);
96                 target.setResidenceCountry(cs.getCountry());
97             }
98         } catch (GigiApiException e) {
99             e.format(out, Page.getLanguage(req));
100             return false;
101         } catch (NumberFormatException e) {
102             new GigiApiException("Invalid value.").format(out, Page.getLanguage(req));
103             return false;
104         }
105         return false;
106     }
107
108     @Override
109     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
110         vars.put("exNames", new ArrayIterable<Name>(target.getNames()) {
111
112             Name preferred = target.getPreferredName();
113
114             @Override
115             public void apply(Name t, Language l, Map<String, Object> vars) {
116                 if (t.equals(preferred)) {
117                     vars.put("preferred", " disabled");
118                     vars.put("deprecated", " disabled");
119                 } else {
120                     if (t.isDeprecated()) {
121                         vars.put("deprecated", " disabled");
122                     } else {
123                         vars.put("deprecated", "");
124                     }
125                     vars.put("preferred", "");
126                 }
127                 vars.put("name", t);
128                 vars.put("id", t.getId());
129                 vars.put("npoints", Integer.toString(t.getAssurancePoints()));
130             }
131
132         });
133         vars.put("name", ni);
134         names.output(out, l, vars);
135         vars.put("residenceCountry", cs);
136         if (target.getReceivedAssurances().length == 0) {
137             vars.put("DoB", ds);
138             templ.output(out, l, vars);
139         } else {
140             vars.put("DoB", target.getDoB());
141             assured.output(out, l, vars);
142         }
143     }
144
145 }