package com.akjava.gwt.lib.client.experimental;
import static com.google.common.base.Preconditions.checkNotNull;
import com.akjava.gwt.html5.client.file.Blob;
import com.akjava.gwt.html5.client.file.FileIOUtils;
import com.akjava.gwt.html5.client.file.FileIOUtils.MakeDirectoryCallback;
import com.akjava.gwt.html5.client.file.FileIOUtils.ReadStringCallback;
import com.akjava.gwt.html5.client.file.FileIOUtils.RemoveCallback;
import com.akjava.gwt.html5.client.file.FileIOUtils.WriteCallback;
import com.akjava.lib.common.utils.FileNames;
import com.akjava.lib.common.utils.StringUtils;
import com.google.gwt.user.client.Window;
public class FileSystemTextDataControler{
private String rootDirectory;
public FileSystemTextDataControler(String rootDirectory){
checkNotNull(rootDirectory);
if(rootDirectory.endsWith("/")){
rootDirectory=StringUtils.chomp(rootDirectory);//
}
this.rootDirectory=rootDirectory;
}
public void initialize(MakeDirectoryCallback callback){
checkNotNull(callback);
FileIOUtils.makeDirectory(true, rootDirectory, callback);
}
public void addDirectory(MakeDirectoryCallback callback){
checkNotNull(callback);
long t=System.currentTimeMillis();
FileIOUtils.makeDirectory(true, rootDirectory+"/"+t, callback);
}
public void makeDirectory(String dirName,MakeDirectoryCallback callback){
checkNotNull(callback);
long t=System.currentTimeMillis();
FileIOUtils.makeDirectory(true, rootDirectory+"/"+dirName, callback);
}
public void getDirectory(String name,MakeDirectoryCallback callback){
checkNotNull(callback);
checkNotNull(name);
FileIOUtils.getDirectory(true, rootDirectory+"/"+name, callback);
}
public void addData(String text,WriteCallback callback){
checkNotNull(text);
checkNotNull(callback);
long t=System.currentTimeMillis();
FileIOUtils.writeFile(true, rootDirectory+"/"+t, text, callback,false);
}
public void updateData(long time,String text,WriteCallback callback){
checkNotNull(text);
checkNotNull(callback);
FileIOUtils.writeFile(true, rootDirectory+"/"+time, text, callback,false);
}
public void updateData(String fileName,String text,WriteCallback callback){
checkNotNull(text);
checkNotNull(callback);
checkNotNull(fileName);
FileIOUtils.writeFile(true, rootDirectory+"/"+fileName, text, callback,false);
}
public void updateData(String fileName,Blob blob,WriteCallback callback){
checkNotNull(blob);
checkNotNull(callback);
checkNotNull(fileName);
FileIOUtils.writeFile(true, rootDirectory+"/"+fileName, blob, callback);
}
public void removeData(long time,RemoveCallback callback){
checkNotNull(callback);
FileIOUtils.removeFile(true, rootDirectory+"/"+time, callback);
}
public void removeData(String fileName,RemoveCallback callback){
checkNotNull(callback,"callback is null");
checkNotNull(fileName,"filename is null");
FileIOUtils.removeFile(true, rootDirectory+"/"+fileName, callback);
}
public void removeDirectory(String fileName,RemoveCallback callback){
checkNotNull(callback);
checkNotNull(fileName);
FileIOUtils.removeDirectoryRecursively(true, rootDirectory+"/"+fileName, callback);
}
public String getFilePath(String path){
checkNotNull(path);
return rootDirectory+"/"+FileNames.removeStartWithSeparator(path, '/');
}
public void readText(String fileName,ReadStringCallback callback){
checkNotNull(fileName);
checkNotNull(callback);
FileIOUtils.readFileAsString(true, rootDirectory+"/"+FileNames.removeStartWithSeparator(fileName, '/'), callback);
}
public void writeText(String fileName,String text,WriteCallback callback){
checkNotNull(fileName);
checkNotNull(callback);
FileIOUtils.writeFile(true, rootDirectory+"/"+FileNames.removeStartWithSeparator(fileName, '/'), text, callback,false);
}
public String getRootPersistentUrl(){
String url="filesystem:"+Window.Location.getProtocol()+"//"+Window.Location.getHost()+"/persistent/";
return url;
}
public String getRootTemporalytUrl(){
String url="filesystem:"+Window.Location.getProtocol()+"//"+Window.Location.getHost()+"/temporary/";
return url;
}
public String getUrl(String path){
return getRootPersistentUrl()+getFilePath(path);
}
}