1 package org.cacert.gigi.output;
3 import java.io.PrintWriter;
6 import javax.servlet.http.HttpServletRequest;
8 import org.cacert.gigi.GigiApiException;
9 import org.cacert.gigi.dbObjects.CountryCode;
10 import org.cacert.gigi.dbObjects.CountryCode.CountryCodeType;
11 import org.cacert.gigi.localisation.Language;
12 import org.cacert.gigi.output.template.Outputable;
13 import org.cacert.gigi.output.template.Template;
15 public class CountrySelector implements Outputable {
17 private static final Template t = new Template(CountrySelector.class.getResource("CountrySelector.templ"));
19 private CountryCode[] all = CountryCode.getCountryCodes(CountryCodeType.CODE_2_CHARS);
23 private CountryCode selected;
25 private boolean optional;
27 public CountrySelector(String name, boolean optional) {
29 this.optional = optional;
32 public CountrySelector(String name, boolean optional, CountryCode state) {
34 selected = state == null ? null : state.convertToCountryCodeType(CountryCodeType.CODE_2_CHARS);
35 if (state.getCountryCodeType() != CountryCodeType.CODE_2_CHARS) {
36 throw new IllegalArgumentException("Got country code of illegal type.");
41 public void update(HttpServletRequest r) throws GigiApiException {
42 String vS = r.getParameter(name);
46 if (vS == null || vS.equals("invalid")) {
50 throw new GigiApiException("Country code required.");
54 selected = CountryCode.getCountryCode(vS, CountryCodeType.CODE_2_CHARS);
58 public void output(PrintWriter out, Language l, Map<String, Object> vars) {
59 vars.put("countryCode", new ArrayIterable<CountryCode>(all) {
62 public void apply(CountryCode t, Language l, Map<String, Object> vars) {
63 vars.put("cc", t.getCountryCode());
64 vars.put("display", t.getCountry());
65 if (selected != null && t.getCountryCode().equals(selected.getCountryCode())) {
66 vars.put("selected", "selected");
68 vars.put("selected", "");
74 vars.put("optional", optional);
75 vars.put("name", name);
77 t.output(out, l, vars);
80 public CountryCode getCountry() {