17
17
package com .vaadin .flow .server ;
18
18
19
19
import java .io .File ;
20
+ import java .io .InputStream ;
21
+ import java .io .OutputStream ;
22
+ import java .util .Collection ;
20
23
import java .util .Optional ;
21
24
22
25
import com .vaadin .flow .dom .Element ;
26
+ import com .vaadin .flow .function .SerializableConsumer ;
23
27
import com .vaadin .flow .function .SerializableFunction ;
28
+ import com .vaadin .flow .server .streams .AbstractDownloadHandler ;
24
29
import com .vaadin .flow .server .streams .ClassDownloadHandler ;
25
30
import com .vaadin .flow .server .streams .DownloadResponse ;
26
31
import com .vaadin .flow .server .streams .FileDownloadHandler ;
27
32
import com .vaadin .flow .server .streams .InputStreamDownloadHandler ;
28
33
import com .vaadin .flow .server .streams .ServletResourceDownloadHandler ;
34
+ import com .vaadin .flow .server .streams .TransferContext ;
29
35
30
36
/**
31
37
* Interface for handling download of data from the server to the client.
@@ -43,29 +49,29 @@ public interface DownloadHandler extends ElementRequestHandler {
43
49
* download event containing the necessary data for writing the
44
50
* response
45
51
*/
46
- void handleDownloadRequest (DownloadRequest event );
52
+ void handleDownloadRequest (DownloadEvent event );
47
53
48
54
default void handleRequest (VaadinRequest request , VaadinResponse response ,
49
55
VaadinSession session , Element owner ) {
50
56
String fileName = getUrlPostfix () == null ? "" : getUrlPostfix ();
51
57
52
- DownloadRequest event = new DownloadRequest (request , response , session ,
53
- fileName ,
58
+ DownloadEvent downloadEvent = new DownloadEvent (request , response ,
59
+ session , fileName ,
54
60
Optional .ofNullable (response .getService ().getMimeType (fileName ))
55
61
.orElse ("application/octet-stream" ),
56
62
owner );
57
63
58
- handleDownloadRequest (event );
64
+ handleDownloadRequest (downloadEvent );
59
65
}
60
66
61
67
/**
62
68
* Get a download handler for serving given {@link File}.
63
69
*
64
70
* @param file
65
71
* file to server for download
66
- * @return DownloadHandler instance for file
72
+ * @return DownloadHandler implementation for download a file
67
73
*/
68
- static DownloadHandler forFile (File file ) {
74
+ static FileDownloadHandler forFile (File file ) {
69
75
return new FileDownloadHandler (file );
70
76
}
71
77
@@ -76,12 +82,31 @@ static DownloadHandler forFile(File file) {
76
82
* file to server for download
77
83
* @param name
78
84
* download name to use
79
- * @return DownloadHandler instance for file
85
+ * @return DownloadHandler implementation for download a file
80
86
*/
81
- static DownloadHandler forFile (File file , String name ) {
87
+ static FileDownloadHandler forFile (File file , String name ) {
82
88
return new FileDownloadHandler (file , name );
83
89
}
84
90
91
+ /**
92
+ * Get a download handler for serving given {@link File} with the given
93
+ * download name and progress listener.
94
+ *
95
+ * @param file
96
+ * file to server for download
97
+ * @param name
98
+ * download name to use
99
+ * @param listener
100
+ * listener for transfer progress events
101
+ * @return DownloadHandler implementation for download a file
102
+ */
103
+ static FileDownloadHandler forFile (File file , String name ,
104
+ TransferProgressListener listener ) {
105
+ FileDownloadHandler handler = new FileDownloadHandler (file , name );
106
+ handler .addTransferProgressListener (listener );
107
+ return handler ;
108
+ }
109
+
85
110
/**
86
111
* Generate a download handler for class resource.
87
112
* <p>
@@ -93,9 +118,9 @@ static DownloadHandler forFile(File file, String name) {
93
118
* class for resource module
94
119
* @param resourceName
95
120
* name of class resource
96
- * @return DownloadHandler instance for class resource
121
+ * @return DownloadHandler implementation for download a class resource
97
122
*/
98
- static DownloadHandler forClassResource (Class <?> clazz ,
123
+ static ClassDownloadHandler forClassResource (Class <?> clazz ,
99
124
String resourceName ) {
100
125
return new ClassDownloadHandler (clazz , resourceName );
101
126
}
@@ -113,13 +138,40 @@ static DownloadHandler forClassResource(Class<?> clazz,
113
138
* name of class resource
114
139
* @param fileName
115
140
* download resourceName to use
116
- * @return DownloadHandler instance for class resource
141
+ * @return DownloadHandler implementation for download a class resource
117
142
*/
118
- static DownloadHandler forClassResource (Class <?> clazz , String resourceName ,
119
- String fileName ) {
143
+ static ClassDownloadHandler forClassResource (Class <?> clazz ,
144
+ String resourceName , String fileName ) {
120
145
return new ClassDownloadHandler (clazz , resourceName , fileName );
121
146
}
122
147
148
+ /**
149
+ * Generate a download handler for class resource with the given download
150
+ * name and progress listener.
151
+ * <p>
152
+ * For instance for the file {@code resources/com/example/ui/MyData.json}
153
+ * and class {@code com.example.ui.MyData} the definition would be
154
+ * {@code forClassResource(MyData.class, "MyData.json", "Data.json")}
155
+ *
156
+ * @param clazz
157
+ * class for resource module
158
+ * @param resourceName
159
+ * name of class resource
160
+ * @param fileName
161
+ * download resourceName to use
162
+ * @param listener
163
+ * listener for transfer progress events
164
+ * @return DownloadHandler implementation for download a class resource
165
+ */
166
+ static ClassDownloadHandler forClassResource (Class <?> clazz ,
167
+ String resourceName , String fileName ,
168
+ TransferProgressListener listener ) {
169
+ ClassDownloadHandler handler = new ClassDownloadHandler (clazz ,
170
+ resourceName , fileName );
171
+ handler .addTransferProgressListener (listener );
172
+ return handler ;
173
+ }
174
+
123
175
/**
124
176
* Generate a download handler for a servlet resource.
125
177
* <p>
@@ -128,9 +180,9 @@ static DownloadHandler forClassResource(Class<?> clazz, String resourceName,
128
180
*
129
181
* @param path
130
182
* the servlet path to the file
131
- * @return DownloadHandler instance for servlet resource
183
+ * @return DownloadHandler implementation for downloading a servlet resource
132
184
*/
133
- static DownloadHandler forServletResource (String path ) {
185
+ static ServletResourceDownloadHandler forServletResource (String path ) {
134
186
return new ServletResourceDownloadHandler (path );
135
187
}
136
188
@@ -147,21 +199,47 @@ static DownloadHandler forServletResource(String path) {
147
199
* the servlet path to the file
148
200
* @param name
149
201
* resource name
150
- * @return DownloadHandler instance for servlet resource
202
+ * @return DownloadHandler implementation for downloading a servlet resource
151
203
*/
152
- static DownloadHandler forServletResource (String path , String name ) {
204
+ static ServletResourceDownloadHandler forServletResource (String path ,
205
+ String name ) {
153
206
return new ServletResourceDownloadHandler (path , name );
154
207
}
155
208
209
+ /**
210
+ * Generate a download handler for a servlet resource.
211
+ * <p>
212
+ * For instance for the file {@code webapp/WEB-INF/servlet.json} the path
213
+ * would be {@code /WEB-INF/servlet.json}
214
+ * <p>
215
+ * Name is appended to the download url as the logical name of the target
216
+ * file.
217
+ *
218
+ * @param path
10000
div>
219
+ * the servlet path to the file
220
+ * @param name
221
+ * resource name
222
+ * @param listener
223
+ * listener for transfer progress events
224
+ * @return DownloadHandler implementation for downloading a servlet resource
225
+ */
226
+ static ServletResourceDownloadHandler forServletResource (String path ,
227
+ String name , TransferProgressListener listener ) {
228
+ ServletResourceDownloadHandler handler = new ServletResourceDownloadHandler (
229
+ path , name );
230
+ handler .addTransferProgressListener (listener );
231
+ return handler ;
232
+ }
233
+
156
234
/**
157
235
* Generate a function for downloading from a generated inputStream.
158
236
*
159
237
* @param handler
160
238
* handler function that will be called on download
161
- * @return DownloadHandler instance for inputStream
239
+ * @return DownloadHandler implementation for download from an input stream
162
240
*/
163
- static DownloadHandler fromInputStream (
164
- SerializableFunction <DownloadRequest , DownloadResponse > handler ) {
241
+ static InputStreamDownloadHandler fromInputStream (
242
+ SerializableFunction <DownloadEvent , DownloadResponse > handler ) {
165
243
return new InputStreamDownloadHandler (handler );
166
244
}
167
245
@@ -172,11 +250,31 @@ static DownloadHandler fromInputStream(
172
250
* handler function that will be called on download
173
251
* @param name
174
252
* resource name
175
- * @return DownloadHandler instance for inputStream
253
+ * @return DownloadHandler implementation for download from an input stream
176
254
*/
177
- static DownloadHandler fromInputStream (
178
- SerializableFunction <DownloadRequest , DownloadResponse > handler ,
255
+ static InputStreamDownloadHandler fromInputStream (
256
+ SerializableFunction <DownloadEvent , DownloadResponse > handler ,
179
257
String name ) {
180
258
return new InputStreamDownloadHandler (handler , name );
181
259
}
260
+
261
A1CC
+ /**
262
+ * Generate a function for downloading from a generated inputStream.
263
+ *
264
+ * @param handler
265
+ * handler function that will be called on download
266
+ * @param name
267
+ * resource name
268
+ * @param listener
269
+ * listener for transfer progress events
270
+ * @return DownloadHandler implementation for download from an input stream
271
+ */
272
+ static InputStreamDownloadHandler fromInputStream (
273
+ SerializableFunction <DownloadEvent , DownloadResponse > handler ,
274
+ String name , TransferProgressListener listener ) {
275
+ InputStreamDownloadHandler downloadHandler = new InputStreamDownloadHandler (
276
+ handler , name );
277
+ downloadHandler .addTransferProgressListener (listener );
278
+ return downloadHandler ;
279
+ }
182
280
}
0 commit comments