use of lucee.runtime.PageSource 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.PageSource in project Lucee by lucee.
the class ComponentListPackage method _call.
private static Set<String> _call(PageContext pc, String packageName) throws IOException, ApplicationException {
PageContextImpl pci = (PageContextImpl) pc;
ConfigWebImpl config = (ConfigWebImpl) pc.getConfig();
Set<String> rtn = null;
// var SEP=server.separator.file;
// get enviroment configuration
boolean searchLocal = packageName.indexOf('.') == -1 ? true : config.getComponentLocalSearch();
boolean searchRoot = config.getComponentRootSearch();
String path = StringUtil.replace(packageName, ".", File.separator, false);
// search local
if (searchLocal) {
PageSource ps = pci.getRelativePageSourceExisting(path);
if (ps != null) {
Mapping mapping = ps.getMapping();
String _path = ps.getRealpath();
_path = ListUtil.trim(_path, "\\/");
String[] list = _listMapping(pc, mapping, _path);
if (!ArrayUtil.isEmpty(list))
rtn = add(rtn, list);
}
}
// check mappings (this includes the webroot)
if (searchRoot) {
String virtual = "/" + StringUtil.replace(packageName, ".", "/", false);
Mapping[] mappings = config.getMappings();
Mapping mapping;
String _path;
String[] list;
for (int i = 0; i < mappings.length; i++) {
mapping = mappings[i];
if (StringUtil.startsWithIgnoreCase(virtual, mapping.getVirtual())) {
_path = ListUtil.trim(virtual.substring(mapping.getVirtual().length()), "\\/").trim();
_path = StringUtil.replace(_path, "/", File.separator, false);
list = _listMapping(pc, mapping, _path);
if (!ArrayUtil.isEmpty(list))
rtn = add(rtn, list);
}
}
}
// check component mappings
Mapping[] mappings = config.getComponentMappings();
Mapping mapping;
String[] list;
for (int i = 0; i < mappings.length; i++) {
mapping = mappings[i];
list = _listMapping(pc, mapping, path);
if (!ArrayUtil.isEmpty(list))
rtn = add(rtn, list);
}
if (rtn == null)
throw new ApplicationException("no package with name [" + packageName + "] found");
return rtn;
}
use of lucee.runtime.PageSource in project Lucee by lucee.
the class ConfigImpl method getBaseComponentPageSource.
public PageSource getBaseComponentPageSource(int dialect, PageContext pc) {
PageSource base = dialect == CFMLEngine.DIALECT_CFML ? baseComponentPageSourceCFML : baseComponentPageSourceLucee;
if (base == null) {
base = PageSourceImpl.best(getPageSources(pc, null, getBaseComponentTemplate(dialect), false, false, true));
if (!base.exists()) {
String baseTemplate = getBaseComponentTemplate(dialect);
String mod = ContractPath.call(pc, baseTemplate, false);
if (!mod.equals(baseTemplate)) {
base = PageSourceImpl.best(getPageSources(pc, null, mod, false, false, true));
}
}
if (dialect == CFMLEngine.DIALECT_CFML)
this.baseComponentPageSourceCFML = base;
else
this.baseComponentPageSourceLucee = base;
}
return base;
}
use of lucee.runtime.PageSource in project Lucee by lucee.
the class ConfigImpl method getPageSources.
@Override
public PageSource[] getPageSources(PageContext pc, Mapping[] mappings, String realPath, boolean onlyTopLevel, boolean useSpecialMappings, boolean useDefaultMapping, boolean useComponentMappings) {
realPath = realPath.replace('\\', '/');
String lcRealPath = StringUtil.toLowerCase(realPath) + '/';
Mapping mapping;
PageSource ps;
List<PageSource> list = new ArrayList<PageSource>();
if (mappings != null) {
for (int i = 0; i < mappings.length; i++) {
mapping = mappings[i];
// print.err(lcRealPath+".startsWith"+(mapping.getStrPhysical()));
if (lcRealPath.startsWith(mapping.getVirtualLowerCaseWithSlash(), 0)) {
list.add(mapping.getPageSource(realPath.substring(mapping.getVirtual().length())));
}
}
}
// / special mappings
if (useSpecialMappings && lcRealPath.startsWith("/mapping-", 0)) {
String virtual = "/mapping-tag";
// tag mappings
Mapping[] tagMappings = (this instanceof ConfigWebImpl) ? new Mapping[] { ((ConfigWebImpl) this).getServerTagMapping(), getTagMapping() } : new Mapping[] { getTagMapping() };
if (lcRealPath.startsWith(virtual, 0)) {
for (int i = 0; i < tagMappings.length; i++) {
ps = tagMappings[i].getPageSource(realPath.substring(virtual.length()));
if (ps.exists())
list.add(ps);
}
}
// customtag mappings
tagMappings = getCustomTagMappings();
virtual = "/mapping-customtag";
if (lcRealPath.startsWith(virtual, 0)) {
for (int i = 0; i < tagMappings.length; i++) {
ps = tagMappings[i].getPageSource(realPath.substring(virtual.length()));
if (ps.exists())
list.add(ps);
}
}
}
// component mappings (only used for gateway)
if (useComponentMappings || (pc != null && ((PageContextImpl) pc).isGatewayContext())) {
boolean isCFC = Constants.isComponentExtension(ResourceUtil.getExtension(realPath, null));
if (isCFC) {
Mapping[] cmappings = getComponentMappings();
for (int i = 0; i < cmappings.length; i++) {
ps = cmappings[i].getPageSource(realPath);
if (ps.exists())
list.add(ps);
}
}
}
// config mappings
for (int i = 0; i < this.mappings.length - 1; i++) {
mapping = this.mappings[i];
if ((!onlyTopLevel || mapping.isTopLevel()) && lcRealPath.startsWith(mapping.getVirtualLowerCaseWithSlash(), 0)) {
list.add(mapping.getPageSource(realPath.substring(mapping.getVirtual().length())));
}
}
if (useDefaultMapping) {
list.add(this.mappings[this.mappings.length - 1].getPageSource(realPath));
}
return list.toArray(new PageSource[list.size()]);
}
use of lucee.runtime.PageSource 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