001    package railo.runtime.functions.cache;
002    
003    import java.util.Iterator;
004    import java.util.List;
005    
006    import railo.commons.io.cache.Cache;
007    import railo.runtime.PageContext;
008    import railo.runtime.cache.util.WildCardFilter;
009    import railo.runtime.config.ConfigImpl;
010    import railo.runtime.exp.PageException;
011    import railo.runtime.ext.function.Function;
012    import railo.runtime.op.Caster;
013    import railo.runtime.type.Array;
014    import railo.runtime.type.ArrayImpl;
015    
016    /**
017     * 
018     */
019    public final class CacheGetAllIds implements Function {
020            
021            private static final long serialVersionUID = 4831944874663718056L;
022    
023    
024            public static Array call(PageContext pc) throws PageException {
025                    return call(pc, null,null);
026            }
027            
028    
029            public static Array call(PageContext pc, String filter) throws PageException {
030                    return call(pc, filter, null);
031            }
032            
033            public static Array call(PageContext pc, String filter, String cacheName) throws PageException {
034                    try {
035                            Cache cache = Util.getCache(pc,cacheName,ConfigImpl.CACHE_DEFAULT_OBJECT);
036                            
037                            List<String> keys = isFilter(filter)?cache.keys(new WildCardFilter(filter,true)):cache.keys();
038                            Iterator<String> it = keys.iterator();
039                            Array arr = new ArrayImpl();
040                            while(it.hasNext()){
041                                    arr.append(it.next());
042                            }
043                            return arr;
044                    } catch (Exception e) {
045                            throw Caster.toPageException(e);
046                    }
047            }
048    
049    
050            protected static boolean isFilter(String filter) {
051                    return filter!=null && filter.length()>0 && !filter.equals("*");
052            }
053    }