Package railo.runtime.functions.cache

Source Code of railo.runtime.functions.cache.Util

package railo.runtime.functions.cache;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;

import railo.commons.io.cache.Cache;
import railo.commons.io.cache.CacheEntryFilter;
import railo.commons.io.cache.exp.CacheException;
import railo.commons.lang.StringUtil;
import railo.runtime.PageContext;
import railo.runtime.cache.CacheConnection;
import railo.runtime.config.Config;
import railo.runtime.config.ConfigImpl;
import railo.runtime.config.ConfigWeb;
import railo.runtime.engine.ThreadLocalPageContext;

public class Util {
 
  /**
   * get the default cache for a certain type, also check definitions in application context (application.cfc/cfapplication)
   * @param pc current PageContext
   * @param type default type -> Config.CACHE_DEFAULT_...
   * @param defaultValue value returned when there is no default cache for this type
   * @return matching cache
   */
  public static Cache getDefault(PageContext pc, int type,Cache defaultValue) {
    // get default from application conetx
    String name=null;
    if(pc!=null && pc.getApplicationContext()!=null)
      name=pc.getApplicationContext().getDefaultCacheName(type);
    Config config=ThreadLocalPageContext.getConfig(pc);
    if(!StringUtil.isEmpty(name)){
      Cache cc = getCache(config, name, null);
      if(cc!=null) return cc;
    }
   
    // get default from config
    CacheConnection cc= ((ConfigImpl)config).getCacheDefaultConnection(type);
    if(cc==null) return defaultValue;
    try {
      return cc.getInstance(config);
    } catch (Throwable t) {
      return defaultValue;
    }
  }
 
  /**
   * get the default cache for a certain type, also check definitions in application context (application.cfc/cfapplication)
   * @param pc current PageContext
   * @param type default type -> Config.CACHE_DEFAULT_...
   * @return matching cache
   * @throws IOException
   */
  public static Cache getDefault(PageContext pc, int type) throws IOException {
    // get default from application conetx
    String name=pc!=null?pc.getApplicationContext().getDefaultCacheName(type):null;
    if(!StringUtil.isEmpty(name)){
      Cache cc = getCache(pc.getConfig(), name, null);
      if(cc!=null) return cc;
    }
   
    // get default from config
    Config config = ThreadLocalPageContext.getConfig(pc);
    CacheConnection cc= ((ConfigImpl)config).getCacheDefaultConnection(type);
    if(cc==null) throw new CacheException("there is no default "+toStringType(type,"")+" cache defined, you need to define this default cache in the Railo Administrator");
    return cc.getInstance(config);
   
   
  }

  public static Cache getCache(PageContext pc,String cacheName, int type) throws IOException {
    if(StringUtil.isEmpty(cacheName)){
      return getDefault(pc, type);
    }
    return getCache(ThreadLocalPageContext.getConfig(pc), cacheName);
  }

  public static Cache getCache(PageContext pc,String cacheName, int type, Cache defaultValue)  {
    if(StringUtil.isEmpty(cacheName)){
      return getDefault(pc, type,defaultValue);
    }
    return getCache(ThreadLocalPageContext.getConfig(pc), cacheName,defaultValue);
  }
 
 
  public static Cache getCache(Config config,String cacheName) throws IOException {
    CacheConnection cc=  config.getCacheConnections().get(cacheName.toLowerCase().trim());
    if(cc==null) throw noCache(config,cacheName);
    return cc.getInstance(config)
  }
 
  public static Cache getCache(Config config,String cacheName, Cache defaultValue) {
    CacheConnection cc= config.getCacheConnections().get(cacheName.toLowerCase().trim());
    if(cc==null) return defaultValue;
    try {
      return cc.getInstance(config);
    } catch (Throwable t) {
      return defaultValue;
   
  }
  public static CacheConnection getCacheConnection(Config config,String cacheName) throws IOException {
    CacheConnection cc= config.getCacheConnections().get(cacheName.toLowerCase().trim());
    if(cc==null) throw noCache(config,cacheName);
    return cc; 
  }

  public static CacheConnection getCacheConnection(Config config,String cacheName, CacheConnection defaultValue) {
    CacheConnection cc= config.getCacheConnections().get(cacheName.toLowerCase().trim());
    if(cc==null) return defaultValue;
    return cc; 
  }
 
 
 
 
 
 
  private static CacheException noCache(Config config, String cacheName) {
    StringBuilder sb=new StringBuilder("there is no cache defined with name [").append(cacheName).append("], available caches are [");
    Iterator<String> it = ((ConfigImpl)config).getCacheConnections().keySet().iterator();
    if(it.hasNext()){
      sb.append(it.next());
    }
    while(it.hasNext()){
      sb.append(", ").append(it.next());
    }
    sb.append("]");
   
    return new CacheException(sb.toString());
  }

  private static String toStringType(int type, String defaultValue) {
    if(type==ConfigImpl.CACHE_DEFAULT_OBJECT) return "object";
    if(type==ConfigImpl.CACHE_DEFAULT_TEMPLATE) return "template";
    if(type==ConfigImpl.CACHE_DEFAULT_QUERY) return "query";
    if(type==ConfigImpl.CACHE_DEFAULT_RESOURCE) return "resource";
    if(type==ConfigImpl.CACHE_DEFAULT_FUNCTION) return "function";
    return defaultValue;
  }

  public static String key(String key) {
    return key.toUpperCase().trim();
  }


  public static boolean removeEL(ConfigWeb config, CacheConnection cc)  {
    try {
      remove(config,cc);
      return true;
    } catch (Throwable e) {
      return false;
    }
  }
  public static void remove(ConfigWeb config, CacheConnection cc) throws Throwable  {
    Cache c = cc.getInstance(config);
    // FUTURE no reflection needed
   
   
    Method remove=null;
    try{
      remove = c.getClass().getMethod("remove", new Class[0]);
     
    }
    catch(Exception ioe){
      c.remove((CacheEntryFilter)null);
      return;
    }
   
    try {
      remove.invoke(c, new Object[0]);
    }
    catch (InvocationTargetException e) {
      throw e.getTargetException();
    }
  }

  public static int toType(String type, int defaultValue) {
    type=type.trim().toLowerCase();
    if("object".equals(type)) return ConfigImpl.CACHE_DEFAULT_OBJECT;
    if("query".equals(type)) return ConfigImpl.CACHE_DEFAULT_QUERY;
    if("resource".equals(type)) return ConfigImpl.CACHE_DEFAULT_RESOURCE;
    if("template".equals(type)) return ConfigImpl.CACHE_DEFAULT_TEMPLATE;
    if("function".equals(type)) return ConfigImpl.CACHE_DEFAULT_FUNCTION;
    return defaultValue;
  }

  public static String toType(int type, String defaultValue) {
    if(ConfigImpl.CACHE_DEFAULT_OBJECT==type) return "object";
    if(ConfigImpl.CACHE_DEFAULT_QUERY==type) return "query";
    if(ConfigImpl.CACHE_DEFAULT_RESOURCE==type) return "resource";
    if(ConfigImpl.CACHE_DEFAULT_TEMPLATE==type) return "template";
    if(ConfigImpl.CACHE_DEFAULT_FUNCTION==type) return "function";
    return defaultValue;
  }
}
TOP

Related Classes of railo.runtime.functions.cache.Util

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.