use of lucee.runtime.exp.ExpressionException in project Lucee by lucee.
the class ComponentLoader method _search.
private static Object _search(PageContext pc, PageSource loadingLocation, String rawPath, Boolean searchLocal, Boolean searchRoot, boolean executeConstr, short returnType, PageSource currPS, ImportDefintion[] importDefintions, int dialect, final boolean isExtendedComponent) throws PageException {
ConfigImpl config = (ConfigImpl) pc.getConfig();
if (dialect == CFMLEngine.DIALECT_LUCEE && !config.allowLuceeDialect())
PageContextImpl.notSupported();
boolean doCache = config.useComponentPathCache();
String sub = null;
if (returnType != RETURN_TYPE_PAGE && rawPath.indexOf(':') != -1) {
int d = rawPath.indexOf(':');
int s = rawPath.indexOf('.');
if (d > s) {
sub = rawPath.substring(d + 1);
rawPath = rawPath.substring(0, d);
}
}
// app-String appName=pc.getApplicationContext().getName();
rawPath = rawPath.trim().replace('\\', '/');
String path = (rawPath.indexOf("./") == -1) ? rawPath.replace('.', '/') : rawPath;
boolean isRealPath = !StringUtil.startsWith(path, '/');
// PageSource currPS = pc.getCurrentPageSource();
// Page currP=currPS.loadPage(pc,false);
PageSource ps = null;
CIPage page = null;
// MUSTMUST improve to handle different extensions
String pathWithCFC = path.concat("." + (dialect == CFMLEngine.DIALECT_CFML ? Constants.getCFMLComponentExtension() : Constants.getLuceeComponentExtension()));
// no cache for per application pathes
Mapping[] acm = pc.getApplicationContext().getComponentMappings();
if (!ArrayUtil.isEmpty(acm)) {
Mapping m;
for (int y = 0; y < acm.length; y++) {
m = acm[y];
ps = m.getPageSource(pathWithCFC);
page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
if (page != null) {
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
}
if (searchLocal == null)
searchLocal = Caster.toBoolean(rawPath.indexOf('.') == -1 ? true : config.getComponentLocalSearch());
if (searchRoot == null)
searchRoot = Caster.toBoolean(config.getComponentRootSearch());
// CACHE
// check local in cache
String localCacheName = null;
if (searchLocal && isRealPath && currPS != null) {
localCacheName = currPS.getDisplayPath().replace('\\', '/');
localCacheName = localCacheName.substring(0, localCacheName.lastIndexOf('/') + 1).concat(pathWithCFC);
if (doCache) {
page = config.getCachedPage(pc, localCacheName);
if (page != null)
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
// check import cache
if (doCache && isRealPath) {
ImportDefintion impDef = config.getComponentDefaultImport();
ImportDefintion[] impDefs = importDefintions == null ? EMPTY_ID : importDefintions;
int i = -1;
do {
if (impDef.isWildcard() || impDef.getName().equalsIgnoreCase(path)) {
page = config.getCachedPage(pc, "import:" + impDef.getPackageAsPath() + pathWithCFC);
if (page != null)
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
impDef = ++i < impDefs.length ? impDefs[i] : null;
} while (impDef != null);
}
if (doCache) {
// check global in cache
page = config.getCachedPage(pc, pathWithCFC);
if (page != null)
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
// search from local
if (searchLocal && isRealPath) {
// check realpath
PageSource[] arr = ((PageContextImpl) pc).getRelativePageSources(pathWithCFC);
page = toCIPage(PageSourceImpl.loadPage(pc, arr, null));
if (page != null) {
if (doCache)
config.putCachedPageSource(localCacheName, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
// search with imports
Mapping[] cMappings = config.getComponentMappings();
if (isRealPath) {
ImportDefintion impDef = config.getComponentDefaultImport();
ImportDefintion[] impDefs = importDefintions == null ? EMPTY_ID : importDefintions;
PageSource[] arr;
int i = -1;
do {
if (impDef.isWildcard() || impDef.getName().equalsIgnoreCase(path)) {
// search from local first
if (searchLocal) {
arr = ((PageContextImpl) pc).getRelativePageSources(impDef.getPackageAsPath() + pathWithCFC);
page = toCIPage(PageSourceImpl.loadPage(pc, arr, null));
if (page != null) {
if (doCache)
config.putCachedPageSource("import:" + impDef.getPackageAsPath() + pathWithCFC, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
// search mappings and webroot
page = toCIPage(PageSourceImpl.loadPage(pc, ((PageContextImpl) pc).getPageSources("/" + impDef.getPackageAsPath() + pathWithCFC), null));
if (page != null) {
String key = impDef.getPackageAsPath() + pathWithCFC;
if (doCache && !((MappingImpl) page.getPageSource().getMapping()).isAppMapping())
config.putCachedPageSource("import:" + key, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
// search component mappings
Mapping m;
for (int y = 0; y < cMappings.length; y++) {
m = cMappings[y];
ps = m.getPageSource(impDef.getPackageAsPath() + pathWithCFC);
page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
if (page != null) {
if (doCache)
config.putCachedPageSource("import:" + impDef.getPackageAsPath() + pathWithCFC, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
}
impDef = ++i < impDefs.length ? impDefs[i] : null;
} while (impDef != null);
}
String p;
if (isRealPath)
p = '/' + pathWithCFC;
else
p = pathWithCFC;
// search mappings and webroot
page = toCIPage(PageSourceImpl.loadPage(pc, ((PageContextImpl) pc).getPageSources(p), null));
if (page != null) {
String key = pathWithCFC;
if (doCache && !((MappingImpl) page.getPageSource().getMapping()).isAppMapping())
config.putCachedPageSource(key, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
// search component mappings
Mapping m;
for (int i = 0; i < cMappings.length; i++) {
m = cMappings[i];
ps = m.getPageSource(p);
page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
// recursive search
if (page == null && config.doComponentDeepSearch() && path.indexOf('/') == -1) {
ps = MappingUtil.searchMappingRecursive(m, pathWithCFC, true);
if (ps != null) {
page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
// do not cache this, it could be ambigous
if (page != null)
doCache = false;
}
}
if (page != null) {
if (doCache)
config.putCachedPageSource(pathWithCFC, page.getPageSource());
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
// search relative to active component (this get not cached because the cache get ambigous if we do)
if (searchLocal && isRealPath) {
if (loadingLocation == null) {
Component c = pc.getActiveComponent();
if (c != null)
loadingLocation = c.getPageSource();
}
if (loadingLocation != null) {
ps = loadingLocation.getRealPage(pathWithCFC);
if (ps != null) {
page = toCIPage(ps.loadPageThrowTemplateException(pc, false, (Page) null));
if (page != null) {
return returnType == RETURN_TYPE_PAGE ? page : load(pc, page, trim(path.replace('/', '.')), sub, isRealPath, returnType, isExtendedComponent, executeConstr);
}
}
}
}
// translate cfide. to org.lucee.cfml
if (StringUtil.startsWithIgnoreCase(rawPath, "cfide.")) {
String rpm = Constants.DEFAULT_PACKAGE + "." + rawPath.substring(6);
try {
return _search(pc, loadingLocation, rpm, searchLocal, searchRoot, executeConstr, returnType, currPS, importDefintions, dialect, false);
} catch (ExpressionException ee) {
return null;
// throw new ExpressionException("invalid "+toStringType(returnType)+" definition, can't find "+rawPath+" or "+rpm);
}
}
return null;
// throw new ExpressionException("invalid "+toStringType(returnType)+" definition, can't find "+toStringType(returnType)+" ["+rawPath+"]");
}
use of lucee.runtime.exp.ExpressionException in project Lucee by lucee.
the class DateTimeFormatClassic method _call.
private static String _call(PageContext pc, Object object, String mask, TimeZone tz) throws ExpressionException {
// :pc.getConfig().getLocale();
Locale locale = Locale.US;
DateTime datetime = Caster.toDate(object, true, tz, null);
if (datetime == null) {
if (object.toString().trim().length() == 0)
return "";
throw new ExpressionException("can't convert value " + object + " to a datetime value");
}
return new lucee.runtime.format.DateTimeFormat(locale).format(datetime, mask, tz);
// return new lucee.runtime.text.TimeFormat(locale).format(datetime,mask);
}
use of lucee.runtime.exp.ExpressionException in project Lucee by lucee.
the class TimeFormat method _call.
private static String _call(PageContext pc, Object object, String mask, TimeZone tz) throws ExpressionException {
// :pc.getConfig().getLocale();
Locale locale = Locale.US;
DateTime datetime = Caster.toDate(object, true, tz, null);
if (datetime == null) {
if (StringUtil.isEmpty(object, true))
return "";
throw new ExpressionException("can't convert value " + object + " to a datetime value");
}
return new lucee.runtime.format.TimeFormat(locale).format(datetime, mask, tz);
// return new lucee.runtime.text.TimeFormat(locale).format(datetime,mask);
}
use of lucee.runtime.exp.ExpressionException in project Lucee by lucee.
the class ResourceUtil method toResourceExisting.
public static Resource toResourceExisting(Config config, String path) throws ExpressionException {
path = path.replace('\\', '/');
Resource res = config.getResource(path);
if (res.exists())
return res;
throw new ExpressionException("file or directory " + path + " not exist");
}
use of lucee.runtime.exp.ExpressionException 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");
}
Aggregations