Search in sources :

Example 16 with PageSource

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+"]");
}
Also used : CIPage(lucee.runtime.CIPage) Mapping(lucee.runtime.Mapping) PageContextImpl(lucee.runtime.PageContextImpl) MappingImpl(lucee.runtime.MappingImpl) ExpressionException(lucee.runtime.exp.ExpressionException) PageSource(lucee.runtime.PageSource) Component(lucee.runtime.Component) ConfigImpl(lucee.runtime.config.ConfigImpl)

Example 17 with PageSource

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;
}
Also used : ConfigWebImpl(lucee.runtime.config.ConfigWebImpl) ApplicationException(lucee.runtime.exp.ApplicationException) Mapping(lucee.runtime.Mapping) PageContextImpl(lucee.runtime.PageContextImpl) PageSource(lucee.runtime.PageSource)

Example 18 with PageSource

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;
}
Also used : PageSource(lucee.runtime.PageSource)

Example 19 with PageSource

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()]);
}
Also used : ArrayList(java.util.ArrayList) Mapping(lucee.runtime.Mapping) PageSource(lucee.runtime.PageSource)

Example 20 with PageSource

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");
}
Also used : ConfigWebImpl(lucee.runtime.config.ConfigWebImpl) HTTPResource(lucee.commons.io.res.type.http.HTTPResource) Resource(lucee.commons.io.res.Resource) PageContextImpl(lucee.runtime.PageContextImpl) ExpressionException(lucee.runtime.exp.ExpressionException) PageSource(lucee.runtime.PageSource)

Aggregations

PageSource (lucee.runtime.PageSource)59 PageContextImpl (lucee.runtime.PageContextImpl)19 Resource (lucee.commons.io.res.Resource)16 Struct (lucee.runtime.type.Struct)10 ConfigWebImpl (lucee.runtime.config.ConfigWebImpl)8 Mapping (lucee.runtime.Mapping)7 PageException (lucee.runtime.exp.PageException)7 StructImpl (lucee.runtime.type.StructImpl)7 ConfigImpl (lucee.runtime.config.ConfigImpl)6 ConfigWeb (lucee.runtime.config.ConfigWeb)6 ExpressionException (lucee.runtime.exp.ExpressionException)6 ArrayList (java.util.ArrayList)5 Component (lucee.runtime.Component)5 PageSourceCode (lucee.transformer.util.PageSourceCode)5 IOException (java.io.IOException)4 MissingIncludeException (lucee.runtime.exp.MissingIncludeException)4 Array (lucee.runtime.type.Array)4 LitString (lucee.transformer.expression.literal.LitString)4 HTTPResource (lucee.commons.io.res.type.http.HTTPResource)3 Entry (java.util.Map.Entry)2