1 package org.cacert.gigi.pages.account;
3 import java.io.PrintWriter;
6 import javax.servlet.http.HttpServletRequest;
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;
20 public class MyDetailsForm extends Form {
22 private static final Template assured = new Template(MyDetails.class.getResource("MyDetailsFormAssured.templ"));
24 private static final Template templ = new Template(MyDetailsForm.class.getResource("MyDetailsForm.templ"));
26 private static final Template names = new Template(MyDetailsForm.class.getResource("NamesForm.templ"));
30 private DateSelector ds;
34 private CountrySelector cs;
36 public MyDetailsForm(HttpServletRequest hsr, User target) {
41 this.ds = new DateSelector("day", "month", "year", target.getDoB());
43 if (target.getResidenceCountry() == null) {
44 this.cs = new CountrySelector("residenceCountry", true);
46 this.cs = new CountrySelector("residenceCountry", true, target.getResidenceCountry());
51 public boolean submit(PrintWriter out, HttpServletRequest req) {
53 String rn = req.getParameter("removeName");
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.");
59 if (n.equals(target.getPreferredName())) {
60 throw new GigiApiException("Cannot remove the account's preferred name.");
65 String dn = req.getParameter("deprecateName");
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.");
71 if (n.equals(target.getPreferredName())) {
72 throw new GigiApiException("Cannot deprecate the account's preferred name.");
77 String pn = req.getParameter("preferred");
79 Name n = Name.getById(Integer.parseInt(pn));
80 target.setPreferredName(n);
84 String action = req.getParameter("action");
85 if ("addName".equals(action)) {
87 ni.createName(target);
90 if ("updateDoB".equals(action)) {
92 target.setDoB(ds.getDate());
94 if ("updateResidenceCountry".equals(action)) {
96 target.setResidenceCountry(cs.getCountry());
98 } catch (GigiApiException e) {
99 e.format(out, Page.getLanguage(req));
101 } catch (NumberFormatException e) {
102 new GigiApiException("Invalid value.").format(out, Page.getLanguage(req));
109 protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
110 vars.put("exNames", new ArrayIterable<Name>(target.getNames()) {
112 Name preferred = target.getPreferredName();
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");
120 if (t.isDeprecated()) {
121 vars.put("deprecated", " disabled");
123 vars.put("deprecated", "");
125 vars.put("preferred", "");
128 vars.put("id", t.getId());
129 vars.put("npoints", Integer.toString(t.getAssurancePoints()));
133 vars.put("name", ni);
134 names.output(out, l, vars);
135 vars.put("residenceCountry", cs);
136 if (target.getReceivedAssurances().length == 0) {
138 templ.output(out, l, vars);
140 vars.put("DoB", target.getDoB());
141 assured.output(out, l, vars);