use of lucee.runtime.PageContextImpl in project Lucee by lucee.
the class FileRead method call.
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 = ((PageContextImpl) pc).getResourceCharset().name();
return _call(pc, res, charset, Caster.toIntValue(charset));
}
return _call(pc, res, charset);
}
use of lucee.runtime.PageContextImpl in project Lucee by lucee.
the class ResourceUtil method toResourceExisting.
public static Resource toResourceExisting(PageContext pc, String path, boolean allowRealpath) throws ExpressionException {
path = path.replace('\\', '/');
Resource res = pc.getConfig().getResource(path);
if (res.exists())
return res;
else if (!allowRealpath)
throw new ExpressionException("file or directory " + path + " not exist");
if (res.isAbsolute() && res.exists()) {
return res;
}
if (StringUtil.startsWith(path, '/')) {
PageContextImpl pci = (PageContextImpl) pc;
ConfigWebImpl cwi = (ConfigWebImpl) pc.getConfig();
PageSource[] sources = cwi.getPageSources(pci, pc.getApplicationContext().getMappings(), path, false, pci.useSpecialMappings(), true);
if (!ArrayUtil.isEmpty(sources)) {
for (int i = 0; i < sources.length; i++) {
if (sources[i].exists())
return sources[i].getResource();
}
}
}
res = getRealResource(pc, path, res);
if (res.exists())
return res;
throw new ExpressionException("file or directory " + path + " not exist");
}
use of lucee.runtime.PageContextImpl in project Lucee by lucee.
the class ResourceUtil method toResourceNotExisting.
public static Resource toResourceNotExisting(PageContext pc, String destination, boolean allowRealpath, boolean checkComponentMappings) {
destination = destination.replace('\\', '/');
Resource res = pc.getConfig().getResource(destination);
if (!allowRealpath || res.exists()) {
return res;
}
boolean isUNC;
if (!(isUNC = isUNCPath(destination)) && StringUtil.startsWith(destination, '/')) {
PageContextImpl pci = (PageContextImpl) pc;
ConfigWebImpl cwi = (ConfigWebImpl) pc.getConfig();
PageSource[] sources = cwi.getPageSources(pci, pc.getApplicationContext().getMappings(), destination, false, pci.useSpecialMappings(), SystemUtil.isWindows(), checkComponentMappings);
if (!ArrayUtil.isEmpty(sources)) {
for (int i = 0; i < sources.length; i++) {
res = sources[i].getResource();
if (res != null)
return res;
}
}
// Resource res2 = pc.getPhysical(destination,SystemUtil.isWindows());
// if(res2!=null) return res2;
}
if (isUNC) {
res = pc.getConfig().getResource(destination.replace('/', '\\'));
} else if (!destination.startsWith(".."))
res = pc.getConfig().getResource(destination);
if (res != null && res.isAbsolute())
return res;
return getRealResource(pc, destination, res);
}
use of lucee.runtime.PageContextImpl in project Lucee by lucee.
the class ResourceUtil method toResourceExistingParent.
public static Resource toResourceExistingParent(PageContext pc, String destination, boolean allowRealpath) throws ExpressionException {
destination = destination.replace('\\', '/');
Resource res = pc.getConfig().getResource(destination);
// not allow realpath
if (!allowRealpath) {
if (res.exists() || parentExists(res))
return res;
throw new ExpressionException("parent directory " + res.getParent() + " for file " + destination + " doesn't exist");
}
// allow realpath
if (res.isAbsolute() && (res.exists() || parentExists(res))) {
return res;
}
if (StringUtil.startsWith(destination, '/')) {
PageContextImpl pci = (PageContextImpl) pc;
ConfigWebImpl cwi = (ConfigWebImpl) pc.getConfig();
PageSource[] sources = cwi.getPageSources(pci, pc.getApplicationContext().getMappings(), destination, false, pci.useSpecialMappings(), true);
// Resource[] reses = cwi.getPhysicalResourcesX(pc,pc.getApplicationContext().getMappings(),destination,false,pci.useSpecialMappings(),true);
if (!ArrayUtil.isEmpty(sources)) {
for (int i = 0; i < sources.length; i++) {
if (sources[i].exists() || parentExists(sources[i])) {
res = sources[i].getResource();
if (res != null)
return res;
}
}
}
}
res = getRealResource(pc, destination, res);
if (res != null && (res.exists() || parentExists(res)))
return res;
throw new ExpressionException("parent directory " + res.getParent() + " for file " + destination + " doesn't exist");
}
use of lucee.runtime.PageContextImpl in project Lucee by lucee.
the class ComponentUtil method _getComponentPropertiesClass.
private static Class _getComponentPropertiesClass(PageContext pc, Component component) throws PageException, IOException, ClassNotFoundException {
ASMProperty[] props = ASMUtil.toASMProperties(component.getProperties(false, true, false, false));
String className = getClassname(component, props);
String real = className.replace('.', '/');
Mapping mapping = component.getPageSource().getMapping();
PhysicalClassLoader cl = (PhysicalClassLoader) ((PageContextImpl) pc).getRPCClassLoader(false);
Resource classFile = cl.getDirectory().getRealResource(real.concat(".class"));
// get component class information
String classNameOriginal = component.getPageSource().getClassName();
String realOriginal = classNameOriginal.replace('.', '/');
Resource classFileOriginal = mapping.getClassRootDirectory().getRealResource(realOriginal.concat(".class"));
// load existing class when pojo is still newer than component class file
if (classFile.lastModified() >= classFileOriginal.lastModified()) {
try {
Class clazz = cl.loadClass(className);
// ClassUtil.loadInstance(clazz);
if (clazz != null && !hasChangesOfChildren(classFile.lastModified(), clazz))
return clazz;
} catch (Throwable t) {
ExceptionUtil.rethrowIfNecessary(t);
}
}
// extends
String strExt = component.getExtends();
Class<?> ext = Object.class;
if (!StringUtil.isEmpty(strExt, true)) {
ext = Caster.cfTypeToClass(strExt);
}
//
// create file
byte[] barr = ASMUtil.createPojo(real, props, ext, new Class[] { Pojo.class }, component.getPageSource().getDisplayPath());
ResourceUtil.touch(classFile);
IOUtil.copy(new ByteArrayInputStream(barr), classFile, true);
cl = (PhysicalClassLoader) ((PageContextImpl) pc).getRPCClassLoader(true);
// ClassUtil.loadInstance(cl.loadClass(className));
return cl.loadClass(className);
}
Aggregations