package railo.runtime.listener;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import railo.commons.io.res.Resource;
import railo.commons.lang.StringUtil;
import railo.runtime.Mapping;
import railo.runtime.PageContext;
import railo.runtime.config.Config;
import railo.runtime.config.ConfigImpl;
import railo.runtime.db.DataSource;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.DeprecatedException;
import railo.runtime.exp.PageException;
import railo.runtime.exp.PageRuntimeException;
import railo.runtime.net.s3.Properties;
import railo.runtime.net.s3.PropertiesImpl;
import railo.runtime.op.Duplicator;
import railo.runtime.orm.ORMConfiguration;
import railo.runtime.rest.RestSettings;
import railo.runtime.type.UDF;
import railo.runtime.type.dt.TimeSpan;
import railo.runtime.type.scope.Scope;
import railo.runtime.type.util.ArrayUtil;
/**
*
*/
public class ClassicApplicationContext extends ApplicationContextSupport {
private static final long serialVersionUID = 940663152793150953L;
private String name;
private boolean setClientCookies;
private boolean setDomainCookies;
private boolean setSessionManagement;
private boolean setClientManagement;
private TimeSpan sessionTimeout=null;
private TimeSpan clientTimeout;
private TimeSpan applicationTimeout=null;
private int loginStorage=-1;
private String clientstorage;
private String sessionstorage;
private int scriptProtect;
private Mapping[] mappings;
private Mapping[] ctmappings;
private Mapping[] cmappings;
private boolean bufferOutput;
private boolean secureJson;
private String secureJsonPrefix="//";
private boolean isDefault;
private Object defaultDataSource;
private boolean ormEnabled;
private Object ormdatasource;
private ORMConfiguration config;
private Properties s3;
private int localMode;
private Locale locale;
private TimeZone timeZone;
private short sessionType;
private boolean sessionCluster;
private boolean clientCluster;
private Resource source;
private boolean triggerComponentDataMember;
private Map<Integer,String> defaultCaches=new HashMap<Integer, String>();
private Map<Integer,Boolean> sameFieldAsArrays=new HashMap<Integer, Boolean>();
private RestSettings restSettings;
private Resource[] restCFCLocations;
private JavaSettingsImpl javaSettings;
private DataSource[] dataSources;
private UDF onMissingTemplate;
/**
* constructor of the class
* @param config
*/
public ClassicApplicationContext(Config config,String name,boolean isDefault, Resource source) {
this.name=name;
setClientCookies=config.isClientCookies();
setDomainCookies=config.isDomainCookies();
setSessionManagement=config.isSessionManagement();
setClientManagement=config.isClientManagement();
sessionTimeout=config.getSessionTimeout();
clientTimeout=config.getClientTimeout();
applicationTimeout=config.getApplicationTimeout();
loginStorage=Scope.SCOPE_COOKIE;
scriptProtect=config.getScriptProtect();
this.isDefault=isDefault;
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.clientstorage=((ConfigImpl)config).getClientStorage();
this.sessionstorage=((ConfigImpl)config).getSessionStorage();
this.source=source;
this.triggerComponentDataMember=config.getTriggerComponentDataMember();
this.restSettings=config.getRestSetting();
this.javaSettings=new JavaSettingsImpl();
}
/**
* Constructor of the class, only used by duplicate method
*/
private ClassicApplicationContext() {
}
public ApplicationContext duplicate() {
ClassicApplicationContext dbl = new ClassicApplicationContext();
dbl.name=name;
dbl.setClientCookies=setClientCookies;
dbl.setDomainCookies=setDomainCookies;
dbl.setSessionManagement=setSessionManagement;
dbl.setClientManagement=setClientManagement;
dbl.sessionTimeout=sessionTimeout;
dbl.clientTimeout=clientTimeout;
dbl.applicationTimeout=applicationTimeout;
dbl.loginStorage=loginStorage;
dbl.clientstorage=clientstorage;
dbl.sessionstorage=sessionstorage;
dbl.scriptProtect=scriptProtect;
dbl.mappings=mappings;
dbl.dataSources=dataSources;
dbl.ctmappings=ctmappings;
dbl.cmappings=cmappings;
dbl.bufferOutput=bufferOutput;
dbl.secureJson=secureJson;
dbl.secureJsonPrefix=secureJsonPrefix;
dbl.isDefault=isDefault;
dbl.defaultDataSource=defaultDataSource;
dbl.applicationtoken=applicationtoken;
dbl.cookiedomain=cookiedomain;
dbl.idletimeout=idletimeout;
dbl.localMode=localMode;
dbl.locale=locale;
dbl.timeZone=timeZone;
dbl.sessionType=sessionType;
dbl.triggerComponentDataMember=triggerComponentDataMember;
dbl.restSettings=restSettings;
dbl.defaultCaches=Duplicator.duplicateMap(defaultCaches, new HashMap<Integer, String>(),false );
dbl.sameFieldAsArrays=Duplicator.duplicateMap(sameFieldAsArrays, new HashMap<Integer, Boolean>(),false );
dbl.ormEnabled=ormEnabled;
dbl.config=config;
dbl.ormdatasource=ormdatasource;
dbl.sessionCluster=sessionCluster;
dbl.clientCluster=clientCluster;
dbl.source=source;
return dbl;
}
@Override
public TimeSpan getApplicationTimeout() {
return applicationTimeout;
}
/**
* @param applicationTimeout The applicationTimeout to set.
*/
public void setApplicationTimeout(TimeSpan applicationTimeout) {
this.applicationTimeout = applicationTimeout;
}
@Override
public int getLoginStorage() {
return loginStorage;
}
/**
* @param loginStorage The loginStorage to set.
*/
public void setLoginStorage(int loginStorage) {
this.loginStorage = loginStorage;
}
public void setLoginStorage(String strLoginStorage) throws ApplicationException {
setLoginStorage(AppListenerUtil.translateLoginStorage(strLoginStorage));
}
@Override
public String getName() {
return name;
}
/**
* @param name The name to set.
*/
public void setName(String name) {
this.name = name;
}
@Override
public TimeSpan getSessionTimeout() {
return sessionTimeout;
}
/**
* @param sessionTimeout The sessionTimeout to set.
*/
public void setSessionTimeout(TimeSpan sessionTimeout) {
this.sessionTimeout = sessionTimeout;
}
public TimeSpan getClientTimeout() {
return clientTimeout;
}
/**
* @param sessionTimeout The sessionTimeout to set.
*/
public void setClientTimeout(TimeSpan clientTimeout) {
this.clientTimeout = clientTimeout;
}
@Override
public boolean isSetClientCookies() {
return setClientCookies;
}
/**
* @param setClientCookies The setClientCookies to set.
*/
public void setSetClientCookies(boolean setClientCookies) {
this.setClientCookies = setClientCookies;
}
@Override
public boolean isSetClientManagement() {
return setClientManagement;
}
/**
* @param setClientManagement The setClientManagement to set.
*/
public void setSetClientManagement(boolean setClientManagement) {
this.setClientManagement = setClientManagement;
}
@Override
public boolean isSetDomainCookies() {
return setDomainCookies;
}
/**
* @param setDomainCookies The setDomainCookies to set.
*/
public void setSetDomainCookies(boolean setDomainCookies) {
this.setDomainCookies = setDomainCookies;
}
@Override
public boolean isSetSessionManagement() {
return setSessionManagement;
}
/**
* @param setSessionManagement The setSessionManagement to set.
*/
public void setSetSessionManagement(boolean setSessionManagement) {
this.setSessionManagement = setSessionManagement;
}
@Override
public String getClientstorage() {
return clientstorage;
}
public String getSessionstorage() {
return sessionstorage;
}
/**
* @param clientstorage The clientstorage to set.
*/
public void setClientstorage(String clientstorage) {
if(StringUtil.isEmpty(clientstorage,true)) return;
this.clientstorage = clientstorage;
}
public void setSessionstorage(String sessionstorage) {
if(StringUtil.isEmpty(sessionstorage,true)) return;
this.sessionstorage = sessionstorage;
}
@Override
public boolean hasName() {
return name!=null;
}
/**
* @param scriptProtect The scriptProtect to set.
*/
public void setScriptProtect(int scriptProtect) {
this.scriptProtect=scriptProtect;
}
@Override
public int getScriptProtect() {
//if(isDefault)print.err("get:"+scriptProtect);
return scriptProtect;
}
public void setMappings(Mapping[] mappings) {
if(mappings.length>0)this.mappings=mappings;
}
/**
* @return the mappings
*/
public Mapping[] getMappings() {
return mappings;
}
public void setCustomTagMappings(Mapping[] ctmappings) {
this.ctmappings=ctmappings;
}
public Mapping[] getCustomTagMappings() {
return ctmappings;
}
public void setComponentMappings(Mapping[] cmappings) {
this.cmappings=cmappings;
}
public Mapping[] getComponentMappings() {
return cmappings;
}
public void setSecureJson(boolean secureJson) {
this.secureJson=secureJson;
}
/**
* @return the secureJson
*/
public boolean getSecureJson() {
return secureJson;
}
public boolean getBufferOutput(){
return bufferOutput;
}
public void setBufferOutput(boolean bufferOutput){
this.bufferOutput= bufferOutput;
}
public void setSecureJsonPrefix(String secureJsonPrefix) {
this.secureJsonPrefix=secureJsonPrefix;
}
/**
* @return the secureJsonPrefix
*/
public String getSecureJsonPrefix() {
return secureJsonPrefix;
}
@Override
public String getDefaultDataSource() {
throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
}
@Override
public Object getDefDataSource() {
return defaultDataSource;
}
@Override
public void setDefaultDataSource(String defaultDataSource) {
this.defaultDataSource = defaultDataSource;
}
@Override
public void setDefDataSource(Object defaultDataSource) {
this.defaultDataSource = defaultDataSource;
}
public boolean isORMEnabled() {
return ormEnabled;
}
public String getORMDatasource() {
throw new PageRuntimeException(new DeprecatedException("this method is no longer supported!"));
}
public Object getORMDataSource() {
return ormdatasource;
}
public ORMConfiguration getORMConfiguration() {
return config;
}
public void setORMConfiguration(ORMConfiguration config) {
this.config= config;
}
public void setORMEnabled(boolean ormEnabled) {
this.ormEnabled=ormEnabled;
}
/**
* @return the s3
*/
public Properties getS3() {
if(s3==null) s3=new PropertiesImpl();
return s3;
}
@Override
public int getLocalMode() {
return localMode;
}
@Override
public Locale getLocale() {
return locale;
}
@Override
public TimeZone getTimeZone() {
return timeZone;
}
/**
* @param localMode the localMode to set
*/
public void setLocalMode(int localMode) {
this.localMode = localMode;
}
@Override
public void setLocale(Locale locale) {
this.locale = locale;
}
@Override
public void setTimeZone(TimeZone timeZone) {
this.timeZone = timeZone;
}
/**
* @return the sessionType
*/
public short getSessionType() {
return sessionType;
}
/**
* @return the sessionType
*/
public void setSessionType(short sessionType) {
this.sessionType= sessionType;
}
/**
* @return the sessionCluster
*/
public boolean getSessionCluster() {
return sessionCluster;
}
/**
* @param sessionCluster the sessionCluster to set
*/
public void setSessionCluster(boolean sessionCluster) {
this.sessionCluster = sessionCluster;
}
/**
* @return the clientCluster
*/
public boolean getClientCluster() {
return clientCluster;
}
/**
* @param clientCluster the clientCluster to set
*/
public void setClientCluster(boolean clientCluster) {
this.clientCluster = clientCluster;
}
public void setS3(Properties s3) {
this.s3=s3;
}
@Override
public void setORMDatasource(String ormdatasource) {
this.ormdatasource=ormdatasource;
}
@Override
public void setORMDataSource(Object ormdatasource) {
this.ormdatasource=ormdatasource;
}
@Override
public void reinitORM(PageContext pc) throws PageException {
// do nothing
}
@Override
public Resource getSource() {
return source;
}
@Override
public boolean getTriggerComponentDataMember() {
return triggerComponentDataMember;
}
@Override
public void setTriggerComponentDataMember(boolean triggerComponentDataMember) {
this.triggerComponentDataMember=triggerComponentDataMember;
}
@Override
public void setDefaultCacheName(int type,String name) {
if(StringUtil.isEmpty(name,true)) return;
defaultCaches.put(type, name.trim());
}
@Override
public String getDefaultCacheName(int type) {
return defaultCaches.get(type);
}
public void setSameFieldAsArray(int scope, boolean sameFieldAsArray) {
sameFieldAsArrays.put(scope, sameFieldAsArray);
}
@Override
public boolean getSameFieldAsArray(int scope) {
Boolean b= sameFieldAsArrays.get(scope);
if(b==null) return false;
return b.booleanValue();
}
@Override
public RestSettings getRestSettings() {
return restSettings;
}
public void setRestSettings(RestSettings restSettings) {
this.restSettings=restSettings;
}
public void setRestCFCLocations(Resource[] restCFCLocations) {
this.restCFCLocations = restCFCLocations;
}
@Override
public Resource[] getRestCFCLocations() {
return restCFCLocations;
}
@Override
public JavaSettings getJavaSettings() {
return javaSettings;
}
@Override
public DataSource[] getDataSources() {
return dataSources;
}
@Override
public void setDataSources(DataSource[] dataSources) {
if(!ArrayUtil.isEmpty(dataSources))this.dataSources=dataSources;
}
public void setOnMissingTemplate(UDF onMissingTemplate) {
this.onMissingTemplate=onMissingTemplate;
}
public UDF getOnMissingTemplate() {
return onMissingTemplate;
}
}