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 }