Author: svenmeier
Date: Sun Jul 17 10:32:05 2011
New Revision: 1147575
URL: http://svn.apache.org/viewvc?rev=1147575&view=rev
Log:
WICKET-2762 multiple fileuploads in one http-session
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/MultipartServletWebRequestImpl.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadStatusResource.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
Sun Jul 17 10:32:05 2011
@@ -54,8 +54,8 @@ import org.apache.wicket.util.string.App
import org.apache.wicket.util.string.PrependingStringBuffer;
import org.apache.wicket.util.string.Strings;
import org.apache.wicket.util.string.interpolator.MapVariableInterpolator;
-import org.apache.wicket.util.upload.FileUploadBase.SizeLimitExceededException;
import org.apache.wicket.util.upload.FileUploadException;
+import org.apache.wicket.util.upload.FileUploadBase.SizeLimitExceededException;
import org.apache.wicket.util.value.LongValue;
import org.apache.wicket.util.visit.ClassVisitFilter;
import org.apache.wicket.util.visit.IVisit;
@@ -536,12 +536,8 @@ public class Form<T> extends WebMarkupCo
Form<?> root = getRootForm();
return new
AppendingStringBuffer("document.getElementById('").append(
- root.getHiddenFieldId())
- .append("').value='")
- .append(url)
- .append("';document.getElementById('")
- .append(root.getMarkupId())
- .append("').submit();");
+
root.getHiddenFieldId()).append("').value='").append(url).append(
+
"';document.getElementById('").append(root.getMarkupId()).append("').submit();");
}
/**
@@ -1279,7 +1275,8 @@ public class Form<T> extends WebMarkupCo
try
{
ServletWebRequest request =
(ServletWebRequest)getRequest();
- final WebRequest multipartWebRequest =
request.newMultipartWebRequest(getMaxSize());
+ final WebRequest multipartWebRequest =
request.newMultipartWebRequest(getMaxSize(),
+ getPage().getId());
// TODO: Can't this be detected from header?
getRequestCycle().setRequest(multipartWebRequest);
}
@@ -1554,11 +1551,8 @@ public class Form<T> extends WebMarkupCo
// render the hidden field
AppendingStringBuffer buffer = new
AppendingStringBuffer(HIDDEN_DIV_START).append(
- "<input type=\"hidden\" name=\"")
- .append(nameAndId)
- .append("\" id=\"")
- .append(nameAndId)
- .append("\" />");
+ "<input type=\"hidden\"
name=\"").append(nameAndId).append("\" id=\"").append(
+ nameAndId).append("\" />");
// if it's a get, did put the parameters in the action
attribute,
// and have to write the url parameters as hidden fields
@@ -1600,11 +1594,8 @@ public class Form<T> extends WebMarkupCo
{
String[] pair = Strings.split(param, '=');
- buffer.append("<input type=\"hidden\" name=\"")
- .append(recode(pair[0]))
- .append("\" value=\"")
- .append(pair.length > 1 ? recode(pair[1]) : "")
- .append("\" />");
+ buffer.append("<input type=\"hidden\"
name=\"").append(recode(pair[0])).append(
+ "\" value=\"").append(pair.length > 1 ?
recode(pair[1]) : "").append("\" />");
}
}
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/MultipartServletWebRequestImpl.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/MultipartServletWebRequestImpl.java?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/MultipartServletWebRequestImpl.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/MultipartServletWebRequestImpl.java
Sun Jul 17 10:32:05 2011
@@ -58,6 +58,7 @@ public class MultipartServletWebRequestI
/** Map of parameters. */
private final ValueMap parameters = new ValueMap();
+ private String upload;
/**
* total bytes uploaded (downloaded from server's pov) so far. used for
upload notifications
@@ -67,7 +68,6 @@ public class MultipartServletWebRequestI
/** content length cache, used for upload notifications */
private int totalBytes;
-
/**
* Constructor.
*
@@ -75,6 +75,8 @@ public class MultipartServletWebRequestI
*
* @param maxSize
* the maximum size allowed for this request
+ * @param upload
+ * upload identifier for {@link UploadInfo}
* @param request
* the servlet request
* @param filterPrefix
@@ -83,9 +85,9 @@ public class MultipartServletWebRequestI
* Thrown if something goes wrong with upload
*/
public MultipartServletWebRequestImpl(HttpServletRequest request,
String filterPrefix,
- Bytes maxSize) throws FileUploadException
+ Bytes maxSize, String upload) throws FileUploadException
{
- this(request, filterPrefix, maxSize, new
DiskFileItemFactory(Application.get()
+ this(request, filterPrefix, maxSize, upload, new
DiskFileItemFactory(Application.get()
.getResourceSettings()
.getFileCleaner()));
}
@@ -95,6 +97,8 @@ public class MultipartServletWebRequestI
*
* @param maxSize
* the maximum size allowed for this request
+ * @param upload
+ * upload identifier for {@link UploadInfo}
* @param request
* the servlet request
* @param filterPrefix
@@ -106,14 +110,13 @@ public class MultipartServletWebRequestI
* Thrown if something goes wrong with upload
*/
public MultipartServletWebRequestImpl(HttpServletRequest request,
String filterPrefix,
- Bytes maxSize, FileItemFactory factory) throws
FileUploadException
+ Bytes maxSize, String upload, FileItemFactory factory) throws
FileUploadException
{
super(request, filterPrefix);
- if (maxSize == null)
- {
- throw new IllegalArgumentException("argument maxSize
must be not null");
- }
+ Args.notNull(maxSize, "maxSize");
+ Args.notNull(upload, "upload");
+ this.upload = upload;
// Check that request is multipart
final boolean isMultipart =
ServletFileUpload.isMultipartContent(request);
@@ -124,7 +127,7 @@ public class MultipartServletWebRequestI
}
// Configure the factory here, if desired.
- ServletFileUpload upload = new ServletFileUpload(factory);
+ ServletFileUpload fileUpload = new ServletFileUpload(factory);
// The encoding that will be used to decode the string
parameters
// It should NOT be null at this point, but it may be
@@ -142,10 +145,10 @@ public class MultipartServletWebRequestI
// set encoding specifically when we found it
if (encoding != null)
{
- upload.setHeaderEncoding(encoding);
+ fileUpload.setHeaderEncoding(encoding);
}
- upload.setSizeMax(maxSize.bytes());
+ fileUpload.setSizeMax(maxSize.bytes());
final List<FileItem> items;
@@ -162,13 +165,13 @@ public class MultipartServletWebRequestI
totalBytes = request.getContentLength();
onUploadStarted(totalBytes);
- items = upload.parseRequest(ctx);
+ items = fileUpload.parseRequest(ctx);
onUploadCompleted();
}
else
{
- items = upload.parseRequest(request);
+ items = fileUpload.parseRequest(request);
}
// Loop through items
@@ -301,7 +304,7 @@ public class MultipartServletWebRequestI
{
UploadInfo info = new UploadInfo(totalBytes);
- setUploadInfo(getContainerRequest(), info);
+ setUploadInfo(getContainerRequest(), upload, info);
}
/**
@@ -313,7 +316,7 @@ public class MultipartServletWebRequestI
protected void onUploadUpdate(int bytesUploaded, int total)
{
HttpServletRequest request = getContainerRequest();
- UploadInfo info = getUploadInfo(request);
+ UploadInfo info = getUploadInfo(request, upload);
if (info == null)
{
throw new IllegalStateException(
@@ -321,7 +324,7 @@ public class MultipartServletWebRequestI
}
info.setBytesUploaded(bytesUploaded);
- setUploadInfo(request, info);
+ setUploadInfo(request, upload, info);
}
/**
@@ -329,7 +332,7 @@ public class MultipartServletWebRequestI
*/
protected void onUploadCompleted()
{
- clearUploadInfo(getContainerRequest());
+ clearUploadInfo(getContainerRequest(), upload);
}
/**
@@ -392,32 +395,39 @@ public class MultipartServletWebRequestI
}
@Override
- public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize)
+ public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
String upload)
throws FileUploadException
{
return this;
}
@Override
- public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
FileItemFactory factory)
- throws FileUploadException
+ public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
String upload,
+ FileItemFactory factory) throws FileUploadException
{
return this;
}
private static final String SESSION_KEY =
MultipartServletWebRequestImpl.class.getName();
+ private static String getSessionKey(String upload)
+ {
+ return SESSION_KEY + ":" + upload;
+ }
+
/**
* Retrieves {@link UploadInfo} from session, null if not found.
*
* @param req
* http servlet request, not null
+ * @param upload
+ * upload identifier
* @return {@link UploadInfo} object from session, or null if not found
*/
- public static UploadInfo getUploadInfo(final HttpServletRequest req)
+ public static UploadInfo getUploadInfo(final HttpServletRequest req,
String upload)
{
Args.notNull(req, "req");
- return (UploadInfo)req.getSession().getAttribute(SESSION_KEY);
+ return
(UploadInfo)req.getSession().getAttribute(getSessionKey(upload));
}
/**
@@ -425,14 +435,18 @@ public class MultipartServletWebRequestI
*
* @param req
* http servlet request, not null
+ * @param upload
+ * upload identifier
* @param uploadInfo
* {@link UploadInfo} object to be put into session, not null
*/
- public static void setUploadInfo(final HttpServletRequest req, final
UploadInfo uploadInfo)
+ public static void setUploadInfo(final HttpServletRequest req, String
upload,
+ final UploadInfo uploadInfo)
{
Args.notNull(req, "req");
+ Args.notNull(upload, "upload");
Args.notNull(uploadInfo, "uploadInfo");
- req.getSession().setAttribute(SESSION_KEY, uploadInfo);
+ req.getSession().setAttribute(getSessionKey(upload),
uploadInfo);
}
/**
@@ -440,10 +454,13 @@ public class MultipartServletWebRequestI
*
* @param req
* http servlet request, not null
+ * @param upload
+ * upload identifier
*/
- public static void clearUploadInfo(final HttpServletRequest req)
+ public static void clearUploadInfo(final HttpServletRequest req, String
upload)
{
Args.notNull(req, "req");
- req.getSession().removeAttribute(SESSION_KEY);
+ Args.notNull(upload, "upload");
+ req.getSession().removeAttribute(getSessionKey(upload));
}
}
\ No newline at end of file
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
(original)
+++
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
Sun Jul 17 10:32:05 2011
@@ -378,28 +378,33 @@ public class ServletWebRequest extends W
* Creates multipart web request from this request.
*
* @param maxSize
+ * @param upload
+ * upload identifier for {@link UploadInfo}
* @return multipart request
* @throws FileUploadException
*/
- public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize)
+ public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
String upload)
throws FileUploadException
{
- return new
MultipartServletWebRequestImpl(getContainerRequest(), filterPrefix, maxSize);
+ return new
MultipartServletWebRequestImpl(getContainerRequest(), filterPrefix, maxSize,
+ upload);
}
/**
* Creates multipart web request from this request.
*
* @param maxSize
+ * @param upload
+ * upload identifier for {@link UploadInfo}
* @param factory
* @return multipart request
* @throws FileUploadException
*/
- public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
FileItemFactory factory)
- throws FileUploadException
+ public MultipartServletWebRequest newMultipartWebRequest(Bytes maxSize,
String upload,
+ FileItemFactory factory) throws FileUploadException
{
return new
MultipartServletWebRequestImpl(getContainerRequest(), filterPrefix, maxSize,
- factory);
+ upload, factory);
}
private static final Logger logger =
LoggerFactory.getLogger(ServletWebRequest.class);
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadProgressBar.java
Sun Jul 17 10:32:05 2011
@@ -218,7 +218,7 @@ public class UploadProgressBar extends P
final String status = new
StringResourceModel("UploadProgressBar.starting", this,
(IModel<?>)null, "Upload starting...").getString();
- CharSequence url = urlFor(ref, null);
+ CharSequence url = urlFor(ref,
UploadStatusResource.newParameter(getPage().getId()));
StringBuilder builder = new StringBuilder(128);
Formatter formatter = new Formatter(builder);
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadStatusResource.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadStatusResource.java?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadStatusResource.java
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/UploadStatusResource.java
Sun Jul 17 10:32:05 2011
@@ -24,6 +24,7 @@ import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.protocol.http.servlet.MultipartServletWebRequestImpl;
import org.apache.wicket.protocol.http.servlet.UploadInfo;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.AbstractResource;
/**
@@ -41,6 +42,8 @@ class UploadStatusResource extends Abstr
private static final long serialVersionUID = 1L;
+ private static final String UPLOAD_PARAMETER = "upload";
+
/**
* Resource key used to retrieve status message for.
*
@@ -77,7 +80,7 @@ class UploadStatusResource extends Abstr
/**
* @param attributes
- * @return Status string with progress data that will feed the
progressbar.js variables on
+ * @return status string with progress data that will feed the
progressbar.js variables on
* browser to update the progress bar
*/
private String getStatus(final Attributes attributes)
@@ -85,7 +88,9 @@ class UploadStatusResource extends Abstr
final HttpServletRequest req =
(HttpServletRequest)attributes.getRequest()
.getContainerRequest();
- UploadInfo info =
MultipartServletWebRequestImpl.getUploadInfo(req);
+ final String upload = req.getParameter(UPLOAD_PARAMETER);
+
+ UploadInfo info =
MultipartServletWebRequestImpl.getUploadInfo(req, upload);
String status = null;
if ((info == null) || (info.getTotalBytes() < 1))
@@ -104,4 +109,16 @@ class UploadStatusResource extends Abstr
}
return status;
}
-}
+
+ /**
+ * Create a new parameter for the given identifier of a {@link
UploadInfo}.
+ *
+ * @param upload
+ * identifier
+ * @return page parameter suitable for URLs to this resource
+ */
+ public static PageParameters newParameter(String upload)
+ {
+ return new PageParameters().add(UPLOAD_PARAMETER, upload);
+ }
+}
\ No newline at end of file
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js?rev=1147575&r1=1147574&r2=1147575&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/form/upload/progressbar.js
Sun Jul 17 10:32:05 2011
@@ -77,7 +77,7 @@ Wicket.WUPB.prototype = {
},
load : function() {
- var URL = this.url + '?anticache=' + Math.random();
+ var URL = this.url + '&anticache=' + Math.random();
this.iframe = Wicket._createIFrame(""+Math.random());