From 0cef691e2165696be60e4e5b7a256d25c4cbb734 Mon Sep 17 00:00:00 2001 From: ugur-vaadin Date: Thu, 30 Nov 2023 01:36:59 +0200 Subject: [PATCH] feat: add file name to progress and file rejected listeners --- .../component/upload/tests/UploadView.java | 7 ++++++- .../flow/component/upload/tests/UploadIT.java | 13 +++++++----- .../component/upload/FileRejectedEvent.java | 19 +++++++++++++++-- .../component/upload/ProgressUpdateEvent.java | 19 ++++++++++++++++- .../vaadin/flow/component/upload/Upload.java | 21 +++++++++++-------- 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/main/java/com/vaadin/flow/component/upload/tests/UploadView.java b/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/main/java/com/vaadin/flow/component/upload/tests/UploadView.java index 01e48e99ee8..561c61f6523 100644 --- a/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/main/java/com/vaadin/flow/component/upload/tests/UploadView.java +++ b/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/main/java/com/vaadin/flow/component/upload/tests/UploadView.java @@ -60,7 +60,12 @@ private void createSimpleUpload() { eventsOutput.add("-succeeded"); }); upload.addAllFinishedListener(event -> eventsOutput.add("-finished")); - upload.addFileRejectedListener(event -> eventsOutput.add("-rejected")); + upload.addFileRejectedListener(event -> { + eventsOutput.add("-rejected"); + output.add("REJECTED:" + event.getFileName()); + }); + upload.addProgressListener( + event -> output.add("PROGRESS:" + event.getFileName())); NativeButton clearFileListBtn = new NativeButton("Clear file list", e -> upload.clearFileList()); diff --git a/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/test/java/com/vaadin/flow/component/upload/tests/UploadIT.java b/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/test/java/com/vaadin/flow/component/upload/tests/UploadIT.java index 0461b459028..47b92461c15 100644 --- a/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/test/java/com/vaadin/flow/component/upload/tests/UploadIT.java +++ b/vaadin-upload-flow-parent/vaadin-upload-flow-integration-tests/src/test/java/com/vaadin/flow/component/upload/tests/UploadIT.java @@ -53,10 +53,10 @@ public void testUploadAnyFile() throws Exception { String content = uploadOutput.getText(); - String expectedContent = tempFile.getName() + getTempFileContents(); - - Assert.assertEquals("Upload content does not match expected", - expectedContent, content); + Assert.assertTrue("Upload content does not contain file details", + content.contains(tempFile.getName() + getTempFileContents())); + Assert.assertTrue("Progress update event was not fired properly", + content.contains("PROGRESS:" + tempFile.getName())); } @Test @@ -114,9 +114,12 @@ public void uploadInvalidFile_fileIsRejected() throws Exception { WebElement eventsOutput = getDriver() .findElement(By.id("test-events-output")); - Assert.assertEquals("Invalid file was not rejected", "-rejected", eventsOutput.getText()); + + WebElement uploadOutput = getDriver().findElement(By.id("test-output")); + Assert.assertTrue("Rejected file name was incorrect", uploadOutput + .getText().contains("REJECTED:" + invalidFile.getName())); } @Test diff --git a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/FileRejectedEvent.java b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/FileRejectedEvent.java index 784e36fda42..274d3126295 100644 --- a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/FileRejectedEvent.java +++ b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/FileRejectedEvent.java @@ -25,7 +25,9 @@ */ public class FileRejectedEvent extends ComponentEvent { - private String errorMessage; + private final String fileName; + + private final String errorMessage; /** * Creates a new event using the given source and indicator whether the @@ -35,10 +37,14 @@ public class FileRejectedEvent extends ComponentEvent { * the source component * @param errorMessage * the error message + * @param fileName + * the rejected file name */ - public FileRejectedEvent(Upload source, String errorMessage) { + public FileRejectedEvent(Upload source, String errorMessage, + String fileName) { super(source, true); this.errorMessage = errorMessage; + this.fileName = fileName; } /** @@ -49,4 +55,13 @@ public FileRejectedEvent(Upload source, String errorMessage) { public String getErrorMessage() { return errorMessage; } + + /** + * Get the file name. + * + * @return file name + */ + public String getFileName() { + return fileName; + } } diff --git a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/ProgressUpdateEvent.java b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/ProgressUpdateEvent.java index 2eeee24b763..5bf06f2f029 100644 --- a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/ProgressUpdateEvent.java +++ b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/ProgressUpdateEvent.java @@ -34,6 +34,11 @@ public class ProgressUpdateEvent extends ComponentEvent { */ private final long contentLength; + /** + * Name of file currently being uploaded + */ + private final String fileName; + /** * Event constructor method to construct a new progress event. * @@ -43,12 +48,15 @@ public class ProgressUpdateEvent extends ComponentEvent { * bytes transferred * @param contentLength * total size of file currently being uploaded, -1 if unknown + * @param fileName + * name of file currently being uploaded */ public ProgressUpdateEvent(Upload source, long readBytes, - long contentLength) { + long contentLength, String fileName) { super(source, false); this.readBytes = readBytes; this.contentLength = contentLength; + this.fileName = fileName; } /** @@ -77,4 +85,13 @@ public long getReadBytes() { public long getContentLength() { return contentLength; } + + /** + * Get file name. + * + * @return file name + */ + public String getFileName() { + return fileName; + } } diff --git a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/Upload.java b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/Upload.java index 1a3470ee6cc..29cd7f7f613 100644 --- a/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/Upload.java +++ b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/Upload.java @@ -22,14 +22,11 @@ import java.util.Deque; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; import java.util.stream.IntStream; import com.vaadin.flow.component.AttachEvent; import com.vaadin.flow.component.Component; -import com.vaadin.flow.component.ComponentEvent; import com.vaadin.flow.component.ComponentEventListener; -import com.vaadin.flow.component.EventData; import com.vaadin.flow.component.HasSize; import com.vaadin.flow.component.HasStyle; import com.vaadin.flow.component.Tag; @@ -40,7 +37,6 @@ import com.vaadin.flow.component.shared.SlotUtils; import com.vaadin.flow.component.html.Span; import com.vaadin.flow.dom.DomEventListener; -import com.vaadin.flow.dom.Element; import com.vaadin.flow.function.SerializableConsumer; import com.vaadin.flow.internal.JsonSerializer; import com.vaadin.flow.server.NoInputStreamException; @@ -108,11 +104,14 @@ public UploadIcon() { */ public Upload() { final String eventDetailError = "event.detail.error"; + final String eventDetailFileName = "event.detail.file.name"; getElement().addEventListener("file-reject", event -> { String detailError = event.getEventData() .getString(eventDetailError); - fireEvent(new FileRejectedEvent(this, detailError)); - }).addEventData(eventDetailError); + String detailFileName = event.getEventData() + .getString(eventDetailFileName); + fireEvent(new FileRejectedEvent(this, detailError, detailFileName)); + }).addEventData(eventDetailError).addEventData(eventDetailFileName); // If client aborts upload mark upload as interrupted on server also getElement().addEventListener("upload-abort", @@ -486,9 +485,13 @@ private void fireAllFinish() { * bytes received so far * @param contentLength * actual size of the file being uploaded, if known + * @param contentLength + * name of the file being uploaded */ - protected void fireUpdateProgress(long totalBytes, long contentLength) { - fireEvent(new ProgressUpdateEvent(this, totalBytes, contentLength)); + protected void fireUpdateProgress(long totalBytes, long contentLength, + String fileName) { + fireEvent(new ProgressUpdateEvent(this, totalBytes, contentLength, + fileName)); } /** @@ -729,7 +732,7 @@ public boolean listenProgress() { @Override public void onProgress(StreamVariable.StreamingProgressEvent event) { upload.fireUpdateProgress(event.getBytesReceived(), - event.getContentLength()); + event.getContentLength(), event.getFileName()); } @Override