File drop callbacks throw IOException.
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 24 Oct 2019 08:22:49 +0000 (10:22 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 24 Oct 2019 08:22:49 +0000 (10:22 +0200)
org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FileDrop.java
org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java

index be36a46295d031fbf308996e493e4312f7843bb0..d50b8d84de88892cf28d8c41df1f2fbef00f561d 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.cms.ui.fs;
 
+import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.logging.Log;
@@ -17,10 +18,10 @@ public class FileDrop {
        public void createDropTarget(Control control) {
                FileDropAdapter fileDropAdapter = new FileDropAdapter() {
                        @Override
-                       protected void processUpload(InputStream in, String fileName, String contentType) {
+                       protected void processUpload(InputStream in, String fileName, String contentType) throws IOException {
                                if (log.isDebugEnabled())
                                        log.debug("Process upload of " + fileName + " (" + contentType + ")");
-                               processUpload(in, fileName, contentType);
+                               processFileUpload(in, fileName, contentType);
                        }
                };
                DropTarget dropTarget = new DropTarget(control, DND.DROP_MOVE | DND.DROP_COPY);
@@ -31,7 +32,7 @@ public class FileDrop {
        }
 
        /** Executed in UI thread */
-       protected void processUpload(InputStream in, String fileName, String contentType) {
+       protected void processFileUpload(InputStream in, String fileName, String contentType) throws IOException {
 
        }
 }
index 87d0e00c9036e9cddbdd4c4a8c1e6940e42d20db..f9ca816829f191cc00571a21955b499280a57473 100644 (file)
@@ -17,6 +17,7 @@ import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.swt.widgets.Control;
 
+/** Configures a {@link Control} to receive files drop from the client OS. */
 public class FileDropAdapter {
 
        public void prepareDropTarget(Control control, DropTarget dropTarget) {
@@ -46,8 +47,13 @@ public class FileDropAdapter {
 
                        @Override
                        public void receive(InputStream stream, FileDetails details) throws IOException {
-                               control.getDisplay()
-                                               .syncExec(() -> processUpload(stream, details.getFileName(), details.getContentType()));
+                               control.getDisplay().syncExec(() -> {
+                                       try {
+                                               processUpload(stream, details.getFileName(), details.getContentType());
+                                       } catch (IOException e) {
+                                               throw new IllegalStateException("Cannot process upload of " + details.getFileName(), e);
+                                       }
+                               });
                        }
                };
                FileUploadHandler handler = new FileUploadHandler(receiver);
@@ -60,7 +66,7 @@ public class FileDropAdapter {
        }
 
        /** Executed in UI thread */
-       protected void processUpload(InputStream in, String fileName, String contentType) {
+       protected void processUpload(InputStream in, String fileName, String contentType) throws IOException {
 
        }