File drop callbacks throw IOException.
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / ui / fs / FileDrop.java
index 94b2bc2cbac4b3a73a168dc6c8fca2d63c34b1f1..d50b8d84de88892cf28d8c41df1f2fbef00f561d 100644 (file)
@@ -5,67 +5,34 @@ 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) throws IOException {
                                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 + ")");
+                               processFileUpload(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 processFileUpload(InputStream in, String fileName, String contentType) throws IOException {
 
        }
 }