X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Foutput%2FDateSelector.java;h=2557282abe8dad4b8737b9ff6fd6baa0e972d6d4;hb=bf44d0196cd16ad76bbb732301b2e4107b39dac6;hp=782e6127c8362c3b9c9a90f72290eedcb2979875;hpb=06c5d96d7dc2df71a1658e1c7c9e34ad065d10d7;p=gigi.git diff --git a/src/org/cacert/gigi/output/DateSelector.java b/src/org/cacert/gigi/output/DateSelector.java index 782e6127..2557282a 100644 --- a/src/org/cacert/gigi/output/DateSelector.java +++ b/src/org/cacert/gigi/output/DateSelector.java @@ -2,52 +2,148 @@ package org.cacert.gigi.output; import java.io.PrintWriter; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Calendar; import java.util.Map; +import java.util.TimeZone; -import org.cacert.gigi.Language; +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.CalendarUtil; +import org.cacert.gigi.util.DayDate; +import org.cacert.gigi.util.HTMLEncoder; public class DateSelector implements Outputable { - String[] names; - public DateSelector(String day, String month, String year) { - this.names = new String[]{day, month, year}; - } - int day; - int month; - int year; - @Override - public void output(PrintWriter out, Language l, Map vars) { - out.print(""); - SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale()); - out.print(""); - out.print(""); - } + + private String[] names; + + public DateSelector(String day, String month, String year, DayDate date) { + this(day, month, year); + Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); + cal.setTimeInMillis(date.getTime()); + this.day = cal.get(Calendar.DAY_OF_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[] { + HTMLEncoder.encodeHTML(day), HTMLEncoder.encodeHTML(month), HTMLEncoder.encodeHTML(year) + }; + } + + private int day; + + private int month; + + private int year; + + private static ThreadLocal fmt = new ThreadLocal<>(); + + @Override + public void output(PrintWriter out, Language l, Map vars) { + out.print(""); + outputYear(out); + outputMonth(out, l); + outputDay(out); + out.print(""); + } + + private void outputDay(PrintWriter out) { + out.print(""); + } + + private void outputMonth(PrintWriter out, Language l) { + SimpleDateFormat sdf = new SimpleDateFormat("MMMM", l.getLocale()); + out.print(""); + } + + private void outputYear(PrintWriter out) { + out.print(""); + } + + public void update(HttpServletRequest r) throws GigiApiException { + try { + String dayS = r.getParameter(names[0]); + if (dayS != null) { + day = Integer.parseInt(dayS); + } + + String monthS = r.getParameter(names[1]); + if (monthS != null) { + month = Integer.parseInt(monthS); + } + + String yearS = r.getParameter(names[2]); + if (yearS != null) { + year = Integer.parseInt(yearS); + } + } catch (NumberFormatException e) { + throw new GigiApiException("Unparsable date."); + } + } + + public boolean isValid() { + if ( !(1890 < year && 1 <= month && month <= 12 && 1 <= day && day <= 32)) { + return false; + } + + if ( !CalendarUtil.isDateValid(year, month, day)) { + return false; + } + + return true; + } + + @Override + public String toString() { + return "DateSelector [names=" + Arrays.toString(names) + ", day=" + day + ", month=" + month + ", year=" + year + "]"; + } + + 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; + } + }