]> WPIA git - gigi.git/blob - src/org/cacert/gigi/output/DateSelector.java
UPD: move the standard date format to "dateSelector"
[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     private static ThreadLocal<SimpleDateFormat> fmt = new ThreadLocal<>();
43
44     @Override
45     public void output(PrintWriter out, Language l, Map<String, Object> vars) {
46         out.print("<nobr>");
47         outputYear(out);
48         outputMonth(out, l);
49         outputDay(out);
50         out.print("</nobr>");
51     }
52
53     private void outputDay(PrintWriter out) {
54         out.print("<select name=\"");
55         out.print(names[0]);
56         out.println("\">");
57         for (int i = 1; i <= 31; i++) {
58             out.print("<option");
59             if (i == day) {
60                 out.print(" selected=\"selected\"");
61             }
62             out.println(">" + i + "</option>");
63         }
64         out.println("</select>");
65     }
66
67     private void outputMonth(PrintWriter out, Language l) {
68         SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale());
69         out.print("<select name=\"");
70         out.print(names[1]);
71         out.println("\">");
72         Calendar c = sdf.getCalendar();
73         for (int i = 1; i <= 12; i++) {
74             c.set(Calendar.MONTH, i - 1);
75             out.print("<option value='" + i + "'");
76             if (i == month) {
77                 out.print(" selected=\"selected\"");
78             }
79             out.println(">" + sdf.format(c.getTime()) + " (" + i + ")</option>");
80         }
81         out.println("</select>");
82     }
83
84     private void outputYear(PrintWriter out) {
85         out.print("<input type=\"text\" name=\"");
86         out.print(names[2]);
87         out.print("\" value=\"");
88         if (year != 0) {
89             out.print(year);
90         }
91         out.print("\" size=\"4\" autocomplete=\"off\">");
92     }
93
94     public void update(HttpServletRequest r) throws GigiApiException {
95         try {
96             String dayS = r.getParameter(names[0]);
97             if (dayS != null) {
98                 day = Integer.parseInt(dayS);
99             }
100
101             String monthS = r.getParameter(names[1]);
102             if (monthS != null) {
103                 month = Integer.parseInt(monthS);
104             }
105
106             String yearS = r.getParameter(names[2]);
107             if (yearS != null) {
108                 year = Integer.parseInt(yearS);
109             }
110         } catch (NumberFormatException e) {
111             throw new GigiApiException("Unparsable date.");
112         }
113     }
114
115     public boolean isValid() {
116         if ( !(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) {
117             return false;
118         }
119         return true; // TODO checkdate
120     }
121
122     @Override
123     public String toString() {
124         return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day + ", month=" + month + ", year=" + year + "]";
125     }
126
127     public java.sql.Date getDate() {
128         Calendar gc = GregorianCalendar.getInstance();
129         gc.set(year, month - 1, day);
130         return new java.sql.Date(gc.getTime().getTime());
131     }
132
133     public static SimpleDateFormat getDateFormat() {
134         SimpleDateFormat local = fmt.get();
135         if (local == null) {
136             local = new SimpleDateFormat("yyyy-MM-dd");
137             local.setTimeZone(TimeZone.getTimeZone("UTC"));
138             fmt.set(local);
139         }
140         return local;
141     }
142
143 }