You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2010/01/12 02:29:00 UTC

svn commit: r898146 - in /wicket/trunk/wicket/src/main/java/org/apache/wicket: ng/mock/ ng/resource/ protocol/http/ protocol/http/servlet/

Author: knopp
Date: Tue Jan 12 01:28:59 2010
New Revision: 898146

URL: http://svn.apache.org/viewvc?rev=898146&view=rev
Log:
fixes

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockWebResponse.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/AbstractResource.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResource.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockWebResponse.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockWebResponse.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/mock/MockWebResponse.java Tue Jan 12 01:28:59 2010
@@ -86,6 +86,7 @@
 	/**
 	 * @return <code>true</code> if redirect URL was set, <code>false</code> otherwise.
 	 */
+	@Override
 	public boolean isRedirect()
 	{
 		return redirectUrl != null;
@@ -284,4 +285,8 @@
 		return errorMessage;
 	}
 
+	@Override
+	public void flush()
+	{
+	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/AbstractResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/AbstractResource.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/AbstractResource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/AbstractResource.java Tue Jan 12 01:28:59 2010
@@ -427,7 +427,12 @@
 				response.setContentLength(contentLength);
 			}
 
-			// 6. Write Data
+			// 6. Flush the response
+			// This is necessary for firefox if this resource is an image, otherwise it messes up
+			// other images on page
+			response.flush();
+
+			// 7. Write Data
 			data.getWriteCallback().writeData(attributes);
 		}
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResource.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResource.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResource.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ng/resource/PackageResource.java Tue Jan 12 01:28:59 2010
@@ -80,7 +80,7 @@
 	 *            This argument will be used to get the class loader for loading the package
 	 *            resource, and to determine what package it is in
 	 * @param name
-	 *            The re;atove path to the resource
+	 *            The relative path to the resource
 	 * @param locale
 	 *            The locale of the resource
 	 * @param style

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/BufferedWebResponse.java Tue Jan 12 01:28:59 2010
@@ -20,12 +20,11 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import javax.servlet.http.Cookie;
 
+import org.apache.wicket.Response;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.util.lang.Checks;
 
@@ -39,6 +38,228 @@
 public abstract class BufferedWebResponse extends WebResponse
 {
 
+	private static abstract class Action
+	{
+		protected abstract void invoke(WebResponse response);
+	};
+
+	private static class WriteCharSequenceAction extends Action
+	{
+		private final StringBuilder builder = new StringBuilder(4096);
+
+		public WriteCharSequenceAction()
+		{
+
+		}
+
+		public void append(CharSequence sequence)
+		{
+			builder.append(sequence);
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.write(builder);
+		}
+	};
+
+	private static class WriteDataAction extends Action
+	{
+		private final ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+		public WriteDataAction()
+		{
+
+		}
+
+		public void append(byte data[])
+		{
+			try
+			{
+				stream.write(data);
+			}
+			catch (IOException e)
+			{
+				throw new WicketRuntimeException(e);
+			}
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			writeStream(response, stream);
+		}
+	}
+
+	private static class CloseAction extends Action
+	{
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.close();
+		}
+	};
+
+	private static class AddCookieAction extends Action
+	{
+		private final Cookie cookie;
+
+		public AddCookieAction(Cookie cookie)
+		{
+			this.cookie = cookie;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.addCookie(cookie);
+		}
+	};
+
+	private static class ClearCookieAction extends Action
+	{
+		private final Cookie cookie;
+
+		public ClearCookieAction(Cookie cookie)
+		{
+			this.cookie = cookie;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.clearCookie(cookie);
+		}
+	};
+
+	private static class SetHeaderAction extends Action
+	{
+		private final String name;
+		private final String value;
+
+		public SetHeaderAction(String name, String value)
+		{
+			this.name = name;
+			this.value = value;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.setHeader(name, value);
+		}
+	}
+
+	private static class SetDateHeaderAction extends Action
+	{
+		private final String name;
+		private final long value;
+
+		public SetDateHeaderAction(String name, long value)
+		{
+			this.name = name;
+			this.value = value;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.setDateHeader(name, value);
+		}
+	}
+
+	private static class SetContentLengthAction extends Action
+	{
+		private final long contentLength;
+
+		public SetContentLengthAction(long contentLength)
+		{
+			this.contentLength = contentLength;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.setContentLength(contentLength);
+		}
+	};
+
+	private static class SetContentTypeAction extends Action
+	{
+		private final String contentType;
+
+		public SetContentTypeAction(String contentType)
+		{
+			this.contentType = contentType;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.setContentType(contentType);
+		}
+	};
+
+	private static class SetStatusAction extends Action
+	{
+		private final int sc;
+
+		public SetStatusAction(int sc)
+		{
+			this.sc = sc;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.setStatus(sc);
+		}
+	};
+
+	private static class SendErrorAction extends Action
+	{
+		private final int sc;
+		private final String msg;
+
+		public SendErrorAction(int sc, String msg)
+		{
+			this.sc = sc;
+			this.msg = msg;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.sendError(sc, msg);
+		}
+	};
+
+	private static class SendRedirectAction extends Action
+	{
+		private final String url;
+
+		public SendRedirectAction(String url)
+		{
+			this.url = url;
+		}
+
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.sendRedirect(url);
+		}
+	};
+
+	private static class FlushAction extends Action
+	{
+		@Override
+		protected void invoke(WebResponse response)
+		{
+			response.flush();
+		}
+	};
+
 	/**
 	 * Construct.
 	 */
