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