X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Foutput%2FDateSelector.java;h=c4af9b03886a34dbc9d1e6dfc5ec34ab61896a13;hb=f718e460ae93ab692b817359e7b79696387e8dd1;hp=43654b7a9451c2aaf021d9aaee9bc7dc21711fb4;hpb=d3652a2da8005abfc4ae82ba255ff92f96fc007f;p=gigi.git diff --git a/src/org/cacert/gigi/output/DateSelector.java b/src/org/cacert/gigi/output/DateSelector.java index 43654b7a..c4af9b03 100644 --- a/src/org/cacert/gigi/output/DateSelector.java +++ b/src/org/cacert/gigi/output/DateSelector.java @@ -4,31 +4,34 @@ import java.io.PrintWriter; 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.CalendarUtil; +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) }; } @@ -38,9 +41,19 @@ public class DateSelector implements Outputable { private int year; + private static ThreadLocal fmt = new ThreadLocal<>(); + @Override public void output(PrintWriter out, Language l, Map vars) { - out.print(""); for (int i = 1; i <= 31; i++) { @@ -51,6 +64,9 @@ public class DateSelector implements Outputable { out.println(">" + i + ""); } out.println(""); + } + + private void outputMonth(PrintWriter out, Language l) { SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale()); out.print(""); + } + + private void outputYear(PrintWriter out) { out.print(""); + 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() { if ( !(1900 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) { return false; } - return true; // TODO checkdate + + if ( !CalendarUtil.isDateValid(year, month, day)) { + return false; + } + + return true; } @Override @@ -112,10 +131,19 @@ public class DateSelector implements Outputable { return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day + ", month=" + month + ", year=" + year + "]"; } - public java.sql.Date getDate() { - Calendar gc = GregorianCalendar.getInstance(); - gc.set(year, month - 1, day); - return new java.sql.Date(gc.getTime().getTime()); + public DayDate getDate() { + return CalendarUtil.getDateFromComponents(year, month, day); + } + + 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; } }