You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jb...@apache.org on 2007/03/14 14:19:10 UTC

svn commit: r518127 - /incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java

Author: jbq
Date: Wed Mar 14 06:19:09 2007
New Revision: 518127

URL: http://svn.apache.org/viewvc?view=rev&rev=518127
Log:
WICKET-386 Create RFC-compliant date fields in MockHttpServletResponse

Code comes from Jetty 6.1.1 under the ASL 2.0

Modified:
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java?view=diff&rev=518127&r1=518126&r2=518127
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/wicket/protocol/http/MockHttpServletResponse.java Wed Mar 14 06:19:09 2007
@@ -22,11 +22,14 @@
 import java.io.StringWriter;
 import java.text.DateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
+import java.util.TimeZone;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.Cookie;
@@ -587,9 +590,82 @@
 	 */
 	public void setDateHeader(final String name, final long l)
 	{
-		DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
-		setHeader(name, df.format(new Date(l)));
+        setHeader(name, formatDate(l));
 	}
+
+	public static String formatDate(long l) {
+        StringBuffer _dateBuffer = new StringBuffer(32);
+        Calendar _calendar = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
+        _calendar.setTimeInMillis(l);
+        formatDate(_dateBuffer, _calendar, false);
+        return _dateBuffer.toString();
+	}
+	
+	/* BEGIN: This code comes from Jetty 6.1.1 */
+    private static String[] DAYS =
+    { "Sat", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
+    private static String[] MONTHS =
+    { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan"};
+
+	/**
+     * Format HTTP date "EEE, dd MMM yyyy HH:mm:ss 'GMT'" or "EEE, dd-MMM-yy HH:mm:ss 'GMT'"for
+     * cookies
+     */
+    public static void formatDate(StringBuffer buf, Calendar calendar, boolean cookie)
+    {
+        // "EEE, dd MMM yyyy HH:mm:ss 'GMT'"
+        // "EEE, dd-MMM-yy HH:mm:ss 'GMT'", cookie
+
+        int day_of_week = calendar.get(Calendar.DAY_OF_WEEK);
+        int day_of_month = calendar.get(Calendar.DAY_OF_MONTH);
+        int month = calendar.get(Calendar.MONTH);
+        int year = calendar.get(Calendar.YEAR);
+        int century = year / 100;
+        year = year % 100;
+
+        int epoch = (int) ((calendar.getTimeInMillis() / 1000) % (60 * 60 * 24));
+        int seconds = epoch % 60;
+        epoch = epoch / 60;
+        int minutes = epoch % 60;
+        int hours = epoch / 60;
+
+        buf.append(DAYS[day_of_week]);
+        buf.append(',');
+        buf.append(' ');
+        append2digits(buf, day_of_month);
+
+        if (cookie)
+        {
+            buf.append('-');
+            buf.append(MONTHS[month]);
+            buf.append('-');
+            append2digits(buf, year);
+        }
+        else
+        {
+            buf.append(' ');
+            buf.append(MONTHS[month]);
+            buf.append(' ');
+            append2digits(buf, century);
+            append2digits(buf, year);
+        }
+        buf.append(' ');
+        append2digits(buf, hours);
+        buf.append(':');
+        append2digits(buf, minutes);
+        buf.append(':');
+        append2digits(buf, seconds);
+        buf.append(" GMT");
+    }
+    public static void append2digits(StringBuffer buf,int i)
+    {
+        if (i<100)
+        {
+            buf.append((char)(i/10+'0'));
+            buf.append((char)(i%10+'0'));
+        }
+    }
+	/* END: This code comes from Jetty 6.1.1 */
 
 	/**
 	 * Set the given header value.