package com.akjava.gwt.html5.client.file;
import java.util.ArrayList;
import java.util.List;
import com.akjava.gwt.html5.client.file.ui.DropVerticalPanelBase;
import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import com.google.gwt.dom.client.Document;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Panel;
public class FileUploadForm extends FormPanel{
private FileUpload fileUpload;
private DropVerticalPanelBase dropPanel;
private boolean showDragOverBorder;
public static String ACCEPT_IMAGE_JPEG="image/jpeg";
public static String ACCEPT_IMAGE_PNG="image/png";
public static String ACCEPT_IMAGE_GIF="image/gif";
public static String ACCEPT_IMAGE="image/*";
public static String ACCEPT_AUDIO="audio/*";
public static String ACCEPT_VIDEO="video/*";
public static String ACCEPT_ZIP=".zip";
public static String ACCEPT_TXT=".txt";
public static String ACCEPT_JSON=".json";
public static String ACCEPT_CSV=".csv";
public static String ACCEPT_JAVASCRIPT=".js,.json";
public boolean isShowDragOverBorder() {
return showDragOverBorder;
}
/**
* show border when file dragging to detect which area is target.(default css-name is html5dragOverBorder)
* @param showDragOverBorder
*/
public void setShowDragOverBorder(boolean showDragOverBorder) {
this.showDragOverBorder = showDragOverBorder;
}
/**
* don't add this directlly panel ,reset would not work
* @return
*/
public FileUpload getFileUpload() {
return fileUpload;
}
public void setFileUpload(FileUpload fileUpload) {
this.fileUpload = fileUpload;
}
public void setEnabled(boolean bool){
fileUpload.setEnabled(bool);
}
/**
* set accept file like image/*
* .zip
* @param accept
*/
public FileUploadForm setAccept(String accept){
fileUpload.getElement().setAttribute("accept", accept);
return this;
}
public FileUploadForm setAccept(String... accepts){
fileUpload.getElement().setAttribute("accept", Joiner.on(",").join(accepts));
return this;
}
public FileUploadForm setAccept(List<String> accepts){
fileUpload.getElement().setAttribute("accept", Joiner.on(",").join(accepts));
return this;
}
public FileUploadForm insertTo(Panel panel){
panel.add(this);
return this;
}
public FileUploadForm(){
super(Document.get().createFormElement(),false);
fileUpload = new FileUpload();
dropPanel = new DropVerticalPanelBase();
dropPanel.setBorderWidth(0);
add(dropPanel);
dropPanel.add(fileUpload);
dropPanel.setStylePrimaryName("html5dragOverBorder");
}
public void setMultiple(boolean bool){
if(bool){
fileUpload.getElement().setAttribute("multiple","multiple");
}else{
fileUpload.getElement().removeAttribute("multiple");
}
}
public DropVerticalPanelBase getDropPanel(){
return dropPanel;
}
@Override
public void setTitle(String title) {
fileUpload.setTitle(title);
}
/*
* basically accept start with . like .jpg.but this set only extension name for compatible others.
*/
public void setAcceptByExtension(List<String> supportExtensions) {
List<String> accepts=new ArrayList<String>();
for(String extension:supportExtensions){
if(!extension.startsWith(".")){
extension="."+extension;
}
if(!extension.isEmpty()){
accepts.add(extension);
}
}
setAccept(accepts);
}
}