]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java
Add dependency to new project CMS UI RAP.
[lgpl/argeo-commons.git] / org.argeo.eclipse.ui.rap / src / org / argeo / eclipse / ui / specific / FileDropAdapter.java
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 /** Configures a {@link Control} to receive files drop from the client OS. */
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 // DiskFileUploadReceiver receiver = new DiskFileUploadReceiver();
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 // handler.setMaxFileSize( sizeLimit );
61 // handler.setUploadTimeLimit( timeLimit );
62 service.submit(handler.getUploadUrl(), clientFiles);
63 // for (File file : receiver.getTargetFiles()) {
64 // paths.add(file.toPath());
65 // }
66 }
67
68 /** Executed in UI thread */
69 protected void processUpload(InputStream in, String fileName, String contentType) throws IOException {
70
71 }
72
73 }