package fr.openwide.core.wicket.more.markup.html.form;
import java.util.Map;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Bytes;
/**
* A form with a decent resource key for the file upload error message:
* <ul>
* <li><pre>FileUploadForm.uploadFailed</pre> when the upload failed
* <li><pre>FileUploadForm.uploadTooLarge</pre> when the uploaded file is too large (model: "maxSize" and "actualSize")
* <ul>
*/
public class FileUploadForm<T> extends Form<T> {
private static final long serialVersionUID = 4537543017863239331L;
private static final String UPLOAD_TOO_LARGE_RESOURCE_KEY = "uploadTooLarge";
private static final String UPLOAD_FAILED_RESOURCE_KEY = "uploadFailed";
public FileUploadForm(String id) {
super(id);
}
public FileUploadForm(String id, IModel<T> model) {
super(id, model);
}
@Override
protected void onFileUploadException(final FileUploadException e, final Map<String, Object> model) {
onFileUploadException(this, e, model);
}
public static void onFileUploadException(Form<?> form, FileUploadException e, Map<String, Object> model) {
if (e instanceof SizeLimitExceededException) {
final String defaultValue = "Upload must be less than " + form.getMaxSize();
model.put("actualSize", Bytes.bytes(((SizeLimitExceededException)e).getActualSize()));
String msg = form.getString(FileUploadForm.class.getSimpleName() + '.' + UPLOAD_TOO_LARGE_RESOURCE_KEY, Model.ofMap(model), defaultValue);
form.error(msg);
} else {
final String defaultValue = "Upload failed: " + e.getLocalizedMessage();
String msg = form.getString(FileUploadForm.class.getSimpleName() + '.' + UPLOAD_FAILED_RESOURCE_KEY, Model.ofMap(model), defaultValue);
form.error(msg);
}
}
}