1 package org.argeo.eclipse.ui.specific;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
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;
19
20
21 public class FileDropAdapter {
22
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;
27
28 @Override
29 public void dropAccept(DropTargetEvent event) {
30 if (!ClientFileTransfer.getInstance().isSupportedType(event.currentDataType)) {
31 event.detail = DND.DROP_NONE;
32 }
33 }
34
35 @Override
36 public void drop(DropTargetEvent event) {
37 handleFileDrop(control, event);
38 }
39 });
40 }
41
42 public void handleFileDrop(Control control, DropTargetEvent event) {
43 ClientFile[] clientFiles = (ClientFile[]) event.data;
44 ClientFileUploader service = RWT.getClient().getService(ClientFileUploader.class);
45
46 FileUploadReceiver receiver = new FileUploadReceiver() {
47
48 @Override
49 public void receive(InputStream stream, FileDetails details) throws IOException {
50 control.getDisplay().syncExec(() -> {
51 try {
52 processUpload(stream, details.getFileName(), details.getContentType());
53 } catch (IOException e) {
54 throw new IllegalStateException("Cannot process upload of " + details.getFileName(), e);
55 }
56 });
57 }
58 };
59 FileUploadHandler handler = new FileUploadHandler(receiver);
60
61
62 service.submit(handler.getUploadUrl(), clientFiles);
63
64
65
66 }
67
68
69 protected void processUpload(InputStream in, String fileName, String contentType) throws IOException {
70
71 }
72
73 }