1 package org
.argeo
.eclipse
.ui
.specific
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
6 import org
.eclipse
.rap
.fileupload
.FileDetails
;
7 import org
.eclipse
.rap
.fileupload
.FileUploadHandler
;
8 import org
.eclipse
.rap
.fileupload
.FileUploadReceiver
;
9 import org
.eclipse
.rap
.rwt
.RWT
;
10 import org
.eclipse
.rap
.rwt
.client
.ClientFile
;
11 import org
.eclipse
.rap
.rwt
.client
.service
.ClientFileUploader
;
12 import org
.eclipse
.rap
.rwt
.dnd
.ClientFileTransfer
;
13 import org
.eclipse
.swt
.dnd
.DND
;
14 import org
.eclipse
.swt
.dnd
.DropTarget
;
15 import org
.eclipse
.swt
.dnd
.DropTargetAdapter
;
16 import org
.eclipse
.swt
.dnd
.DropTargetEvent
;
17 import org
.eclipse
.swt
.dnd
.Transfer
;
18 import org
.eclipse
.swt
.widgets
.Control
;
20 /** Configures a {@link Control} to receive files drop from the client OS. */
21 public class FileDropAdapter
{
23 public void prepareDropTarget(Control control
, DropTarget dropTarget
) {
24 dropTarget
.setTransfer(new Transfer
[] { ClientFileTransfer
.getInstance() });
25 dropTarget
.addDropListener(new DropTargetAdapter() {
26 private static final long serialVersionUID
= 5361645765549463168L;
29 public void dropAccept(DropTargetEvent event
) {
30 if (!ClientFileTransfer
.getInstance().isSupportedType(event
.currentDataType
)) {
31 event
.detail
= DND
.DROP_NONE
;
36 public void drop(DropTargetEvent event
) {
37 handleFileDrop(control
, event
);
42 public void handleFileDrop(Control control
, DropTargetEvent event
) {
43 ClientFile
[] clientFiles
= (ClientFile
[]) event
.data
;
44 ClientFileUploader service
= RWT
.getClient().getService(ClientFileUploader
.class);
45 // DiskFileUploadReceiver receiver = new DiskFileUploadReceiver();
46 FileUploadReceiver receiver
= new FileUploadReceiver() {
49 public void receive(InputStream stream
, FileDetails details
) throws IOException
{
50 control
.getDisplay().syncExec(() -> {
52 processUpload(stream
, details
.getFileName(), details
.getContentType());
53 } catch (IOException e
) {
54 throw new IllegalStateException("Cannot process upload of " + details
.getFileName(), e
);
59 FileUploadHandler handler
= new FileUploadHandler(receiver
);
60 // handler.setMaxFileSize( sizeLimit );
61 // handler.setUploadTimeLimit( timeLimit );
62 service
.submit(handler
.getUploadUrl(), clientFiles
);
63 // for (File file : receiver.getTargetFiles()) {
64 // paths.add(file.toPath());
68 /** Executed in UI thread */
69 protected void processUpload(InputStream in
, String fileName
, String contentType
) throws IOException
{