package abs.fli.java.io;
import java.util.Arrays;
import ABS.StdLib.List;
import FLI.FileUtils.File;
import FLI.FileUtils.FileHandler_c;
import FLI.FileUtils.File_File;
import FLI.FileUtils.filePath_f;
import abs.backend.java.lib.types.ABSBool;
import abs.backend.java.lib.types.ABSString;
import abs.backend.java.lib.types.ABSUnit;
import abs.backend.java.lib.types.ABSValue;
import abs.fli.java.CollectionUtil;
import abs.fli.java.Fun;
import abs.fli.java.PrimitiveUtil;
/**
* An implementation of FLI.FileUtils.FileHandler
*
* @author pwong
*
*/
public class FileHandler extends FileHandler_c {
private final String sep = java.io.File.pathSeparator;
private final CollectionUtil cutil = new CollectionUtil();
private final PrimitiveUtil putil = new PrimitiveUtil();
private final Fun<java.io.File,File> toFile = new Fun<java.io.File,File>() {
public File evaluate(java.io.File a) {
return new File_File(putil.convert(a.getAbsolutePath()));
}
};
private java.io.File file;
public ABSUnit fli_setFileName(ABSString f) {
file = new java.io.File(f.getString());
return ABSUnit.UNIT;
}
public ABSUnit fli_setFile(File f) {
file = file(f);
return ABSUnit.UNIT;
}
public ABSUnit fli_setFileAt(File parent, ABSString name) {
file = new java.io.File(file(parent),name.getString());
return ABSUnit.UNIT;
}
public ABSBool fli_canRead() {
return putil.convert(file.canRead());
}
public ABSBool fli_canWrite() {
return putil.convert(file.canWrite());
}
public ABSBool fli_delete() {
return putil.convert(file.delete());
}
public ABSBool fli_isFile() {
return putil.convert(file.isFile());
}
public ABSBool fli_isDirectory() {
return putil.convert(file.isDirectory());
}
public ABSBool fli_renameTo(File dest) {
return putil.convert(file.renameTo(file(dest)));
}
public List<File> fli_listFiles() {
return cutil.convert(toFile,Arrays.asList(file.listFiles()));
}
public ABSString fli_getName() {
return putil.convert(file.getName());
}
public ABSString fli_getParent() {
return putil.convert(file.getParent());
}
public ABSString fli_getAbsolutePath() {
return putil.convert(file.getAbsolutePath());
}
public ABSBool fli_mkdir() {
return putil.convert(file.mkdir());
}
public ABSBool fli_createNewFile() {
try {
return putil.convert(file.createNewFile());
} catch (Exception e) {
return ABSBool.FALSE;
}
}
java.io.File getInternalFile() {
return file;
}
private java.io.File file(File f) {
return new java.io.File(name(f));
}
private String name(File f) {
StringBuilder builder = new StringBuilder();
for (ABSValue value : cutil.convert(filePath_f.apply(f))) {
if (value instanceof ABSString) {
builder.append(((ABSString) value).getString()).append(sep);
}
}
return builder.substring(0, builder.length()-1).toString();
}
}