@@ -46,136 +267,95 @@
 	{
 	}
 
-	private static class CookieEntry
-	{
-		Cookie cookie;
-		boolean add;
-	}
-
-	private final List<CookieEntry> cookieEntries = new ArrayList<CookieEntry>();
+	private final List<Action> actions = new ArrayList<Action>();
+	private WriteCharSequenceAction charSequenceAction;
+	private WriteDataAction dataAction;
 
 	@Override
 	public void addCookie(Cookie cookie)
 	{
-		CookieEntry entry = new CookieEntry();
-		entry.cookie = cookie;
-		entry.add = true;
-		cookieEntries.add(entry);
+		actions.add(new AddCookieAction(cookie));
 	}
 
 	@Override
 	public void clearCookie(Cookie cookie)
 	{
-		CookieEntry entry = new CookieEntry();
-		entry.cookie = cookie;
-		entry.add = false;
-		cookieEntries.add(entry);
+		actions.add(new ClearCookieAction(cookie));
 	}
 
-	private Long contentLength = null;
-
 	@Override
 	public void setContentLength(long length)
 	{
-		contentLength = length;
+		actions.add(new SetContentLengthAction(length));
 	}
 
-	private String contentType = null;
-
 	@Override
 	public void setContentType(String mimeType)
 	{
-		contentType = mimeType;
+		actions.add(new SetContentTypeAction(mimeType));
 	}
 
-	private final Map<String, Long> dateHeaders = new HashMap<String, Long>();
-
 	@Override
 	public void setDateHeader(String name, long date)
 	{
-		dateHeaders.put(name, date);
+		actions.add(new SetDateHeaderAction(name, date));
 	}
 
-	private final Map<String, String> headers = new HashMap<String, String>();
-
 	@Override
 	public void setHeader(String name, String value)
 	{
-		headers.put(name, value);
+		actions.add(new SetHeaderAction(name, value));
 	}
 
-	private StringBuilder builder;
-	private ByteArrayOutputStream stream;
-
 	@Override
 	public void write(CharSequence sequence)
 	{
-		if (stream != null)
+		if (dataAction != null)
 		{
 			throw new IllegalStateException(
 				"Can't call write(CharSequence) after write(byte[]) has been called.");
 		}
 
-		if (builder == null)
+		if (charSequenceAction == null)
 		{
-			builder = new StringBuilder(4096);
+			charSequenceAction = new WriteCharSequenceAction();
+			actions.add(charSequenceAction);
 		}
-
-		builder.append(sequence);
+		charSequenceAction.append(sequence);
 	}
 
 	@Override
 	public void write(byte[] array)
 	{
-		if (builder != null)
+		if (charSequenceAction != null)
 		{
 			throw new IllegalStateException(
 				"Can't call write(byte[]) after write(CharSequence) has been called.");
 		}
-		if (stream == null)
+		if (dataAction == null)
 		{
-			stream = new ByteArrayOutputStream(array.length);
-		}
-		try
-		{
-			stream.write(array);
-		}
-		catch (IOException e)
-		{
-			throw new WicketRuntimeException(e);
+			dataAction = new WriteDataAction();
+			actions.add(dataAction);
 		}
+		dataAction.append(array);
 	}
 
-	private String redirectUrl = null;
-
 	@Override
 	public void sendRedirect(String url)
 	{
-		redirectUrl = url;
+		actions.add(new SendRedirectAction(url));
 	}
 
