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);
+ }
+ }
}