+package org.argeo.eclipse.ui.specific;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.eclipse.rap.fileupload.FileDetails;
+import org.eclipse.rap.fileupload.FileUploadHandler;
+import org.eclipse.rap.fileupload.FileUploadReceiver;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.client.ClientFile;
+import org.eclipse.rap.rwt.client.service.ClientFileUploader;
+import org.eclipse.rap.rwt.dnd.ClientFileTransfer;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTarget;
+import org.eclipse.swt.dnd.DropTargetAdapter;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Control;
+
+public class FileDropAdapter {
+
+ public void prepareDropTarget(Control control, DropTarget dropTarget) {
+ dropTarget.setTransfer(new Transfer[] { ClientFileTransfer.getInstance() });
+ dropTarget.addDropListener(new DropTargetAdapter() {
+ private static final long serialVersionUID = 5361645765549463168L;
+
+ @Override
+ public void dropAccept(DropTargetEvent event) {
+ if (!ClientFileTransfer.getInstance().isSupportedType(event.currentDataType)) {
+ event.detail = DND.DROP_NONE;
+ }
+ }
+
+ @Override
+ public void drop(DropTargetEvent event) {
+ handleFileDrop(control, event);
+ }
+ });
+ }
+
+ public void handleFileDrop(Control control, DropTargetEvent event) {
+ ClientFile[] clientFiles = (ClientFile[]) event.data;
+ ClientFileUploader service = RWT.getClient().getService(ClientFileUploader.class);
+// DiskFileUploadReceiver receiver = new DiskFileUploadReceiver();
+ FileUploadReceiver receiver = new FileUploadReceiver() {
+
+ @Override
+ public void receive(InputStream stream, FileDetails details) throws IOException {
+ control.getDisplay()
+ .syncExec(() -> processUpload(stream, details.getFileName(), details.getContentType()));
+ }
+ };
+ FileUploadHandler handler = new FileUploadHandler(receiver);
+// handler.setMaxFileSize( sizeLimit );
+// handler.setUploadTimeLimit( timeLimit );
+ service.submit(handler.getUploadUrl(), clientFiles);
+// for (File file : receiver.getTargetFiles()) {
+// paths.add(file.toPath());
+// }
+ }
+
+ /** Executed in UI thread */
+ protected void processUpload(InputStream in, String fileName, String contentType) {
+
+ }
+
+}