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