Package railo.runtime.listener

Source Code of railo.runtime.listener.ModernApplicationContext

package railo.runtime.listener;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;

import railo.commons.date.TimeZoneUtil;
import railo.commons.io.res.Resource;
import railo.commons.lang.ClassException;
import railo.commons.lang.StringUtil;
import railo.commons.lang.types.RefBoolean;
import railo.runtime.Component;
import railo.runtime.ComponentWrap;
import railo.runtime.Mapping;
import railo.runtime.PageContext;
import railo.runtime.component.Member;
import railo.runtime.config.Config;
import railo.runtime.config.ConfigImpl;
import railo.runtime.config.ConfigWeb;
import railo.runtime.db.DataSource;
import railo.runtime.exp.DeprecatedException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.i18n.LocaleFactory;
import railo.runtime.net.s3.Properties;
import railo.runtime.op.Caster;
import railo.runtime.op.Decision;
import railo.runtime.orm.ORMConfiguration;
import railo.runtime.orm.ORMConfigurationImpl;
import railo.runtime.rest.RestSettingImpl;
import railo.runtime.rest.RestSettings;
import railo.runtime.type.Array;
import railo.runtime.type.ArrayImpl;
import railo.runtime.type.Collection;
import railo.runtime.type.Collection.Key;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Struct;
import railo.runtime.type.StructImpl;
import railo.runtime.type.cfc.ComponentAccess;
import railo.runtime.type.dt.TimeSpan;
import railo.runtime.type.scope.Scope;
import railo.runtime.type.util.CollectionUtil;
import railo.runtime.type.util.KeyConstants;

public class ModernApplicationContext extends ApplicationContextSupport {

  private static final long serialVersionUID = -8230105685329758613L;

  private static final Collection.Key APPLICATION_TIMEOUT = KeyConstants._applicationTimeout;
  private static final Collection.Key CLIENT_MANAGEMENT = KeyConstants._clientManagement;
  private static final Collection.Key CLIENT_STORAGE = KeyImpl.intern("clientStorage");
  private static final Collection.Key SESSION_STORAGE = KeyImpl.intern("sessionStorage");
  private static final Collection.Key LOGIN_STORAGE = KeyImpl.intern("loginStorage");
  private static final Collection.Key SESSION_TYPE = KeyImpl.intern("sessionType");
  private static final Collection.Key TRIGGER_DATA_MEMBER = KeyImpl.intern("triggerDataMember");
  private static final Collection.Key INVOKE_IMPLICIT_ACCESSOR = KeyImpl.intern("InvokeImplicitAccessor");
  private static final Collection.Key SESSION_MANAGEMENT = KeyImpl.intern("sessionManagement");
  private static final Collection.Key SESSION_TIMEOUT = KeyImpl.intern("sessionTimeout");
  private static final Collection.Key CLIENT_TIMEOUT = KeyImpl.intern("clientTimeout");
  private static final Collection.Key SET_CLIENT_COOKIES = KeyImpl.intern("setClientCookies");
  private static final Collection.Key SET_DOMAIN_COOKIES = KeyImpl.intern("setDomainCookies");
  private static final Collection.Key SCRIPT_PROTECT = KeyImpl.intern("scriptProtect");
  private static final Collection.Key CUSTOM_TAG_PATHS = KeyImpl.intern("customtagpaths");
  private static final Collection.Key COMPONENT_PATHS = KeyImpl.intern("componentpaths");
  private static final Collection.Key SECURE_JSON_PREFIX = KeyImpl.intern("secureJsonPrefix");
  private static final Collection.Key SECURE_JSON = KeyImpl.intern("secureJson");
  private static final Collection.Key LOCAL_MODE = KeyImpl.intern("localMode");
  private static final Collection.Key BUFFER_OUTPUT = KeyImpl.intern("bufferOutput");
  private static final Collection.Key SESSION_CLUSTER = KeyImpl.intern("sessionCluster");
  private static final Collection.Key CLIENT_CLUSTER = KeyImpl.intern("clientCluster");
 

