package com.akjava.gwt.jszip.client; import static com.google.common.base.Preconditions.checkNotNull; import com.akjava.gwt.html5.client.download.HTML5Download; import com.akjava.gwt.html5.client.file.Blob; import com.akjava.gwt.html5.client.file.File; import com.akjava.gwt.html5.client.file.FileUploadForm; import com.akjava.gwt.html5.client.file.FileUtils; import com.akjava.gwt.html5.client.file.FileUtils.DataArrayListener; import com.akjava.gwt.html5.client.file.Uint8Array; import com.akjava.gwt.lib.client.Base64Utils; import com.akjava.gwt.lib.client.BrowserUtils; import com.akjava.gwt.lib.client.ImageElementUtils; import com.akjava.gwt.lib.client.LogUtils; import com.akjava.gwt.lib.client.BrowserUtils.LoadBinaryListener; import com.akjava.gwt.lib.client.experimental.ImageBuilder; import com.akjava.lib.common.io.FileType; import com.akjava.lib.common.utils.FileNames; import com.google.common.base.Optional; import com.google.gwt.dom.client.ImageElement; import com.google.gwt.typedarrays.shared.ArrayBuffer; import com.google.gwt.user.client.ui.Anchor; /* * somehow webpalbum has ZipUtils * TODO merge them */ public class JSZipUtils { private JSZipUtils(){} public static void loadZipFromFile(final String url,final ZipListener listener){ BrowserUtils.loadBinaryFile(url,new LoadBinaryListener() { @Override public void onLoadBinaryFile(ArrayBuffer buffer) { listener.onLoad(url,JSZip.loadFromArrayBuffer(buffer)); } @Override public void onFaild(int states, String statesText) { listener.onFaild(states, statesText); } }); } public static FileUploadForm createZipFileUploadForm(final ZipListener listener){ FileUploadForm upload=FileUtils.createSingleFileUploadForm(new DataArrayListener() { @Override public void uploaded(File file, Uint8Array array) { listener.onLoad(file.getFileName(), JSZip.loadFromArray(array)); } }); upload.setAccept(FileUploadForm.ACCEPT_ZIP); return upload; } public static void createImageFile(JSZip zip,String fileName,ImageElement imageElement){ checkNotNull(fileName,"createImagheFile:need file name"); checkNotNull(imageElement,"createImagheFile:need image element"); String dataUrl=ImageBuilder.from(imageElement).onFileName(fileName).toDataUrl(); zip.base64UrlFile(fileName, dataUrl); } public static Optional<ImageElement> getImagheFile(JSZip zip,String fileName){ checkNotNull(fileName,"getImagheFilee:need file name"); JSFile jsFile=zip.getFile(fileName); if(jsFile==null){ return Optional.absent(); } String extension=FileNames.getExtension(fileName); FileType type=FileType.getFileTypeByExtension(extension); String dataUrl=Base64Utils.toDataUrl(type.getMimeType(),jsFile.asUint8Array()); return Optional.of(ImageElementUtils.create(dataUrl)); } public static Anchor createDownloadAnchor(JSZip zip,String fileName,String downloadLabel,boolean removeOnClick){ Blob blob=zip.generateBlob(null); Anchor a=new HTML5Download().generateDownloadLink(blob,"application/zip",fileName,downloadLabel,removeOnClick); return a; } public static interface ZipListener{ public void onLoad(String name,JSZip zip); public void onFaild(int states,String statesText); } }