summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/ui
diff options
context:
space:
mode:
authorHenrik Paul <henrik@vaadin.com>2014-03-03 11:46:35 +0200
committerJohn Ahlroos <john@vaadin.com>2014-03-03 09:56:47 +0000
commit3798a8ab782d5e68b269692bbb784069b9312122 (patch)
tree248e2d6317f11a6906c2c13161609c118ffff8c4 /server/src/com/vaadin/ui
parent54b448d018922f6315bb756c24c6ce7feff6e14d (diff)
parent6b7ad587042d2c98c2133c93382fb5ea8cdded8c (diff)
downloadvaadin-framework-3798a8ab782d5e68b269692bbb784069b9312122.tar.gz
vaadin-framework-3798a8ab782d5e68b269692bbb784069b9312122.zip
Merge branch 'master' into grid
Change-Id: I2f1134ce1bd5e8dbb183881fc69120e964271245
Diffstat (limited to 'server/src/com/vaadin/ui')
-rw-r--r--server/src/com/vaadin/ui/Upload.java92
1 files changed, 91 insertions, 1 deletions
diff --git a/server/src/com/vaadin/ui/Upload.java b/server/src/com/vaadin/ui/Upload.java
index 98f5d2ded9..c8d9f3ff09 100644
--- a/server/src/com/vaadin/ui/Upload.java
+++ b/server/src/com/vaadin/ui/Upload.java
@@ -28,7 +28,10 @@ import com.vaadin.server.NoOutputStreamException;
import com.vaadin.server.PaintException;
import com.vaadin.server.PaintTarget;
import com.vaadin.server.StreamVariable.StreamingProgressEvent;
+import com.vaadin.shared.EventId;
import com.vaadin.shared.ui.upload.UploadClientRpc;
+import com.vaadin.shared.ui.upload.UploadServerRpc;
+import com.vaadin.util.ReflectTools;
/**
* Component for uploading files from client to server.
@@ -113,9 +116,16 @@ public class Upload extends AbstractComponent implements Component.Focusable,
* The receiver must be set before performing an upload.
*/
public Upload() {
+ registerRpc(new UploadServerRpc() {
+ @Override
+ public void change(String filename) {
+ fireEvent(new ChangeEvent(Upload.this, filename));
+ }
+ });
}
public Upload(String caption, Receiver uploadReceiver) {
+ this();
setCaption(caption);
receiver = uploadReceiver;
}
@@ -486,6 +496,42 @@ public class Upload extends AbstractComponent implements Component.Focusable,
}
/**
+ * Upload.ChangeEvent event is sent when the value (filename) of the upload
+ * changes.
+ *
+ * @since 7.2
+ */
+ public static class ChangeEvent extends Component.Event {
+
+ private final String filename;
+
+ public ChangeEvent(Upload source, String filename) {
+ super(source);
+ this.filename = filename;
+ }
+
+ /**
+ * Uploads where the event occurred.
+ *
+ * @return the Source of the event.
+ */
+ @Override
+ public Upload getSource() {
+ return (Upload) super.getSource();
+ }
+
+ /**
+ * Gets the file name.
+ *
+ * @return the filename.
+ */
+ public String getFilename() {
+ return filename;
+ }
+
+ }
+
+ /**
* Receives the events when the upload starts.
*
* @author Vaadin Ltd.
@@ -554,6 +600,25 @@ public class Upload extends AbstractComponent implements Component.Focusable,
}
/**
+ * Listener for {@link ChangeEvent}
+ *
+ * @since 7.2
+ */
+ public interface ChangeListener extends Serializable {
+
+ Method FILENAME_CHANGED = ReflectTools.findMethod(ChangeListener.class,
+ "filenameChanged", ChangeEvent.class);
+
+ /**
+ * A file has been selected but upload has not yet started.
+ *
+ * @param event
+ * the change event
+ */
+ public void filenameChanged(ChangeEvent event);
+ }
+
+ /**
* Adds the upload started event listener.
*
* @param listener
@@ -740,6 +805,27 @@ public class Upload extends AbstractComponent implements Component.Focusable,
}
/**
+ * Adds a filename change event listener
+ *
+ * @param listener
+ * the Listener to add
+ */
+ public void addChangeListener(ChangeListener listener) {
+ super.addListener(EventId.CHANGE, ChangeEvent.class, listener,
+ ChangeListener.FILENAME_CHANGED);
+ }
+
+ /**
+ * Removes a filename change event listener
+ *
+ * @param listener
+ * the listener to be removed
+ */
+ public void removeChangeListener(ChangeListener listener) {
+ super.removeListener(EventId.CHANGE, ChangeEvent.class, listener);
+ }
+
+ /**
* @deprecated As of 7.0, replaced by
* {@link #removeProgressListener(ProgressListener)}
**/
@@ -1040,7 +1126,11 @@ public class Upload extends AbstractComponent implements Component.Focusable,
@Override
public OutputStream getOutputStream() {
- OutputStream receiveUpload = receiver.receiveUpload(
+ if (getReceiver() == null) {
+ throw new IllegalStateException(
+ "Upload cannot be performed without a receiver set");
+ }
+ OutputStream receiveUpload = getReceiver().receiveUpload(
lastStartedEvent.getFileName(),
lastStartedEvent.getMimeType());
lastStartedEvent = null;