  private static final Collection.Key DEFAULT_DATA_SOURCE = KeyImpl.intern("defaultdatasource");
  private static final Collection.Key ORM_ENABLED = KeyImpl.intern("ormenabled");
  private static final Collection.Key ORM_SETTINGS = KeyImpl.intern("ormsettings");
  private static final Collection.Key IN_MEMORY_FILESYSTEM = KeyImpl.intern("inmemoryfilesystem");
  private static final Collection.Key REST_SETTING = KeyImpl.intern("restsettings");
  private static final Collection.Key JAVA_SETTING = KeyImpl.intern("javasettings");

 
  private ComponentAccess component;
  private ConfigWeb config;

  private String name=null;
 
  private boolean setClientCookies;
  private boolean setDomainCookies;
  private boolean setSessionManagement;
  private boolean setClientManagement;
  private TimeSpan sessionTimeout;
  private TimeSpan clientTimeout;
  private TimeSpan applicationTimeout;
  private int loginStorage=Scope.SCOPE_COOKIE;
  private int scriptProtect;
  private Object defaultDataSource;
  private boolean bufferOutput;
  private short sessionType;
  private boolean sessionCluster;
  private boolean clientCluster;
 

  private String clientStorage;
  private String sessionStorage;
  private String secureJsonPrefix="//";
  private boolean secureJson;
  private Mapping[] mappings;
  private Mapping[] ctmappings;
  private Mapping[] cmappings;
  private DataSource[] dataSources;
 
  private Properties s3;
  private boolean triggerComponentDataMember;
  private Map<Integer,String> defaultCaches;
  private Map<Integer,Boolean> sameFieldAsArrays;
 
  private boolean initApplicationTimeout;
  private boolean initSessionTimeout;
  private boolean initClientTimeout;
  private boolean initSetClientCookies;
  private boolean initSetClientManagement;
  private boolean initSetDomainCookies;
  private boolean initSetSessionManagement;
  private boolean initScriptProtect;
  private boolean initClientStorage;
  private boolean initSecureJsonPrefix;
  private boolean initSecureJson;
  private boolean initSessionStorage;
  private boolean initSessionCluster;
  private boolean initClientCluster;
  private boolean initLoginStorage;
  private boolean initSessionType;
  private boolean initTriggerComponentDataMember;
  private boolean initMappings;
  private boolean initDataSources;
  private boolean initDefaultCaches;
  private boolean initSameFieldAsArrays;
  private boolean initCTMappings;
  private boolean initCMappings;
  private int localMode;
  private boolean initLocalMode;
  private boolean initBufferOutput;
  private boolean initS3;
  private boolean ormEnabled;
  private ORMConfiguration ormConfig;
  private boolean initRestSetting;
  private RestSettings restSetting;
  private boolean initJavaSettings;
  private JavaSettings javaSettings;
  private Object ormDatasource;
  private Locale locale;
  private boolean initLocale;
  private TimeZone timeZone;
  private boolean initTimeZone;
 
  private Resource[] restCFCLocations;
   