-	private Integer statusCode = null;
-
 	@Override
 	public void setStatus(int sc)
 	{
-		statusCode = sc;
-	}
-
-	static class Error
-	{
-		int sc;
-		String message;
+		actions.add(new SetStatusAction(sc));
 	}
 
-	private Error error = null;
-
 	@Override
 	public void sendError(int sc, String msg)
 	{
-		error = new Error();
-		error.sc = sc;
-		error.message = msg;
+		actions.add(new SendErrorAction(sc, msg));
 	}
 
 	/**
@@ -188,88 +368,63 @@
 	{
 		Checks.argumentNotNull(response, "response");
 
-		for (CookieEntry e : cookieEntries)
-		{
-			if (e.add)
-			{
-				response.addCookie(e.cookie);
-			}
-			else
-			{
-				response.clearCookie(e.cookie);
-			}
-		}
-		if (contentLength != null)
+		for (Action action : actions)
 		{
-			response.setContentLength(contentLength);
+			action.invoke(response);
 		}
-		if (contentType != null)
-		{
-			response.setContentType(contentType);
-		}
-		for (String s : dateHeaders.keySet())
-		{
-			response.setDateHeader(s, dateHeaders.get(s));
-		}
-		for (String s : headers.keySet())
-		{
-			response.setHeader(s, headers.get(s));
-		}
-		if (statusCode != null)
-		{
-			response.setStatus(statusCode);
-		}
-		if (error != null)
-		{
-			response.sendError(error.sc, error.message);
-		}
-		if (redirectUrl != null)
-		{
-			response.sendRedirect(redirectUrl);
-		}
-		if (builder != null)
+	}
+
+	@Override
+	public boolean isRedirect()
+	{
+		for (Action action : actions)
 		{
-			response.write(builder);
+			if (action instanceof SendRedirectAction)
+			{
+				return true;
+			}
 		}
-		else if (stream != null)
+		return false;
+	}
+
+	@Override
+	public void flush()
+	{
+		actions.add(new FlushAction());
+	}
+
+	private static final void writeStream(final Response response, ByteArrayOutputStream stream)
+	{
+		final boolean copied[] = { false };
+		try
 		{
-			final boolean copied[] = { false };
-			try
+			// try to avoid copying the array
+			stream.writeTo(new OutputStream()
 			{
-				// try to avoid copying the array
-				stream.writeTo(new OutputStream()
+				@Override
+				public void write(int b) throws IOException
 				{
-					@Override
-					public void write(int b) throws IOException
-					{
 
-					}
+				}
 
-					@Override
-					public void write(byte[] b, int off, int len) throws IOException
+				@Override
+				public void write(byte[] b, int off, int len) throws IOException
+				{
+					if (off == 0 && len == b.length)
 					{
-						if (off == 0 && len == b.length)
-						{
-							response.write(b);
-							copied[0] = true;
-						}
+						response.write(b);
+						copied[0] = true;
 					}
-				});
-			}
-			catch (IOException e1)
-			{
-				throw new WicketRuntimeException(e1);
-			}
-			if (copied[0] == false)
-			{
-				response.write(stream.toByteArray());
-			}
+				}
+			});
+		}
+		catch (IOException e1)
+		{
+			throw new WicketRuntimeException(e1);
+		}
+		if (copied[0] == false)
+		{
+			response.write(stream.toByteArray());
 		}
-	}
-
-	@Override
-	public boolean isRedirect()
-	{
-		return redirectUrl != null;
 	}
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java Tue Jan 12 01:28:59 2010
@@ -150,4 +150,9 @@
 	 *         otherwise.
 	 */
 	public abstract boolean isRedirect();
+
+	/**
+	 * Flushes the response.
+	 */
+	public abstract void flush();
 }

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java Tue Jan 12 01:28:59 2010
@@ -184,6 +184,8 @@
 			{
 				Thread.currentThread().setContextClassLoader(previousClassLoader);
 			}
+
+			response.flushBuffer();
 		}
 		return res;
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java?rev=898146&r1=898145&r2=898146&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java Tue Jan 12 01:28:59 2010
@@ -199,4 +199,17 @@
 	{
 		return redirect;
 	}
+
+	@Override
+	public void flush()
+	{
+		try
+		{
+			httpServletResponse.flushBuffer();
+		}
+		catch (IOException e)
+		{
+			throw new WicketRuntimeException(e);
+		}
+	}
 }