001    /**
002     * Implements the Cold Fusion Function gettemplatepath
003     */
004    package railo.runtime.functions.system;
005    
006    import railo.commons.lang.StringUtil;
007    import railo.runtime.Mapping;
008    import railo.runtime.MappingImpl;
009    import railo.runtime.PageContext;
010    import railo.runtime.PageSourceImpl;
011    import railo.runtime.PageSourcePool;
012    import railo.runtime.exp.PageException;
013    import railo.runtime.ext.function.Function;
014    import railo.runtime.type.Array;
015    import railo.runtime.type.ArrayImpl;
016    
017    public final class PagePoolList implements Function {
018            public static Array call(PageContext pc) throws PageException {
019                    ArrayImpl arr = new ArrayImpl();
020                    fill(arr,pc.getConfig().getMappings());
021                    fill(arr,pc.getConfig().getCustomTagMappings());
022                    fill(arr,pc.getApplicationContext().getMappings());
023                    return arr;
024            }
025    
026            private static void fill(Array arr, Mapping[] mappings) throws PageException {
027                    if(mappings==null) return;
028                    MappingImpl mapping;
029                    for(int i=0;i<mappings.length;i++)   {
030                            mapping=(MappingImpl) mappings[i];
031                            toArray(arr,mapping.getPageSourcePool());
032                    }               
033            }
034    
035            private static Array toArray(Array arr, PageSourcePool psp) throws PageException {
036                    Object[] keys = psp.keys();
037                    
038                    PageSourceImpl ps;
039                    for(int y=0;y<keys.length;y++)       {
040                            ps = (PageSourceImpl) psp.getPageSource(keys[y], false);
041                            if(ps.isLoad())
042                                    arr.append(ps.getDisplayPath());
043                    }
044                    return arr;
045            }
046    
047            public static String removeStartingSlash(String virtual) {
048                    virtual=virtual.trim();
049                    if(StringUtil.startsWith(virtual, '/'))virtual=virtual.substring(1);
050                    if(StringUtil.isEmpty(virtual)) return "root";
051                    return virtual;
052            }
053    }