package railo.runtime.functions.file;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import railo.commons.io.IOUtil;
import railo.commons.io.res.Resource;
import railo.runtime.PageContext;
import railo.runtime.exp.PageException;
import railo.runtime.op.Caster;
import railo.runtime.op.Decision;
public class FileRead {
public static Object call(PageContext pc, Object path) throws PageException {
return _call(pc,Caster.toResource(pc,path,true),pc.getConfig().getResourceCharset());
}
public static Object call(PageContext pc, Object obj, Object charsetOrSize) throws PageException {
if(charsetOrSize==null) return call(pc, obj);
if(obj instanceof FileStreamWrapper) {
return _call((FileStreamWrapper)obj,Caster.toIntValue(charsetOrSize));
}
Resource res = Caster.toResource(pc,obj,true);
String charset=Caster.toString(charsetOrSize);
if(Decision.isInteger(charset)){
charset=pc.getConfig().getResourceCharset();
return _call(pc,res,charset,Caster.toIntValue(charset));
}
return _call(pc,res,charset);
}
private static Object _call(FileStreamWrapper fs, int size) throws PageException {
try {
return fs.read(size);
} catch (IOException e) {
throw Caster.toPageException(e);
}
}
private static Object _call(PageContext pc,Resource res, String charset) throws PageException {
pc.getConfig().getSecurityManager().checkFileLocation(res);
try {
return IOUtil.toString(res,charset);
} catch (IOException e) {
throw Caster.toPageException(e);
}
}
private static Object _call(PageContext pc, Resource res, String charset,int size) throws PageException {
pc.getConfig().getSecurityManager().checkFileLocation(res);
InputStream is=null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
is=res.getInputStream();
IOUtil.copy(is, baos, 0, size);
return new String(baos.toByteArray(),charset);
}
catch (IOException e) {
throw Caster.toPageException(e);
}
finally {
IOUtil.closeEL(is);
}
// TODO Auto-generated method stub
}
}