package com.wcs.wcslib.vaadin.widget.multifileupload.component;
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.ui.Component;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Html5File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
/**
* Created by Sander on 10-11-2016.
*/
public class MultiUploadDropHandler extends DragAndDropWrapper implements DropHandler {
private final Collection<FilesReceivedListener> listeners = new ArrayList<>();
public MultiUploadDropHandler(Component root) {
super(root);
setDropHandler(this);
}
public void addFilesReceivedListener(FilesReceivedListener filesReceivedListener) {
listeners.add(filesReceivedListener);
}
public void removeFilesReceivedListener(FilesReceivedListener filesReceivedListener) {
listeners.remove(filesReceivedListener);
}
@Override
public void drop(DragAndDropEvent dropEvent) {
if (listeners == null || listeners.isEmpty()) {
return;
}
WrapperTransferable tr = (WrapperTransferable) dropEvent.getTransferable();
Html5File[] files = tr.getFiles();
if (files != null && files.length > 0) {
listeners.stream().forEach((filesReceivedListener) -> {
filesReceivedListener.filesReceived(Arrays.asList(files));
});
}
}
@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}
protected interface FilesReceivedListener {
void filesReceived(List<Html5File> html5Files);
}
}