]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/orga/CreateOrgForm.java
upd: narrowing type-safety around Organisation
[gigi.git] / src / org / cacert / gigi / pages / orga / CreateOrgForm.java
1 package org.cacert.gigi.pages.orga;
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.CountryCode;
10 import org.cacert.gigi.dbObjects.Organisation;
11 import org.cacert.gigi.email.EmailProvider;
12 import org.cacert.gigi.localisation.Language;
13 import org.cacert.gigi.output.CountrySelector;
14 import org.cacert.gigi.output.template.Form;
15 import org.cacert.gigi.output.template.SprintfCommand;
16 import org.cacert.gigi.output.template.Template;
17 import org.cacert.gigi.pages.LoginPage;
18
19 public class CreateOrgForm extends Form {
20
21     private final static Template t = new Template(CreateOrgForm.class.getResource("CreateOrgForm.templ"));
22
23     private Organisation result;
24
25     private String o = "";
26
27     private String st = "";
28
29     private String l = "";
30
31     private String email = "";
32
33     private String optionalName = "";
34
35     private String postalAddress = "";
36
37     private boolean isEdit = false;
38
39     private CountrySelector cs;
40
41     public CreateOrgForm(HttpServletRequest hsr) {
42         super(hsr);
43         cs = new CountrySelector("C", false);
44     }
45
46     public CreateOrgForm(HttpServletRequest hsr, Organisation t) {
47         this(hsr);
48         isEdit = true;
49         result = t;
50         o = t.getName();
51
52         cs = new CountrySelector("C", false, t.getState());
53
54         st = t.getProvince();
55         l = t.getCity();
56         email = t.getContactEmail();
57         optionalName = t.getOptionalName();
58         postalAddress = t.getPostalAddress();
59     }
60
61     @Override
62     public boolean submit(PrintWriter out, HttpServletRequest req) throws GigiApiException {
63         String action = req.getParameter("action");
64         if (action == null) {
65             return false;
66         }
67
68         if (action.equals("new")) {
69             checkCertData(req);
70             checkOrganisationData(req);
71             Organisation ne = new Organisation(o, cs.getCountry(), st, l, email, optionalName, postalAddress, LoginPage.getUser(req));
72             result = ne;
73             return true;
74         } else if (action.equals("updateOrganisationData")) {
75             checkOrganisationData(req);
76             result.updateOrgData(email, optionalName, postalAddress);
77             return true;
78         } else if (action.equals("updateCertificateData")) {
79             checkCertData(req);
80             result.updateCertData(o, cs.getCountry(), st, l);
81             return true;
82         }
83
84         return false;
85     }
86
87     private void checkOrganisationData(HttpServletRequest req) throws GigiApiException {
88         email = extractParam(req, "contact");
89         optionalName = extractParam(req, "optionalName");
90         postalAddress = extractParam(req, "postalAddress");
91         if ( !EmailProvider.isValidMailAddress(email)) {
92             throw new GigiApiException("Contact email is not a valid email address");
93         }
94     }
95
96     private void checkCertData(HttpServletRequest req) throws GigiApiException {
97         o = extractParam(req, "O");
98         st = extractParam(req, "ST");
99         l = extractParam(req, "L");
100
101         if (o.length() > 64 || o.length() < 1) {
102             throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "Organisation name", 64));
103         }
104
105         cs.update(req);
106
107         if (st.length() > 128 || st.length() < 1) {
108             throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "State/county", 128));
109         }
110
111         if (l.length() > 128 || l.length() < 1) {
112             throw new GigiApiException(SprintfCommand.createSimple("{0} not given or longer than {1} characters", "Town/suburb", 128));
113         }
114     }
115
116     private String extractParam(HttpServletRequest req, String name) {
117         String parameter = req.getParameter(name);
118         if (parameter == null) {
119             return "";
120         }
121         return parameter.trim();
122     }
123
124     public Organisation getResult() {
125         return result;
126     }
127
128     @Override
129     protected void outputContent(PrintWriter out, Language l, Map<String, Object> vars) {
130         vars.put("O", o);
131         vars.put("C", cs);
132         vars.put("ST", st);
133         vars.put("L", this.l);
134         vars.put("email", email);
135         vars.put("optionalName", optionalName);
136         vars.put("postalAddress", postalAddress);
137         vars.put("countryCode", cs);
138         if (isEdit) {
139             vars.put("edit", true);
140         }
141         t.output(out, l, vars);
142     }
143 }