1 package club.wpia.gigi.output;
3 import java.io.PrintWriter;
6 import javax.servlet.http.HttpServletRequest;
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;
17 public class NameInput implements Outputable {
19 private static final Template t = new Template(NameInput.class.getResource("NameInput.templ"));
21 private String fname = "";
23 private String lname = "";
25 private String suffix = "";
27 private String name = "";
29 private String scheme = "western";
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");
51 if ( !"western".equals(scheme) && !"single".equals(scheme)) {
52 throw new GigiApiException("Invalid name type.");
54 if (name.contains(" ")) {
55 throw new GigiApiException("Single names may only have one part.");
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);
71 public void createName(User u) throws GigiApiException {
72 new Name(u, getNameParts());
75 public NamePart[] getNameParts() throws GigiApiException {
76 if ("single".equals(scheme)) {
77 return new NamePart[] {
78 new NamePart(NamePartType.SINGLE_NAME, name)
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");
87 NamePart[] np = new NamePart[fparts.length + lparts.length + suff.length];
89 for (int i = 0; i < fparts.length; i++) {
90 np[p++] = new NamePart(NamePartType.FIRST_NAME, fparts[i]);
92 for (int i = 0; i < lparts.length; i++) {
93 np[p++] = new NamePart(NamePartType.LAST_NAME, lparts[i]);
95 for (int i = 0; i < suff.length; i++) {
96 np[p++] = new NamePart(NamePartType.SUFFIX, suff[i]);
102 private String[] split(String toSplit) {
103 if (toSplit == null || toSplit.trim().isEmpty()) {
104 return new String[0];
106 return toSplit.split(" ");
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();