]> source.dussan.org Git - vaadin-framework.git/commitdiff
Poll server for changes at the end of each file upload (#9300)
authorAdam Wagner <wbadam@users.noreply.github.com>
Thu, 11 May 2017 13:49:19 +0000 (16:49 +0300)
committerPekka Hyvönen <pekka@vaadin.com>
Thu, 11 May 2017 13:49:19 +0000 (16:49 +0300)
* Poll server for changes at the end of each file upload

client/src/main/java/com/vaadin/client/extensions/FileDropTargetConnector.java
server/src/main/java/com/vaadin/ui/FileDropTarget.java
shared/src/main/java/com/vaadin/shared/ui/dnd/FileDropTargetRpc.java

index f496e90d7fedc8b1f664756e10adaa4bdf60a5cd..df236b607265cc6e8dbb71d8f8f65c2487cb802c 100644 (file)
@@ -90,6 +90,8 @@ public class FileDropTargetConnector extends DropTargetExtensionConnector {
                 FileUploadXHR xhr = (FileUploadXHR) FileUploadXHR.create();
                 xhr.setOnReadyStateChange(xmlHttpRequest -> {
                     if (xmlHttpRequest.getReadyState() == XMLHttpRequest.DONE) {
+                        // Poll server for changes
+                        getRpcProxy(FileDropTargetRpc.class).poll();
                         uploading = false;
                         uploadNextFile();
                         xmlHttpRequest.clearOnReadyStateChange();
index 654563dbd0abebc4271416323d672b7a9ede0435..831d6723d93e23e0154ad0dbe681977a909d5413 100644 (file)
@@ -30,6 +30,7 @@ import com.vaadin.shared.ApplicationConstants;
 import com.vaadin.shared.ui.dnd.FileDropTargetClientRpc;
 import com.vaadin.shared.ui.dnd.FileDropTargetRpc;
 import com.vaadin.shared.ui.dnd.FileDropTargetState;
+import com.vaadin.shared.ui.dnd.FileParameters;
 
 /**
  * Extension to add drop target functionality to a widget for accepting and
@@ -68,24 +69,31 @@ public class FileDropTarget<T extends AbstractComponent> extends
     protected void registerDropTargetRpc(T target) {
         super.registerDropTargetRpc(target);
 
-        registerRpc((FileDropTargetRpc) fileParams -> {
+        registerRpc(new FileDropTargetRpc() {
+            @Override
+            public void drop(Map<String, FileParameters> fileParams) {
+                List<Html5File> files = new ArrayList<>();
+                Map<String, String> urls = new HashMap<>();
 
-            List<Html5File> files = new ArrayList<>();
-            Map<String, String> urls = new HashMap<>();
+                fileParams.forEach((id, fileParameters) -> {
+                    Html5File html5File = new Html5File(fileParameters.getName(),
+                            fileParameters.getSize(), fileParameters.getMime());
+                    String url = createUrl(html5File, id);
 
-            fileParams.forEach((id, fileParameters) -> {
-                Html5File html5File = new Html5File(fileParameters.getName(),
-                        fileParameters.getSize(), fileParameters.getMime());
-                String url = createUrl(html5File, id);
+                    files.add(html5File);
+                    urls.put(id, url);
+                });
 
-                files.add(html5File);
-                urls.put(id, url);
-            });
+                getRpcProxy(FileDropTargetClientRpc.class).sendUploadUrl(urls);
 
-            getRpcProxy(FileDropTargetClientRpc.class).sendUploadUrl(urls);
+                FileDropEvent<T> event = new FileDropEvent<>(target, files);
+                fileDropHandler.drop(event);
+            }
 
-            FileDropEvent<T> event = new FileDropEvent<>(target, files);
-            fileDropHandler.drop(event);
+            @Override
+            public void poll() {
+                // Polling server for changes after upload finished
+            }
         });
     }
 
index fd290a41f5a9b2005a413d8ef8eff0f08ea609b8..521f3ec7e6b9764ba4ec2bbd9f5961efefdaa147 100644 (file)
@@ -34,4 +34,9 @@ public interface FileDropTargetRpc extends ServerRpc {
      *         Generated file IDs and file parameters of dropped files.
      */
     public void drop(Map<String, FileParameters> fileParams);
+
+    /**
+     * Called to poll the server for changes when the upload is complete.
+     */
+    public void poll();
 }