package com.akjava.gwt.html5.client.file.ui;
import com.akjava.gwt.html5.client.file.File;
import com.akjava.gwt.html5.client.file.FileHandler;
import com.akjava.gwt.html5.client.file.FileReader;
import com.akjava.gwt.html5.client.file.Uint8Array;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.gwt.dom.client.Style.Unit;
/*
* this is usefull when do nothing drop rootPanel
*/
public abstract class DropDockDataArrayRootPanel extends DropDockRootPanel{
public DropDockDataArrayRootPanel(Unit unit,boolean addRootLayoutPanel) {
super(unit,addRootLayoutPanel);
}
public DropDockDataArrayRootPanel() {
super(Unit.PX,false);
}
private Predicate<File> filePredicate;
public Predicate<File> getFilePredicate() {
return filePredicate;
}
public void setFilePredicate(Predicate<File> filePredicate) {
this.filePredicate = filePredicate;
}
@Override
public void callback(final File file, final String parent) {
if(file==null){
return;
}
if(filePredicate!=null && !filePredicate.apply(file)){
return;
}
final FileReader reader = FileReader.createFileReader();
reader.setOnLoad(new FileHandler() {
@Override
public void onLoad() {
Uint8Array dataUrl=reader.getResultAsBuffer();
loadFile(parent,Optional.fromNullable(file), dataUrl);
}
});
if(file!=null){
reader.readAsArrayBuffer(file);
}
}
/*
* if you'd like to know load all end.check lastmodifiedtime each loadfile and call timer after 1 second.and compare and decide end or not
*/
public abstract void loadFile(final String pareht,final Optional<File> optional,final Uint8Array array);
}