]> WPIA git - gigi.git/blob - src/org/cacert/gigi/output/DateSelector.java
UPD: change date format to YYYY-MM-DD for consistence.
[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 import java.util.TimeZone;
11
12 import javax.servlet.http.HttpServletRequest;
13
14 import org.cacert.gigi.localisation.Language;
15
16 public class DateSelector implements Outputable {
17
18     private String[] names;
19
20     public DateSelector(String day, String month, String year, Date date) {
21         this(day, month, year);
22         Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTF"));
23         cal.setTime(date);
24         this.day = cal.get(Calendar.DAY_OF_MONTH);
25         this.month = cal.get(Calendar.MONTH);
26         this.year = cal.get(Calendar.YEAR);
27     }
28
29     public DateSelector(String day, String month, String year) {
30         this.names = new String[] {
31                 day, month, year
32         };
33     }
34
35     private int day;
36
37     private int month;
38
39     private int year;
40
41     @Override
42     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
43         out.print("<nobr>");
44         outputYear(out);
45         outputMonth(out, l);
46         outputDay(out);
47         out.print("</nobr>");
48     }
49
50     private void outputDay(PrintWriter out) {
51         out.print("<select name=\"");
52         out.print(names[0]);
53         out.println("\">");
54         for (int i = 1; i <= 31; i++) {
55             out.print("<option");
56             if (i == day) {
57                 out.print(" selected=\"selected\"");
58             }
59             out.println(">" + i + "</option>");
60         }
61         out.println("</select>");
62     }
63
64     private void outputMonth(PrintWriter out, Language l) {
65         SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale());
66         out.print("<select name=\"");
67         out.print(names[1]);
68         out.println("\">");
69         Calendar c = sdf.getCalendar();
70         for (int i = 1; i <= 12; i++) {
71             c.set(Calendar.MONTH, i - 1);
72             out.print("<option value='" + i + "'");
73             if (i == month) {
74                 out.print(" selected=\"selected\"");
75             }
76             out.println(">" + sdf.format(c.getTime()) + " (" + i + ")</option>");
77         }
78         out.println("</select>");
79     }
80
81     private void outputYear(PrintWriter out) {
82         out.print("<input type=\"text\" name=\"");
83         out.print(names[2]);
84         out.print("\" value=\"");
85         if (year != 0) {
86             out.print(year);
87         }
88         out.print("\" size=\"4\" autocomplete=\"off\">");
89     }
90
91     public void update(HttpServletRequest r) {
92         String dayS = r.getParameter(names[0]);
93         if (dayS != null) {
94             day = parseIntSafe(dayS);
95         }
96
97         String monthS = r.getParameter(names[1]);
98         if (monthS != null) {
99             month = parseIntSafe(monthS);
100         }
101
102         String yearS = r.getParameter(names[2]);
103         if (yearS != null) {
104             year = parseIntSafe(yearS);
105         }
106     }
107
108     private int parseIntSafe(String dayS) {
109         try {
110             return Integer.parseInt(dayS);
111         } catch (NumberFormatException e) {
112
113         }
114         return 0;
115     }
116
117     public boolean isValid() {
118         if ( !(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) {
119             return false;
120         }
121         return true; // TODO checkdate
122     }
123
124     @Override
125     public String toString() {
126         return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day + ", month=" + month + ", year=" + year + "]";
127     }
128
129     public java.sql.Date getDate() {
130         Calendar gc = GregorianCalendar.getInstance();
131         gc.set(year, month - 1, day);
132         return new java.sql.Date(gc.getTime().getTime());
133     }
134
135 }