package com.vaadin.tests.dd;
import java.io.OutputStream;
import org.apache.commons.io.output.NullOutputStream;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.server.StreamVariable;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.DragAndDropWrapper.WrapperTransferable;
import com.vaadin.ui.Html5File;
import com.vaadin.ui.Label;
public class DragAndDropFiles extends TestBase {
@Override
protected void setup() {
CssLayout cssLayout = new CssLayout() {
@Override
protected String getCss(Component c) {
return "display: block; padding:20px; border: 2px dotted black; background: #aaa;";
}
};
Component l = new Label("Drag file on me");
l.setSizeUndefined();
cssLayout.addComponent(l);
DragAndDropWrapper dragAndDropWrapper = new DragAndDropWrapper(
cssLayout);
dragAndDropWrapper.setSizeUndefined();
dragAndDropWrapper.setDropHandler(new DropHandler() {
@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}
@Override
public void drop(DragAndDropEvent event) {
WrapperTransferable transferable = (WrapperTransferable) event
.getTransferable();
Html5File[] files = transferable.getFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
Html5File file = files[i];
// Max 1 MB files are uploaded
if (file.getFileSize() > 1024 * 1024) {
getMainWindow()
.showNotification(
"File "
+ file.getFileName()
+ " was too large, not transferred to the server side.");
continue;
}
StreamVariable streamVariable = new StreamVariable() {
@Override
public OutputStream getOutputStream() {
return new NullOutputStream();
}
@Override
public boolean listenProgress() {
return true;
}
@Override
public void onProgress(StreamingProgressEvent event) {
System.err.println("Progress"
+ event.getBytesReceived());
}
@Override
public void streamingStarted(
StreamingStartEvent event) {
getMainWindow().showNotification(
"Started uploading "
+ event.getFileName());
}
@Override
public void streamingFinished(
StreamingEndEvent event) {
getMainWindow().showNotification(
"Finished uploading "
+ event.getFileName());
}
@Override
public void streamingFailed(
StreamingErrorEvent event) {
getMainWindow().showNotification(
"Failed uploading "
+ event.getFileName());
}
@Override
public boolean isInterrupted() {
return false;
}
};
file.setStreamVariable(streamVariable);
}
}
}
});
addComponent(dragAndDropWrapper);
}
/*
* TODO implement 'handbrake' for testing, progresss listener, interrupting.
*/
@Override
protected String getDescription() {
return "Should work. Over 1 MB files will not be posted. TODO implement 'handbrake' for testing, progresss listener, interrupting.";
}
@Override
protected Integer getTicketNumber() {
return null;
}
}