package net.rrm.ehour.ui.admin.backup.backup; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AbstractAjaxBehavior; import org.apache.wicket.model.IModel; import org.apache.wicket.request.IRequestCycle; import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler; import org.apache.wicket.request.resource.ContentDisposition; import org.apache.wicket.util.resource.IResourceStream; public abstract class AbstractDownloadBehavior extends AbstractAjaxBehavior { private final IModel<Boolean> model; public AbstractDownloadBehavior(IModel<Boolean> model) { this.model = model; } public void initiate(AjaxRequestTarget target) { String url = getCallbackUrl().toString(); url = url + (url.contains("?") ? "&" : "?"); url = url + "antiCache=" + System.currentTimeMillis(); target.appendJavaScript("setTimeout(\"window.location.href='" + url + "'\", 100);"); } public void onRequest() { ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName()) { @Override public void respond(IRequestCycle requestCycle) { super.respond(requestCycle); model.setObject(Boolean.FALSE); } }; handler.setContentDisposition(ContentDisposition.ATTACHMENT); getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler); } protected String getFileName() { return null; } protected abstract IResourceStream getResourceStream(); }