Package railo.runtime.functions.cache

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

package railo.runtime.functions.cache;

import java.util.ArrayList;

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.ConfigImpl;
import railo.runtime.exp.PageException;
import railo.runtime.exp.SecurityException;
import railo.runtime.op.Caster;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Struct;
import railo.runtime.type.util.ListUtil;

public class CacheSetProperties {

  private static final Key OBJECT_TYPE = KeyImpl.intern("objecttype");

  public static Object call(PageContext pc,Struct properties) throws PageException {
    try {
      Object obj=properties.removeEL(OBJECT_TYPE);
      String objectType=Caster.toString(obj);
     
      CacheConnection[] conns=getCaches(pc,objectType);
      for(int i=0;i<conns.length;i++){
        setProperties(conns[i],properties);
      }
    } catch (CacheException e) {
      throw Caster.toPageException(e);
    }
   
   
    return call(pc, null);
  }

  private static void setProperties(CacheConnection cc, Struct properties) throws SecurityException {
    throw new SecurityException("it is not allowed to change cache connection setting this way, please use the tag cfadmin or the railo administrator frontend instead ");
  }

  private static CacheConnection[] getCaches(PageContext pc,String cacheName) throws CacheException {
    ConfigImpl config=(ConfigImpl) pc.getConfig();
    if(StringUtil.isEmpty(cacheName)){
     
      return new CacheConnection[]{
          config.getCacheDefaultConnection(ConfigImpl.CACHE_DEFAULT_OBJECT),
          config.getCacheDefaultConnection(ConfigImpl.CACHE_DEFAULT_TEMPLATE)
      }
      ;
      // MUST which one is first
    }
   
    ArrayList<CacheConnection> list=new ArrayList<CacheConnection>();
    String name;
    String[] names=ListUtil.listToStringArray(cacheName, ',');
    for(int i=0;i<names.length;i++){
      name=names[i].trim().toLowerCase();
      if(name.equalsIgnoreCase("template"))
        list.add(config.getCacheDefaultConnection(ConfigImpl.CACHE_DEFAULT_TEMPLATE));
      else if(name.equalsIgnoreCase("object"))
        list.add(config.getCacheDefaultConnection(ConfigImpl.CACHE_DEFAULT_OBJECT));
      else{
        CacheConnection cc= config.getCacheConnections().get(name);
        if(cc==null) throw new CacheException("there is no cache defined with name ["+name+"]");
        list.add(cc);
      }
    }
    return list.toArray(new CacheConnection[list.size()]);
  }
}
TOP

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

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.