001    /**
002     * Implements the CFML 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.config.ConfigImpl;
013    import railo.runtime.exp.PageException;
014    import railo.runtime.ext.function.Function;
015    import railo.runtime.type.Array;
016    import railo.runtime.type.ArrayImpl;
017    
018    public final class PagePoolList implements Function {
019    
020            private static final long serialVersionUID = 7743072823224800862L;
021    
022            public static Array call(PageContext pc) throws PageException {
023                    ArrayImpl arr = new ArrayImpl();
024                    fill(arr,ConfigImpl.getAllMappings(pc));
025                    return arr;
026            }
027    
028            private static void fill(Array arr, Mapping[] mappings) throws PageException {
029                    if(mappings==null) return;
030                    MappingImpl mapping;
031                    for(int i=0;i<mappings.length;i++)   {
032                            mapping=(MappingImpl) mappings[i];
033                            toArray(arr,mapping.getPageSourcePool());
034                    }               
035            }
036    
037            private static Array toArray(Array arr, PageSourcePool psp) throws PageException {
038                    Object[] keys = psp.keys();
039                    
040                    PageSourceImpl ps;
041                    for(int y=0;y<keys.length;y++)       {
042                            ps = (PageSourceImpl) psp.getPageSource(keys[y], false);
043                            if(ps.isLoad())
044                                    arr.append(ps.getDisplayPath());
045                    }
046                    return arr;
047            }
048    
049            public static String removeStartingSlash(String virtual) {
050                    virtual=virtual.trim();
051                    if(StringUtil.startsWith(virtual, '/'))virtual=virtual.substring(1);
052                    if(StringUtil.isEmpty(virtual)) return "root";
053                    return virtual;
054            }
055    }