Start single sourcing file drop
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 12 Apr 2019 17:03:34 +0000 (19:03 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 12 Apr 2019 17:03:34 +0000 (19:03 +0200)
org.argeo.cms.ui/src/org/argeo/cms/ui/fs/FileDrop.java
org.argeo.eclipse.ui.rap/bnd.bnd
org.argeo.eclipse.ui.rap/pom.xml
org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java [new file with mode: 0644]
rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java [new file with mode: 0644]

index 94b2bc2cbac4b3a73a168dc6c8fca2d63c34b1f1..be36a46295d031fbf308996e493e4312f7843bb0 100644 (file)
@@ -1,71 +1,37 @@
 package org.argeo.cms.ui.fs;
 
-import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-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.argeo.eclipse.ui.specific.FileDropAdapter;
 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;
 
+/** Allows a control to receive file drops. */
 public class FileDrop {
        private final static Log log = LogFactory.getLog(FileDrop.class);
 
        public void createDropTarget(Control control) {
-               DropTarget dropTarget = new DropTarget(control, DND.DROP_MOVE | DND.DROP_COPY);
-               dropTarget.setTransfer(new Transfer[] { ClientFileTransfer.getInstance() });
-               dropTarget.addDropListener(new DropTargetAdapter() {
-                       private static final long serialVersionUID = 5361645765549463168L;
-
+               FileDropAdapter fileDropAdapter = new FileDropAdapter() {
                        @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, (ClientFile[]) event.data);
-                       }
-               });
-       }
-
-       private void handleFileDrop(Control control, ClientFile[] clientFiles) {
-               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 {
+                       protected void processUpload(InputStream in, String fileName, String contentType) {
                                if (log.isDebugEnabled())
-                                       log.debug("Process upload of " + details.getFileName() + " (" + details.getContentType() + ")");
-                               control.getDisplay()
-                                               .syncExec(() -> processUpload(stream, details.getFileName(), details.getContentType()));
+                                       log.debug("Process upload of " + fileName + " (" + contentType + ")");
+                               processUpload(in, fileName, contentType);
                        }
                };
-               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());
-//             }
+               DropTarget dropTarget = new DropTarget(control, DND.DROP_MOVE | DND.DROP_COPY);
+               fileDropAdapter.prepareDropTarget(control, dropTarget);
+       }
+
+       public void handleFileDrop(Control control, DropTargetEvent event) {
        }
 
        /** Executed in UI thread */
-       protected void processUpload(InputStream in, String fileName, String contetnType) {
+       protected void processUpload(InputStream in, String fileName, String contentType) {
 
        }
 }
index 9c15f0c2f68b7583d4716696a317dca6b51bba0c..0b6fdb5ef499f50084db111d6fdf0f1319d96465 100644 (file)
@@ -1,4 +1,5 @@
 Import-Package: org.eclipse.swt,\
- org.eclipse.jface.dialogs,\
- org.argeo.eclipse.ui.utils,\
+org.eclipse.jface.dialogs,\
+org.argeo.eclipse.ui.utils,\
+org.eclipse.swt.events,\
 *
index 769c213386f1aa2f57db410e5490c33a93d1a785..e731a721587d6283a485f84e0b9eac131495b213 100644 (file)
                        <scope>provided</scope>
                </dependency>
 
+               <!-- File upload -->
+               <dependency>
+                       <groupId>org.argeo.tp.rap.e4</groupId>
+                       <artifactId>org.eclipse.rap.filedialog</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.argeo.tp.rap.e4</groupId>
+                       <artifactId>org.eclipse.rap.fileupload</artifactId>
+                       <scope>provided</scope>
+               </dependency>
+
        </dependencies>
 </project>
\ No newline at end of file
diff --git a/org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java b/org.argeo.eclipse.ui.rap/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java
new file mode 100644 (file)
index 0000000..87d0e00
--- /dev/null
@@ -0,0 +1,67 @@
+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) {
+
+       }
+
+}
diff --git a/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java b/rcp/org.argeo.eclipse.ui.rcp/src/org/argeo/eclipse/ui/specific/FileDropAdapter.java
new file mode 100644 (file)
index 0000000..5b16d99
--- /dev/null
@@ -0,0 +1,47 @@
+package org.argeo.eclipse.ui.specific;
+
+import java.io.InputStream;
+import java.util.Arrays;
+
+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.FileTransfer;
+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[] { FileTransfer.getInstance() });
+               dropTarget.addDropListener(new DropTargetAdapter() {
+                       @Override
+                       public void dropAccept(DropTargetEvent event) {
+                               if (!FileTransfer.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) {
+               String fileList[] = null;
+               FileTransfer ft = FileTransfer.getInstance();
+               if (ft.isSupportedType(event.currentDataType)) {
+                       fileList = (String[]) event.data;
+               }
+               System.out.println(Arrays.toString(fileList));
+       }
+
+       /** Executed in UI thread */
+       protected void processUpload(InputStream in, String fileName, String contentType) {
+
+       }
+
+}