]> WPIA git - gigi.git/blob - src/club/wpia/gigi/output/NameInput.java
11c8de57097ed863571a84b2482527d51f1f4a1e
[gigi.git] / src / club / wpia / gigi / output / NameInput.java
1 package club.wpia.gigi.output;
2
3 import java.io.PrintWriter;
4 import java.util.Map;
5
6 import javax.servlet.http.HttpServletRequest;
7
8 import club.wpia.gigi.GigiApiException;
9 import club.wpia.gigi.dbObjects.Name;
10 import club.wpia.gigi.dbObjects.NamePart;
11 import club.wpia.gigi.dbObjects.User;
12 import club.wpia.gigi.dbObjects.NamePart.NamePartType;
13 import club.wpia.gigi.localisation.Language;
14 import club.wpia.gigi.output.template.Outputable;
15 import club.wpia.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     private String scheme = "western";
30
31     public NameInput() {}
32
33     public void update(HttpServletRequest req) throws GigiApiException {
34         fname = req.getParameter("fname");
35         lname = req.getParameter("lname");
36         suffix = req.getParameter("suffix");
37         name = req.getParameter("name");
38         scheme = req.getParameter("name-type");
39         if (fname == null) {
40             fname = "";
41         }
42         if (lname == null) {
43             lname = "";
44         }
45         if (suffix == null) {
46             suffix = "";
47         }
48         if (name == null) {
49             name = "";
50         }
51         if ( !"western".equals(scheme) && !"single".equals(scheme)) {
52             throw new GigiApiException("Invalid name type.");
53         }
54         if (name.contains(" ")) {
55             throw new GigiApiException("Single names may only have one part.");
56         }
57
58     }
59
60     @Override
61     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
62         vars.put("fname", fname);
63         vars.put("lname", lname);
64         vars.put("suffix", suffix);
65         vars.put("name", name);
66         vars.put("western", "western".equals(scheme));
67         vars.put("single", "single".equals(scheme));
68         t.output(out, l, vars);
69     }
70
71     public void createName(User u) throws GigiApiException {
72         new Name(u, getNameParts());
73     }
74
75     public NamePart[] getNameParts() throws GigiApiException {
76         if ("single".equals(scheme)) {
77             return new NamePart[] {
78                     new NamePart(NamePartType.SINGLE_NAME, name)
79             };
80         }
81         String[] fparts = split(fname);
82         String[] lparts = split(lname);
83         String[] suff = split(suffix);
84         if (fparts.length == 0 || fparts[0].equals("") || lparts.length == 0 || lparts[0].equals("")) {
85             throw new GigiApiException("requires at least one first and one last name");
86         }
87         NamePart[] np = new NamePart[fparts.length + lparts.length + suff.length];
88         int p = 0;
89         for (int i = 0; i < fparts.length; i++) {
90             np[p++] = new NamePart(NamePartType.FIRST_NAME, fparts[i]);
91         }
92         for (int i = 0; i < lparts.length; i++) {
93             np[p++] = new NamePart(NamePartType.LAST_NAME, lparts[i]);
94         }
95         for (int i = 0; i < suff.length; i++) {
96             np[p++] = new NamePart(NamePartType.SUFFIX, suff[i]);
97         }
98
99         return np;
100     }
101
102     private String[] split(String toSplit) {
103         if (toSplit == null || toSplit.trim().isEmpty()) {
104             return new String[0];
105         }
106         return toSplit.split(" ");
107     }
108
109     public String[] getNamePartsPlain() throws GigiApiException {
110         NamePart[] p = getNameParts();
111         String[] s = new String[p.length];
112         for (int i = 0; i < s.length; i++) {
113             s[i] = p[i].getValue();
114         }
115         return s;
116     }
117 }