  public ModernApplicationContext(PageContext pc, ComponentAccess cfc, RefBoolean throwsErrorWhileInit) {
    config = pc.getConfig();
      setClientCookies=config.isClientCookies();
        setDomainCookies=config.isDomainCookies();
        setSessionManagement=config.isSessionManagement();
        setClientManagement=config.isClientManagement();
        sessionTimeout=config.getSessionTimeout();
        clientTimeout=config.getClientTimeout();
        applicationTimeout=config.getApplicationTimeout();
        scriptProtect=config.getScriptProtect();
        this.defaultDataSource=config.getDefaultDataSource();
        this.localMode=config.getLocalMode();
        this.locale=config.getLocale();
        this.timeZone=config.getTimeZone();
        this.bufferOutput=((ConfigImpl)config).getBufferOutput();
        this.sessionType=config.getSessionType();
        this.sessionCluster=config.getSessionCluster();
        this.clientCluster=config.getClientCluster();
        this.sessionStorage=((ConfigImpl)config).getSessionStorage();
        this.clientStorage=((ConfigImpl)config).getClientStorage();
       
        this.triggerComponentDataMember=config.getTriggerComponentDataMember();
        this.restSetting=config.getRestSetting();
        this.javaSettings=new JavaSettingsImpl();
        this.component=cfc;
   
    pc.addPageSource(component.getPageSource(), true);
    try {
     
   


     
      /////////// ORM /////////////////////////////////
      reinitORM(pc);
     
     
      throwsErrorWhileInit.setValue(false);
    }
    catch(Throwable t) {
      throwsErrorWhileInit.setValue(true);
      pc.removeLastPageSource(true);
    }
  }


 
  public void reinitORM(PageContext pc) throws PageException {

    // datasource
    Object o = get(component,KeyConstants._datasource,null);
    if(o!=null) {
     
      this.ormDatasource=this.defaultDataSource = toDefaultDatasource(o);
    }

    // default datasource
    o=get(component,DEFAULT_DATA_SOURCE,null);
    if(o!=null) this.defaultDataSource =toDefaultDatasource(o);
   
    // ormenabled
    o = get(component,ORM_ENABLED,null);
    if(o!=null && Caster.toBooleanValue(o,false)){
      this.ormEnabled=true;
     
      // settings
      o=get(component,ORM_SETTINGS,null);
      Struct settings;
      if(o instanceof Structsettings=(Struct) o;
      else  settings=new StructImpl();
      AppListenerUtil.setORMConfiguration(pc, this, settings);
    }
  }



  public static Object toDefaultDatasource(Object o) throws PageException {
    if(Decision.isStruct(o)) {
      Struct sct=(Struct) o;
     
      // fix for Jira ticket RAILO-1931
      if(sct.size()==1) {
        Key[] keys = CollectionUtil.keys(sct);
        if(keys.length==1 && keys[0].equalsIgnoreCase(KeyConstants._name)) {
          return Caster.toString(sct.get(KeyConstants._name));
        }
      }
     
      try {
        return AppListenerUtil.toDataSource("__default__",sct);
      }
      catch (PageException pe) {
        // again try fix for Jira ticket RAILO-1931
        String name= Caster.toString(sct.get(KeyConstants._name,null),null);
        if(!StringUtil.isEmpty(name)) return name;
        throw pe;
      }
      catch (ClassException e) {
        throw Caster.toPageException(e);
      }
    }
    return Caster.toString(o);
  }



  @Override
  public boolean hasName() {
    return true;//!StringUtil.isEmpty(getName());
  }
 
  @Override
  public String getName() {
    if(this.name==null) {
      this.name=Caster.toString(get(component,KeyConstants._name,""),"");
    }
    return name;
  }

  @Override
  public int getLoginStorage() {
    if(!initLoginStorage) {
      String str=null;
      Object o = get(component,LOGIN_STORAGE,null);
      if(o!=null){
        str=Caster.toString(o,null);
        if(str!=null)loginStorage=AppListenerUtil.translateLoginStorage(str,loginStorage);
      }
      initLoginStorage=true;
    }
    return loginStorage;
  }

  @Override
  public TimeSpan getApplicationTimeout() {
    if(!initApplicationTimeout) {
      Object o=get(component,APPLICATION_TIMEOUT,null);
      if(o!=null)applicationTimeout=Caster.toTimespan(o,applicationTimeout);
      initApplicationTimeout=true;
    }
    return applicationTimeout;
  }

  @Override
  public TimeSpan getSessionTimeout() {
    if(!initSessionTimeout) {
      Object o=get(component,SESSION_TIMEOUT,null);
      if(o!=null)sessionTimeout=Caster.toTimespan(o,sessionTimeout);
      initSessionTimeout=true;
    }
    return sessionTimeout;
  }

  @Override
  public TimeSpan getClientTimeout() {
    if(!initClientTimeout) {
      Object o=get(component,CLIENT_TIMEOUT,null);
      if(o!=null)clientTimeout=Caster.toTimespan(o,clientTimeout);
      initClientTimeout=true;
    }
    return clientTimeout;
  }

  @Override
  public boolean isSetClientCookies() {
    if(!initSetClientCookies) {
      Object o = get(component,SET_CLIENT_COOKIES,null);
      if(o!=null)setClientCookies=Caster.toBooleanValue(o,setClientCookies);
      initSetClientCookies=true;
    }
    return setClientCookies;
  }

  @Override
  public boolean isSetClientManagement() {
    if(!initSetClientManagement) {
      Object o = get(component,CLIENT_MANAGEMENT,null);
      if(o!=null)setClientManagement=Caster.toBooleanValue(o,setClientManagement);
      initSetClientManagement=true;
    }
    return setClientManagement;
  }

  @Override
  public boolean isSetDomainCookies() {
    if(!initSetDomainCookies) {
      Object o = get(component,SET_DOMAIN_COOKIES,null);
      if(o!=null)setDomainCookies=Caster.toBooleanValue(o,setDomainCookies);
      initSetDomainCookies=true;
    }
    return setDomainCookies;
  }

  @Override
  public boolean isSetSessionManagement() {
    if(!initSetSessionManagement) {
      Object o = get(component,SESSION_MANAGEMENT,null);
      if(o!=null)setSessionManagement=Caster.toBooleanValue(o,setSessionManagement);
      initSetSessionManagement=true;
    }
    return setSessionManagement;
  }

  @Override
  public String getClientstorage() {
    if(!initClientStorage) {
      String str=Caster.toString(get(component,CLIENT_STORAGE,null),null);
      if(!StringUtil.isEmpty(str))clientStorage=str;
      initClientStorage=true;
    }
    return clientStorage;
  }

  @Override
  public int getScriptProtect() {
    if(!initScriptProtect) {
      String str=null;
      Object o = get(component,SCRIPT_PROTECT,null);
      if(o!=null){
        str=Caster.toString(o,null);
        if(str!=null)scriptProtect=AppListenerUtil.translateScriptProtect(str);
      }
      initScriptProtect=true;
    }
    return scriptProtect;
  }

  @Override
  public String getSecureJsonPrefix() {
    if(!initSecureJsonPrefix) {
      Object o=get(component,SECURE_JSON_PREFIX,null);
      if(o!=null)secureJsonPrefix=Caster.toString(o,secureJsonPrefix);
      initSecureJsonPrefix=true;
    }
    return secureJsonPrefix;
  }

  @Override
  public boolean getSecureJson() {
    if(!initSecureJson) {
      Object o = get(component,SECURE_JSON,null);
      if(o!=null)secureJson=Caster.toBooleanValue(o,secureJson);
      initSecureJson=true;
    }
    return secureJson;
  }

  @Override
  public String getSessionstorage() {
    if(!initSessionStorage) {
      String str=Caster.toString(get(component,SESSION_STORAGE,null),null);
      if(!StringUtil.isEmpty(str))sessionStorage=str;
      initSessionStorage=true;
    }
    return sessionStorage;
  }

  @Override
  public boolean getSessionCluster() {
    if(!initSessionCluster) {
      Object o = get(component,SESSION_CLUSTER,null);
      if(o!=null)sessionCluster=Caster.toBooleanValue(o,sessionCluster);
      initSessionCluster=true;
    }
    return sessionCluster;
  }

  @Override
  public boolean getClientCluster() {
    if(!initClientCluster) {
      Object o = get(component,CLIENT_CLUSTER,null);
      if(o!=null)clientCluster=Caster.toBooleanValue(o,clientCluster);
      initClientCluster=true;
    }
    return clientCluster;
  }

  @Override
  public short getSessionType() {
    if(!initSessionType) {
      String str=null;
      Object o = get(component,SESSION_TYPE,null);
      if(o!=null){
        str=Caster.toString(o,null);
        if(str!=null)sessionType=AppListenerUtil.toSessionType(str, sessionType);
      }
      initSessionType=true;
    }
    return sessionType;
  }
 




  @Override
  public boolean getTriggerComponentDataMember() {
    if(!initTriggerComponentDataMember) {
      Boolean b=null;
      Object o = get(component,INVOKE_IMPLICIT_ACCESSOR,null);
      if(o==null)o = get(component,TRIGGER_DATA_MEMBER,null);
      if(o!=null){
        b=Caster.toBoolean(o,null);
        if(b!=null)triggerComponentDataMember=b.booleanValue();
      }
      initTriggerComponentDataMember=true;
    }
    return triggerComponentDataMember;
  }



  @Override
  public void setTriggerComponentDataMember(boolean triggerComponentDataMember) {
    initTriggerComponentDataMember=true;
    this.triggerComponentDataMember=triggerComponentDataMember;
  }
 


  @Override
  public boolean getSameFieldAsArray(int scope) {
    if(!initSameFieldAsArrays) {
      if(sameFieldAsArrays==null)sameFieldAsArrays=new HashMap<Integer, Boolean>();
     
      // Form
      Object o = get(component,KeyImpl.init("sameformfieldsasarray"),null);
      if(o!=null && Decision.isBoolean(o))
        sameFieldAsArrays.put(Scope.SCOPE_FORM, Caster.toBooleanValue(o,false));
     
      // URL
      o = get(component,KeyImpl.init("sameurlfieldsasarray"),null);
      if(o!=null && Decision.isBoolean(o))
        sameFieldAsArrays.put(Scope.SCOPE_URL, Caster.toBooleanValue(o,false));
     
      initSameFieldAsArrays=true;
    }
    return Caster.toBooleanValue(sameFieldAsArrays.get(scope),false);
  }
 

  @Override
  public String getDefaultCacheName(int type) {
    if(!initDefaultCaches) {
      boolean hasResource=false;
      if(defaultCaches==null)defaultCaches=new HashMap<Integer, String>();
      Object o = get(component,KeyConstants._cache,null);
      if(o!=null && Decision.isStruct(o)){
        Struct sct = Caster.toStruct(o,null);
        if(sct!=null){
          // Function
          String name=Caster.toString(sct.get(KeyConstants._function,null),null);
          if(!StringUtil.isEmpty(name,true)) defaultCaches.put(Config.CACHE_DEFAULT_FUNCTION, name.trim());
          // Query
          name=Caster.toString(sct.get(KeyConstants._query,null),null);
          if(!StringUtil.isEmpty(name,true)) defaultCaches.put(Config.CACHE_DEFAULT_QUERY, name.trim());
          // Template
          name=Caster.toString(sct.get(KeyConstants._template,null),null);
          if(!StringUtil.isEmpty(name,true)) defaultCaches.put(Config.CACHE_DEFAULT_TEMPLATE, name.trim());
          // Object
          name=Caster.toString(sct.get(KeyConstants._object,null),null);
          if(!StringUtil.isEmpty(name,true)) defaultCaches.put(Config.CACHE_DEFAULT_OBJECT, name.trim());
          // Resource
          name=Caster.toString(sct.get(KeyConstants._resource,null),null);
          if(!StringUtil.isEmpty(name,true)) {
            defaultCaches.put(Config.CACHE_DEFAULT_RESOURCE, name.trim());
            hasResource=true;
          }
         
        }
      }
     
      // check alias inmemoryfilesystem
      if(!hasResource) {
        String str = Caster.toString(get(component,IN_MEMORY_FILESYSTEM,null),null);
        if(!StringUtil.isEmpty(str,true)) {
          defaultCaches.put(Config.CACHE_DEFAULT_RESOURCE, str.trim());
        }
       
      }
     
     
     
      initDefaultCaches=true;
    }
    return defaultCaches.get(type);
  }



  @Override
  public void setDefaultCacheName(int type, String cacheName) {
    if(StringUtil.isEmpty(cacheName,true)) return;
   
    initDefaultCaches=true;
    if(defaultCaches==null)defaultCaches=new HashMap<Integer, String>();
    defaultCaches.put(type, cacheName.trim());
  }
 
 
 

  @Override
  public Mapping[] getMappings() {
    if(!initMappings) {
      Object o = get(component,KeyConstants._mappings,null);
      if(o!=null)mappings=AppListenerUtil.toMappings(config,o,mappings,getSource());
      initMappings=true;
    }
    return mappings;
  }

  @Override
  public Mapping[] getCustomTagMappings() {
    if(!initCTMappings) {
      Object o = get(component,CUSTOM_TAG_PATHS,null);
      if(o!=null)ctmappings=AppListenerUtil.toCustomTagMappings(config,o,ctmappings);
      initCTMappings=true;
    }
    return ctmappings;
  }

  @Override
  public Mapping[] getComponentMappings() {
    if(!initCMappings) {
      Object o = get(component,COMPONENT_PATHS,null);
      if(o!=null)cmappings=AppListenerUtil.toCustomTagMappings(config,o,cmappings);
      initCMappings=true;
    }
    return cmappings;
  }

  @Override
  public int getLocalMode() {
    if(!initLocalMode) {
      Object o = get(component,LOCAL_MODE,null);
      if(o!=null)localMode=AppListenerUtil.toLocalMode(o, localMode);
      initLocalMode=true;
    }
    return localMode;
  }

  @Override
  public Locale getLocale() {
    if(!initLocale) {
      Object o = get(component,KeyConstants._locale,null);
      if(o!=null){
        String str = Caster.toString(o,null);
        if(!StringUtil.isEmpty(str))locale=LocaleFactory.getLocale(str,locale);
      }
      initLocale=true;
    }
    return locale;
  }

  @Override
  public TimeZone getTimeZone() {
    if(!initTimeZone) {
      Object o = get(component,KeyConstants._timezone,null);
      if(o!=null){
        String str = Caster.toString(o,null);
        if(!StringUtil.isEmpty(str))timeZone=TimeZoneUtil.toTimeZone(str,timeZone);
      }
      initTimeZone=true;
    }
    return timeZone;
  }
 

  public boolean getBufferOutput() {
    boolean bo = _getBufferOutput();
    return bo;
  }
 
  public boolean _getBufferOutput() {
    if(!initBufferOutput) {
      Object o = get(component,BUFFER_OUTPUT,null);
      if(o!=null)bufferOutput=Caster.toBooleanValue(o, bufferOutput);
      initBufferOutput=true;
    }
    return bufferOutput;
  }

  @Override
  public Properties getS3() {
    if(!initS3) {
      Object o = get(component,KeyConstants._s3,null);
      if(o!=null && Decision.isStruct(o))s3=AppListenerUtil.toS3(Caster.toStruct(o,null));
      initS3=true;
    }
    return s3;
  }

  @Override
  public String getDefaultDataSource() {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
  }
 
  @Override
  public Object getDefDataSource() {
    return defaultDataSource;
  }

  @Override
  public DataSource[] getDataSources() {
    if(!initDataSources) {
      Object o = get(component,KeyConstants._datasources,null);
      // if "this.datasources" does not exists, check if "this.datasource" exists and contains a struct
      if(o==null){
        o = get(component,KeyConstants._datasource,null);
        if(!Decision.isStruct(o)) o=null;
      }
     
      if(o!=null)dataSources=AppListenerUtil.toDataSources(o,dataSources);
      initDataSources=true;
    }
    return dataSources;
  }

  @Override
  public boolean isORMEnabled() {
    return this.ormEnabled;
  }

  @Override
  public String getORMDatasource() {
    throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
  }

  @Override
  public Object getORMDataSource() {
    return ormDatasource;
  }

  @Override
  public ORMConfiguration getORMConfiguration() {
    return ormConfig;
  }

  public ComponentAccess getComponent() {
    return component;
  }

  public Object getCustom(Key key) {
    try {
      ComponentWrap cw=ComponentWrap.toComponentWrap(Component.ACCESS_PRIVATE, component);
      return cw.get(key,null);
    }
    catch (Throwable t) {}
   
    return null;
  }
 
 
 



  private static Object get(ComponentAccess app, Key name,String defaultValue) {
    Member mem = app.getMember(Component.ACCESS_PRIVATE, name, true, false);
    if(mem==null) return defaultValue;
    return mem.getValue();
  }

 
//////////////////////// SETTERS /////////////////////////
 
 
 
  @Override
  public void setApplicationTimeout(TimeSpan applicationTimeout) {
    initApplicationTimeout=true;
    this.applicationTimeout=applicationTimeout;
  }

  @Override
  public void setSessionTimeout(TimeSpan sessionTimeout) {
    initSessionTimeout=true;
    this.sessionTimeout=sessionTimeout;
  }

  @Override
  public void setClientTimeout(TimeSpan clientTimeout) {
    initClientTimeout=true;
    this.clientTimeout=clientTimeout;
  }

  @Override
  public void setClientstorage(String clientstorage) {
    initClientStorage=true;
    this.clientStorage=clientstorage;
  }

  @Override
  public void setSessionstorage(String sessionstorage) {
    initSessionStorage=true;
    this.sessionStorage=sessionstorage;
  }

  @Override
  public void setCustomTagMappings(Mapping[] customTagMappings) {
    initCTMappings=true;
    this.ctmappings=customTagMappings;
  }

  @Override
  public void setComponentMappings(Mapping[] componentMappings) {
    initCMappings=true;
    this.cmappings=componentMappings;
  }

  @Override
  public void setMappings(Mapping[] mappings) {
    initMappings=true;
    this.mappings=mappings;
  }
  public void setDataSources(DataSource[] dataSources) {
    initDataSources=true;
    this.dataSources=dataSources;
  }

  @Override
  public void setLoginStorage(int loginStorage) {
    initLoginStorage=true;
    this.loginStorage=loginStorage;
  }

  @Override
  public void setDefaultDataSource(String datasource) {
    this.defaultDataSource=datasource;
  }

  @Override
  public void setDefDataSource(Object datasource) {
    this.defaultDataSource=datasource;
  }

  @Override
  public void setScriptProtect(int scriptrotect) {
    initScriptProtect=true;
    this.scriptProtect=scriptrotect;
  }

  @Override
  public void setSecureJson(boolean secureJson) {
    initSecureJson=true;
    this.secureJson=secureJson;
  }

  @Override
  public void setSecureJsonPrefix(String secureJsonPrefix) {
    initSecureJsonPrefix=true;
    this.secureJsonPrefix=secureJsonPrefix;
  }

  @Override
  public void setSetClientCookies(boolean setClientCookies) {
    initSetClientCookies=true;
    this.setClientCookies=setClientCookies;
  }

  @Override
  public void setSetClientManagement(boolean setClientManagement) {
    initSetClientManagement=true;
    this.setClientManagement=setClientManagement;
  }

  @Override
  public void setSetDomainCookies(boolean setDomainCookies) {
    initSetDomainCookies=true;
    this.setDomainCookies=setDomainCookies;
  }

  @Override
  public void setSetSessionManagement(boolean setSessionManagement) {
    initSetSessionManagement=true;
    this.setSessionManagement=setSessionManagement;
  }

  @Override
  public void setLocalMode(int localMode) {
    initLocalMode=true;
    this.localMode=localMode;
  }

  @Override
  public void setLocale(Locale locale) {
    initLocale=true;
    this.locale=locale;
  }

  @Override
  public void setTimeZone(TimeZone timeZone) {
    initTimeZone=true;
    this.timeZone=timeZone;
  }
 
  public void setBufferOutput(boolean bufferOutput) {
    initBufferOutput=true;
    this.bufferOutput=bufferOutput;
  }

  @Override
  public void setSessionType(short sessionType) {
    initSessionType=true;
    this.sessionType=sessionType;
  }

  @Override
  public void setClientCluster(boolean clientCluster) {
    initClientCluster=true;
    this.clientCluster=clientCluster;
  }

  @Override
  public void setSessionCluster(boolean sessionCluster) {
    initSessionCluster=true;
    this.sessionCluster=sessionCluster;
  }

  @Override
  public void setS3(Properties s3) {
    initS3=true;
    this.s3=s3;
  }

  @Override
  public void setORMEnabled(boolean ormEnabled) {
    this.ormEnabled=ormEnabled;
  }

  @Override
  public void setORMConfiguration(ORMConfiguration ormConfig) {
    this.ormConfig=ormConfig;
  }

  @Override
  public void setORMDatasource(String ormDatasource) {
    this.ormDatasource=ormDatasource;
  }

  @Override
  public void setORMDataSource(Object ormDatasource) {
    this.ormDatasource=ormDatasource;
  }

  @Override
  public Resource getSource() {
    return component.getPageSource().getResource();
  }



  @Override
  public RestSettings getRestSettings() {
    initRest();
    return restSetting;
  }

  @Override
  public Resource[] getRestCFCLocations() {
    initRest();
    return restCFCLocations;
  }

  private void initRest() {
    if(!initRestSetting) {
      Object o = get(component,REST_SETTING,null);
      if(o!=null && Decision.isStruct(o)){
        Struct sct = Caster.toStruct(o,null);
       
        // cfclocation
        Object obj = sct.get(KeyConstants._cfcLocation,null);
        if(obj==null) obj = sct.get(KeyConstants._cfcLocations,null);
        List<Resource> list = ORMConfigurationImpl.loadCFCLocation(config, null, obj,true);
        restCFCLocations=list==null?null:list.toArray(new Resource[list.size()]);
       
        // skipCFCWithError
        boolean skipCFCWithError=Caster.toBooleanValue(sct.get(KeyConstants._skipCFCWithError,null),restSetting.getSkipCFCWithError());
       
        // returnFormat
        int returnFormat=Caster.toIntValue(sct.get(KeyConstants._returnFormat,null),restSetting.getReturnFormat());
       
        restSetting=new RestSettingImpl(skipCFCWithError,returnFormat);
       
      }
      initRestSetting=true;
    }
  }
 

  @Override
  public JavaSettings getJavaSettings() {
    initJava();
    return javaSettings;
  }
 
  private void initJava() {
    if(!initJavaSettings) {
      Object o = get(component,JAVA_SETTING,null);
      if(o!=null && Decision.isStruct(o)){
        Struct sct = Caster.toStruct(o,null);
       
        // loadPaths
        Object obj = sct.get(KeyImpl.init("loadPaths"),null);
        List<Resource> paths;
        if(obj!=null) {
          paths = ORMConfigurationImpl.loadCFCLocation(config, null, obj,false)
        }
        else paths=new ArrayList<Resource>();
         
       
        // loadCFMLClassPath
        Boolean loadCFMLClassPath=Caster.toBoolean(sct.get(KeyImpl.init("loadCFMLClassPath"),null),null);
        if(loadCFMLClassPath==null)
          loadCFMLClassPath=Caster.toBoolean(sct.get(KeyImpl.init("loadColdFusionClassPath"),null),null);
        if(loadCFMLClassPath==null)loadCFMLClassPath=javaSettings.loadCFMLClassPath();
         
        // reloadOnChange
        boolean reloadOnChange=Caster.toBooleanValue(sct.get(KeyImpl.init("reloadOnChange"),null),javaSettings.reloadOnChange());
       
        // watchInterval
        int watchInterval=Caster.toIntValue(sct.get(KeyImpl.init("watchInterval"),null),javaSettings.watchInterval());
       
        // watchExtensions
        obj = sct.get(KeyImpl.init("watchExtensions"),null);
        List<String> extensions=new ArrayList<String>();
        if(obj!=null) {
          Array arr;
          if(Decision.isArray(obj)) {
            try {
              arr = Caster.toArray(obj);
            } catch (PageException e) {
              arr=new ArrayImpl();
            }
          }
          else {
            arr=railo.runtime.type.util.ListUtil.listToArrayRemoveEmpty(Caster.toString(obj,""), ',');
          }
          Iterator<Object> it = arr.valueIterator();
          String ext;
          while(it.hasNext()){
            ext=Caster.toString(it.next(),null);
            if(StringUtil.isEmpty(ext))continue;
            ext=ext.trim();
            if(ext.startsWith("."))ext=ext.substring(1);
            if(ext.startsWith("*."))ext=ext.substring(2);
            extensions.add(ext);
          }
         
        }
        javaSettings=new JavaSettingsImpl(
            paths.toArray(new Resource[paths.size()]),
            loadCFMLClassPath,reloadOnChange,watchInterval,
            extensions.toArray(new String[extensions.size()]));
       
      }
      initJavaSettings=true;
    }
  }
}
TOP

Related Classes of railo.runtime.listener.ModernApplicationContext

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.