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 8601c727b6c..c1e4334788f 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 @@ -61,11 +61,16 @@ 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.addFileRemovedListener(event -> { eventsOutput.add("-removed"); output.add("REMOVED:" + 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 c42077e7096..0f963e65bc6 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 @@ -57,10 +57,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 @@ -110,8 +110,14 @@ public void uploadInvalidFile_fileIsRejected() throws Exception { getUpload().upload(invalidFile); + 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..1fe4d432c77 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 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/Upload.java b/vaadin-upload-flow-parent/vaadin-upload-flow/src/main/java/com/vaadin/flow/component/upload/Upload.java index 3747d77d6d9..cf973312290 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 @@ -104,13 +104,16 @@ 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); - final String eventDetailFileName = "event.detail.file.name"; getElement().addEventListener("file-remove", event -> { String detailFileName = event.getEventData() .getString(eventDetailFileName); @@ -489,9 +492,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)); } /** @@ -744,7 +751,7 @@ public boolean listenProgress() { @Override public void onProgress(StreamVariable.StreamingProgressEvent event) { upload.fireUpdateProgress(event.getBytesReceived(), - event.getContentLength()); + event.getContentLength(), event.getFileName()); } @Override