]> WPIA git - gigi.git/blob - src/org/cacert/gigi/output/DateSelector.java
Update date Selector so that the signup date is stored back to the user.
[gigi.git] / src / org / cacert / gigi / output / DateSelector.java
1 package org.cacert.gigi.output;
2
3 import java.io.PrintWriter;
4 import java.text.SimpleDateFormat;
5 import java.util.Arrays;
6 import java.util.Calendar;
7 import java.util.Date;
8 import java.util.GregorianCalendar;
9 import java.util.Map;
10
11 import javax.servlet.http.HttpServletRequest;
12
13 import org.cacert.gigi.Language;
14
15 public class DateSelector implements Outputable {
16         String[] names;
17         public DateSelector(String day, String month, String year) {
18                 this.names = new String[]{day, month, year};
19         }
20         int day;
21         int month;
22         int year;
23         @Override
24         public void output(PrintWriter out, Language l, Map<String, Object> vars) {
25                 out.print("<nobr><select name=\"");
26                 out.print(names[0]);
27                 out.println("\">");
28                 for (int i = 1; i <= 31; i++) {
29                         out.print("<option");
30                         if (i == day) {
31                                 out.print(" selected=\"selected\"");
32                         }
33                         out.println(">" + i + "</option>");
34                 }
35                 out.println("</select>");
36                 SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale());
37                 out.print("<select name=\"");
38                 out.print(names[1]);
39                 out.println("\">");
40                 Calendar c = sdf.getCalendar();
41                 for (int i = 1; i <= 12; i++) {
42                         c.set(Calendar.MONTH, i - 1);
43                         out.print("<option value='" + i + "'");
44                         if (i == month) {
45                                 out.print(" selected=\"selected\"");
46                         }
47                         out.println(">" + sdf.format(c.getTime()) + " (" + i + ")</option>");
48                 }
49                 out.println("</select>");
50                 out.print("<input type=\"text\" name=\"");
51                 out.print(names[2]);
52                 out.print("\" value=\"");
53                 if (year != 0) {
54                         out.print(year);
55                 }
56                 out.print("\" size=\"4\" autocomplete=\"off\"></nobr>");
57         }
58
59         public void update(HttpServletRequest r) {
60                 String dayS = r.getParameter(names[0]);
61                 if (dayS != null) {
62                         day = parseIntSafe(dayS);
63                 }
64
65                 String monthS = r.getParameter(names[1]);
66                 if (monthS != null) {
67                         month = parseIntSafe(monthS);
68                 }
69
70                 String yearS = r.getParameter(names[2]);
71                 if (yearS != null) {
72                         year = parseIntSafe(yearS);
73                 }
74         }
75         private int parseIntSafe(String dayS) {
76                 try {
77                         return Integer.parseInt(dayS);
78                 } catch (NumberFormatException e) {
79
80                 }
81                 return 0;
82         }
83         public boolean isValid() {
84                 if (!(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) {
85                         return false;
86                 }
87                 return true; // TODO checkdate
88         }
89
90         @Override
91         public String toString() {
92                 return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day
93                                 + ", month=" + month + ", year=" + year + "]";
94         }
95
96         public Date getDate() {
97                 Calendar gc = GregorianCalendar.getInstance();
98                 gc.set(year, month - 1, day);
99                 return gc.getTime();
100         }
101
102 }