1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.client.console.wicket.ajax.form;
20
21 import java.time.Duration;
22 import org.apache.syncope.client.ui.commons.HttpResourceStream;
23 import org.apache.syncope.client.ui.commons.rest.ResponseHolder;
24 import org.apache.wicket.ajax.AjaxRequestTarget;
25 import org.apache.wicket.behavior.AbstractAjaxBehavior;
26 import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 public class AjaxDownloadBehavior extends AbstractAjaxBehavior {
31
32 private static final long serialVersionUID = 6833760760338614245L;
33
34 protected static final Logger LOG = LoggerFactory.getLogger(AjaxDownloadBehavior.class);
35
36 protected ResponseHolder responseHolder;
37
38 public void setResponse(final ResponseHolder response) {
39 this.responseHolder = response;
40 }
41
42
43
44
45
46
47 public void initiate(final AjaxRequestTarget target) {
48 CharSequence url = getCallbackUrl();
49 target.appendJavaScript("window.location.href='" + url + "'");
50 }
51
52 protected HttpResourceStream getResourceStream() {
53 HttpResourceStream stream = null;
54
55 if (responseHolder != null) {
56 stream = new HttpResourceStream(responseHolder);
57 responseHolder = null;
58 }
59
60 return stream;
61 }
62
63 @Override
64 public void onRequest() {
65 try {
66 HttpResourceStream resourceStream = getResourceStream();
67 if (resourceStream != null) {
68 getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(
69 new ResourceStreamRequestHandler(
70 resourceStream, resourceStream.getFilename()).setCacheDuration(Duration.ZERO));
71 }
72 } catch (Exception e) {
73
74 LOG.error("Error downloading file", e);
75 }
76 }
77 }