]> WPIA git - gigi.git/blob - src/org/cacert/gigi/output/NameInput.java
add: Allow multiple names, name-schemes, multi-name-assurance, etc.
[gigi.git] / src / org / cacert / gigi / output / NameInput.java
1 package org.cacert.gigi.output;
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.NamePart;
11 import org.cacert.gigi.dbObjects.NamePart.NamePartType;
12 import org.cacert.gigi.dbObjects.User;
13 import org.cacert.gigi.localisation.Language;
14 import org.cacert.gigi.output.template.Outputable;
15 import org.cacert.gigi.output.template.Template;
16
17 public class NameInput implements Outputable {
18
19     private static final Template t = new Template(NameInput.class.getResource("NameInput.templ"));
20
21     private String fname = "";
22
23     private String lname = "";
24
25     private String suffix = "";
26
27     private String name = "";
28
29     public NameInput() {}
30
31     public void update(HttpServletRequest req) throws GigiApiException {
32         fname = req.getParameter("fname");
33         lname = req.getParameter("lname");
34         suffix = req.getParameter("suffix");
35         name = req.getParameter("name");
36         if (fname == null) {
37             fname = "";
38         }
39         if (lname == null) {
40             lname = "";
41         }
42         if (suffix == null) {
43             suffix = "";
44         }
45         if (name == null) {
46             name = "";
47         }
48         if (name != null && name.contains(" ")) {
49             throw new GigiApiException("Single names may only have one part.");
50         }
51
52     }
53
54     @Override
55     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
56         vars.put("fname", fname);
57         vars.put("lname", lname);
58         vars.put("suffix", suffix);
59         vars.put("name", name);
60         t.output(out, l, vars);
61     }
62
63     public void createName(User u) throws GigiApiException {
64         new Name(u, getNameParts());
65     }
66
67     public NamePart[] getNameParts() throws GigiApiException {
68         if (name != null && !name.isEmpty()) {
69             return new NamePart[] {
70                     new NamePart(NamePartType.SINGLE_NAME, name)
71             };
72         }
73         String[] fparts = split(fname);
74         String[] lparts = split(lname);
75         String[] suff = split(suffix);
76         if (fparts.length == 0 || fparts[0].equals("") || lparts.length == 0 || lparts[0].equals("")) {
77             throw new GigiApiException("requires at least one first and one last name");
78         }
79         NamePart[] np = new NamePart[fparts.length + lparts.length + suff.length];
80         int p = 0;
81         for (int i = 0; i < fparts.length; i++) {
82             np[p++] = new NamePart(NamePartType.FIRST_NAME, fparts[i]);
83         }
84         for (int i = 0; i < lparts.length; i++) {
85             np[p++] = new NamePart(NamePartType.LAST_NAME, lparts[i]);
86         }
87         for (int i = 0; i < suff.length; i++) {
88             np[p++] = new NamePart(NamePartType.SUFFIX, suff[i]);
89         }
90
91         return np;
92     }
93
94     private String[] split(String toSplit) {
95         if (toSplit == null || toSplit.trim().isEmpty()) {
96             return new String[0];
97         }
98         return toSplit.split(" ");
99     }
100
101     public String[] getNamePartsPlain() throws GigiApiException {
102         NamePart[] p = getNameParts();
103         String[] s = new String[p.length];
104         for (int i = 0; i < s.length; i++) {
105             s[i] = p[i].getValue();
106         }
107         return s;
108     }
109 }