import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
-import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import java.util.TimeZone;
import javax.servlet.http.HttpServletRequest;
+import org.cacert.gigi.GigiApiException;
import org.cacert.gigi.localisation.Language;
+import org.cacert.gigi.output.template.Outputable;
+import org.cacert.gigi.util.DayDate;
+import org.cacert.gigi.util.HTMLEncoder;
public class DateSelector implements Outputable {
private String[] names;
- public DateSelector(String day, String month, String year, Date date) {
+ public DateSelector(String day, String month, String year, DayDate date) {
this(day, month, year);
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTF"));
- cal.setTime(date);
+ cal.setTimeInMillis(date.getTime());
this.day = cal.get(Calendar.DAY_OF_MONTH);
- this.month = cal.get(Calendar.MONTH);
+ this.month = cal.get(Calendar.MONTH) + 1;
this.year = cal.get(Calendar.YEAR);
}
public DateSelector(String day, String month, String year) {
this.names = new String[] {
- day, month, year
+ HTMLEncoder.encodeHTML(day), HTMLEncoder.encodeHTML(month), HTMLEncoder.encodeHTML(year)
};
}
private int year;
+ private static ThreadLocal<SimpleDateFormat> fmt = new ThreadLocal<>();
+
@Override
public void output(PrintWriter out, Language l, Map<String, Object> vars) {
out.print("<nobr>");
out.print("\" size=\"4\" autocomplete=\"off\">");
}
- public void update(HttpServletRequest r) {
- String dayS = r.getParameter(names[0]);
- if (dayS != null) {
- day = parseIntSafe(dayS);
- }
-
- String monthS = r.getParameter(names[1]);
- if (monthS != null) {
- month = parseIntSafe(monthS);
- }
+ public void update(HttpServletRequest r) throws GigiApiException {
+ try {
+ String dayS = r.getParameter(names[0]);
+ if (dayS != null) {
+ day = Integer.parseInt(dayS);
+ }
- String yearS = r.getParameter(names[2]);
- if (yearS != null) {
- year = parseIntSafe(yearS);
- }
- }
+ String monthS = r.getParameter(names[1]);
+ if (monthS != null) {
+ month = Integer.parseInt(monthS);
+ }
- private int parseIntSafe(String dayS) {
- try {
- return Integer.parseInt(dayS);
+ String yearS = r.getParameter(names[2]);
+ if (yearS != null) {
+ year = Integer.parseInt(yearS);
+ }
} catch (NumberFormatException e) {
-
+ throw new GigiApiException("Unparsable date.");
}
- return 0;
}
public boolean isValid() {
return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day + ", month=" + month + ", year=" + year + "]";
}
- public java.sql.Date getDate() {
+ public DayDate getDate() {
Calendar gc = GregorianCalendar.getInstance();
- gc.set(year, month - 1, day);
- return new java.sql.Date(gc.getTime().getTime());
+ gc.set(year, month - 1, day, 0, 0, 0);
+ gc.set(Calendar.MILLISECOND, 0);
+ return new DayDate(gc.getTime().getTime());
+ }
+
+ public static SimpleDateFormat getDateFormat() {
+ SimpleDateFormat local = fmt.get();
+ if (local == null) {
+ local = new SimpleDateFormat("yyyy-MM-dd");
+ local.setLenient(false);
+ local.setTimeZone(TimeZone.getTimeZone("UTC"));
+ fmt.set(local);
+ }
+ return local;
}
}