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 }