]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/output/DateSelector.java
fix: Make certs optional
[gigi.git] / src / org / cacert / gigi / output / DateSelector.java
index e4e66f6f4c4f92e316f2cf186f486e1830f45dff..ad1bdf33e3b543da3b64a56fb28ad09627446571 100644 (file)
@@ -11,7 +11,10 @@ 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.HTMLEncoder;
 
 public class DateSelector implements Outputable {
 
@@ -22,13 +25,13 @@ public class DateSelector implements Outputable {
         Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTF"));
         cal.setTime(date);
         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,6 +41,8 @@ public class DateSelector implements Outputable {
 
     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>");
@@ -88,30 +93,25 @@ public class DateSelector implements Outputable {
         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() {
@@ -132,4 +132,15 @@ public class DateSelector implements Outputable {
         return new java.sql.Date(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;
+    }
+
 }