package com.akjava.gwt.html5.client.download;
import com.akjava.gwt.html5.client.file.Blob;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Anchor;
public class HTML5Download implements FileDownload {
//TODO rename or remove,here is strange location
public native final DownloadURL URL()/*-{
return window.webkitURL || window.URL;
}-*/;
//for implement FileDownload
private static HTML5Download html5download=new HTML5Download();
private DownloadURL windowURL;
public static HTML5Download get(){
return html5download;
}
public HTML5Download(){
windowURL=DownloadURL.get();
}
public String createObjectURL(Blob blob){
return windowURL.createObjectURL(blob);
}
/**
* @deprecated
* @return
*/
public native final DownloadBlobBuilder BlobBuilder()/*-{
$wnd.BlobBuilder= $wnd.BlobBuilder || $wnd.WebKitBlobBuilder ||
$wnd.MozBlobBuilder;
return new $wnd.BlobBuilder();
}-*/;
/**
* IE not support this use generateDownloadLink
*/
public Anchor generateTextDownloadLink(String text,String fileName,String anchorText){
return generateTextDownloadLink(text,fileName,anchorText,false);
}
/**
* IE not support this use generateDownloadLink
*/
public Anchor generateTextDownloadLink(String text,String fileName,String anchorText,boolean autoRemove){
String mimeType="text/plain;charset=UTF-8";
/*
DownloadBlobBuilder bb=BlobBuilder();
bb.append(text);
*/
final Anchor link=new Anchor(anchorText);
String url=windowURL.createObjectURL(Blob.createBlob(text));
link.setHref(url);
link.getElement().setAttribute("download", fileName);
link.getElement().setAttribute("dataset.downloadurl", mimeType+":"+fileName+":"+url);
if(autoRemove){
link.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
link.removeFromParent();
}
});
}
return link;
}
/**
* IE not support this use generateDownloadLink
*/
/**
* not tested yet
* @param text
* @param mimeType
* @param fileName
* @param anchorText
* @param autoRemove
* @return
*/
public Anchor generateTextDownloadLink(String text,String mimeType,String fileName,String anchorText,boolean autoRemove){
final Anchor link=new Anchor(anchorText);
String url=windowURL.createObjectURL(Blob.createBlob(text,mimeType));
link.setHref(url);
link.getElement().setAttribute("download", fileName);
link.getElement().setAttribute("dataset.downloadurl", mimeType+":"+fileName+":"+url);
if(autoRemove){
link.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
link.removeFromParent();
}
});
}
return link;
}
/**
* IE not support this use generateDownloadLink
*/
//TODO support it
public Anchor generateBase64DownloadLink(String urlData,String mimeType,String fileName,String anchorText,boolean autoRemove){
final Anchor link=new Anchor(anchorText);
String url=windowURL.createObjectURL(Blob.createBase64Blob(urlData,mimeType));
//String url=URL().createObjectURL(bb.getBlob(mimeType));
link.setHref(url);
link.getElement().setAttribute("download", fileName);
link.getElement().setAttribute("dataset.downloadurl", mimeType+":"+fileName+":"+url);
if(autoRemove){
link.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
link.removeFromParent();
}
});
}
return link;
}
/**
* if you would like to support IE,keep blob in field.
*/
//blob have mimetype?
public Anchor generateDownloadLink(Blob blob,String mimeType,String fileName,String anchorText){
return generateDownloadLink(blob,mimeType,fileName,anchorText,false);
}
public Anchor generateDownloadLink(Blob blob,String mimeType,String fileName,String anchorText,boolean autoRemove){
final Anchor link=new Anchor(anchorText);
String url=windowURL.createObjectURL(blob);
link.setHref(url);
link.getElement().setAttribute("download", fileName);
link.getElement().setAttribute("dataset.downloadurl", mimeType+":"+fileName+":"+url);
if(autoRemove){
link.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
link.removeFromParent();
}
});
}
return link;
}
}