Package railo.runtime.tag

Source Code of railo.runtime.tag.Application

package railo.runtime.tag;

import java.util.Locale;
import java.util.TimeZone;

import railo.commons.date.TimeZoneUtil;
import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.commons.lang.ClassException;
import railo.commons.lang.StringUtil;
import railo.runtime.Mapping;
import railo.runtime.config.Config;
import railo.runtime.exp.ApplicationException;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.ext.tag.TagImpl;
import railo.runtime.i18n.LocaleFactory;
import railo.runtime.listener.AppListenerUtil;
import railo.runtime.listener.ApplicationContextPro;
import railo.runtime.listener.ClassicApplicationContext;
import railo.runtime.listener.ModernApplicationContext;
import railo.runtime.op.Caster;
import railo.runtime.orm.ORMUtil;
import railo.runtime.type.Struct;
import railo.runtime.type.UDF;
import railo.runtime.type.dt.TimeSpan;
import railo.runtime.type.scope.Scope;

/**
* Defines scoping for a CFML application, enables or disables storing client variables,
*       and specifies a client variable storage mechanism.
*       By default, client variables are disabled. Also, enables session variables and sets timeouts
*       for session and application variables. Session and application variables are stored in memory.
*
*
*
**/
public final class Application extends TagImpl {

 

  private static final int ACTION_CREATE = 0;
  private static final int ACTION_UPDATE = 1;
   
  private Boolean setClientCookies;
  private Boolean setDomainCookies;
  private Boolean setSessionManagement;
  private String clientstorage;
  private String sessionstorage;
  private Boolean setClientManagement;
  private TimeSpan sessionTimeout;
  private TimeSpan clientTimeout;
  private TimeSpan applicationTimeout;
  private Mapping[] mappings;
  private Mapping[] customTagMappings;
  private Mapping[] componentMappings;
  private String secureJsonPrefix;
  private Boolean bufferOutput;
  private Boolean secureJson;
  private String scriptrotect;
  private Object datasource;
  private Object defaultdatasource;
  private int loginstorage=Scope.SCOPE_UNDEFINED;
 
  //ApplicationContextImpl appContext;
    private String name="";
  private int action=ACTION_CREATE;
  private int localMode=-1;
  private Locale locale;
  private TimeZone timeZone;
  private short sessionType=-1;
  private boolean sessionCluster;
  private boolean clientCluster;

  private boolean ormenabled;
  private Struct ormsettings;
  private Struct s3;
 
  private Boolean triggerDataMember=null;
  private String cacheFunction;
  private String cacheQuery;
  private String cacheTemplate;
  private String cacheObject;
  private String cacheResource;
  private Struct datasources;
  private UDF onmissingtemplate;
 
    
    @Override
    public void release() {
        super.release();
        setClientCookies=null;
        setDomainCookies=null;
        setSessionManagement=null;
        clientstorage=null;
        sessionstorage=null;
        setClientManagement=null;
        sessionTimeout=null;
        clientTimeout=null;
        applicationTimeout=null;
        mappings=null;
        customTagMappings=null;
        componentMappings=null;
        bufferOutput=null;
        secureJson=null;
        secureJsonPrefix=null;
        loginstorage=Scope.SCOPE_UNDEFINED;
        scriptrotect=null;
        datasource=null;
        defaultdatasource=null;
        datasources=null;
        this.name="";
        action=ACTION_CREATE;
        localMode=-1;
        locale=null;
        timeZone=null;
        sessionType=-1;
        sessionCluster=false;
        clientCluster=false;
       
        ormenabled=false;
        ormsettings=null;
        s3=null;
        //appContext=null;
       
        triggerDataMember=null;

      cacheFunction=null;
      cacheQuery=null;
      cacheTemplate=null;
      cacheObject=null;
      cacheResource=null;
      onmissingtemplate=null;
    }
   
    /** set the value setclientcookies
  *  Yes or No. Yes enables client cookies. Default is Yes. If you set this attribute to
  *     "No", CFML does not automatically send the CFID and CFTOKEN cookies to the client browser;
  *     you must manually code CFID and CFTOKEN on the URL for every page that uses Session or Client variables.
  * @param setClientCookies value to set
  **/
  public void setSetclientcookies(boolean setClientCookies)  {
    this.setClientCookies=setClientCookies?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSetClientCookies(setClientCookies);
  }

    /** set the value setdomaincookies
  *  Yes or No. Sets the CFID and CFTOKEN cookies for a domain, not just a single host.
  *     Applications that are running on clusters must set this value to Yes. The default is No.
  * @param setDomainCookies value to set
  **/
  public void setSetdomaincookies(boolean setDomainCookies)  {
    this.setDomainCookies=setDomainCookies?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSetDomainCookies(setDomainCookies);
  }

  /** set the value sessionmanagement
  *  Yes or No. Yes enables session variables. Default is No.
  * @param setSessionManagement value to set
  **/
  public void setSessionmanagement(boolean setSessionManagement)  {
    this.setSessionManagement=setSessionManagement?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSetSessionManagement(setSessionManagement);
  }

   
  /**
   * @param datasource the datasource to set
   * @throws PageException
   */
  public void setDatasource(Object datasource) throws PageException {
    this.datasource = ModernApplicationContext.toDefaultDatasource(datasource);
  }
 
  public void setDefaultdatasource(Object defaultdatasource) throws PageException {
    this.defaultdatasource =  ModernApplicationContext.toDefaultDatasource(defaultdatasource);
  }
 
  public void setDatasources(Struct datasources) {
    this.datasources = datasources;
  }
 
  public void setLocalmode(String strLocalMode) throws ApplicationException {
    this.localMode = AppListenerUtil.toLocalMode(strLocalMode);
   
  }
 
  public void setTimezone(String strTimeZone) throws ExpressionException {
    if(StringUtil.isEmpty(strTimeZone)) return;
    this.timeZone = TimeZoneUtil.toTimeZone(strTimeZone);
   
  }
 
  public void setLocale(String strLocale) throws ExpressionException {
    if(StringUtil.isEmpty(strLocale)) return;
    this.locale = LocaleFactory.getLocale(strLocale);
   
  }

  /** set the value clientstorage
  *  Specifies how Railo stores client variables
  * @param clientstorage value to set
  **/
  public void setClientstorage(String clientstorage)  {
    this.clientstorage=clientstorage;
  }

  public void setSessionstorage(String sessionstorage)  {
    this.sessionstorage=sessionstorage;
  }

  /** set the value clientmanagement
  *  Yes or No. Enables client variables. Default is No.
  * @param setClientManagement value to set
  **/
  public void setClientmanagement(boolean setClientManagement)  {
    this.setClientManagement=setClientManagement?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSetClientManagement(setClientManagement);
  }

  /** set the value sessiontimeout
  *  Enter the CreateTimeSpan function and values in days, hours, minutes, and seconds, separated
  *     by commas, to specify the lifespan of session variables.
  * @param sessionTimeout value to set
  **/
  public void setSessiontimeout(TimeSpan sessionTimeout)  {
    this.sessionTimeout=sessionTimeout;
  }
  public void setSessiontype(String sessionType) throws ApplicationException  {
    this.sessionType=AppListenerUtil.toSessionType(sessionType);
  }
  public void setClientcluster(boolean clientCluster) {
    this.clientCluster=clientCluster;
  }
  public void setSessioncluster(boolean sessionCluster) {
    this.sessionCluster=sessionCluster;
  }
 
  public void setClienttimeout(TimeSpan clientTimeout)  {
    this.clientTimeout=clientTimeout;
  }
 

  public void setCachefunction(String cacheFunction)  {
    if(StringUtil.isEmpty(cacheFunction,true)) return;
    this.cacheFunction=cacheFunction.trim();
  }
  public void setCachequery(String cacheQuery)  {
    if(StringUtil.isEmpty(cacheQuery,true)) return;
    this.cacheQuery=cacheQuery.trim();
  }
  public void setCachetemplate(String cacheTemplate)  {
    if(StringUtil.isEmpty(cacheTemplate,true)) return;
    this.cacheTemplate=cacheTemplate.trim();
  }
  public void setCacheobject(String cacheObject)  {
    if(StringUtil.isEmpty(cacheObject,true)) return;
    this.cacheObject=cacheObject.trim();
  }
  public void setCacheresource(String cacheResource)  {
    if(StringUtil.isEmpty(cacheResource,true)) return;
    this.cacheResource=cacheResource.trim();
  }
 

  public void setTriggerdatamember(boolean triggerDataMember)  {
    this.triggerDataMember=triggerDataMember?Boolean.TRUE:Boolean.FALSE;
  }
  public void setInvokeimplicitaccessor(boolean invokeimplicitaccessor)  {
    setTriggerdatamember(invokeimplicitaccessor);
  }

  /**
   * @param ormenabled the ormenabled to set
   */
  public void setOrmenabled(boolean ormenabled) {
    this.ormenabled = ormenabled;
  }

  /**
   * @param ormsettings the ormsettings to set
   */
  public void setOrmsettings(Struct ormsettings) {
    this.ormsettings = ormsettings;
  }

  /**
   * @param s3 the s3 to set
   */
  public void setS3(Struct s3) {
    this.s3 = s3;
  }

  /** set the value applicationtimeout
  *  Enter the CreateTimeSpan function and values in days, hours, minutes, and seconds, separated
  *     by commas, to specify the lifespan of application variables.
  * @param applicationTimeout value to set
  **/
  public void setApplicationtimeout(TimeSpan applicationTimeout)  {
    this.applicationTimeout=applicationTimeout;
      //getAppContext().setApplicationTimeout(applicationTimeout);
  }

  /** set the value name
  *  The name of your application. This name can be up to 64 characters long.
  *        Required for application and session variables, optional for client variables
  * @param name value to set
  **/
  public void setName(String name)  {
      this.name=name;
  }
 
  public void setAction(String strAction) throws ApplicationException  {
    strAction=strAction.toLowerCase();
        if(strAction.equals("create"))action=ACTION_CREATE;
        else if(strAction.equals("update")) action=ACTION_UPDATE;
        else throw new ApplicationException("invalid action definition ["+strAction+"] for tag application, valid values are [create,update]");
   
  }
 
  public void setMappings(Struct mappings) throws PageException  {
      this.mappings=AppListenerUtil.toMappings(pageContext.getConfig(), mappings,getSource());
    //getAppContext().setMappings(AppListenerUtil.toMappings(pageContext, mappings));
  }
 
  public void setCustomtagpaths(Object mappings) throws PageException  {
      this.customTagMappings=AppListenerUtil.toCustomTagMappings(pageContext.getConfig(), mappings);
  }
 
  public void setComponentpaths(Object mappings) throws PageException  {
      this.componentMappings=AppListenerUtil.toCustomTagMappings(pageContext.getConfig(), mappings);
    //getAppContext().setCustomTagMappings(AppListenerUtil.toCustomTagMappings(pageContext, mappings));
  }
 

  public void setSecurejsonprefix(String secureJsonPrefix)   {
    this.secureJsonPrefix=secureJsonPrefix;
      //getAppContext().setSecureJsonPrefix(secureJsonPrefix);
  }
  public void setSecurejson(boolean secureJson)   {
    this.secureJson=secureJson?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSecureJson(secureJson);
  }
  public void setBufferoutput(boolean bufferOutput)   {
    this.bufferOutput=bufferOutput?Boolean.TRUE:Boolean.FALSE;
      //getAppContext().setSecureJson(secureJson);
  }
 
    /**
     * @param loginstorage The loginstorage to set.
     * @throws ApplicationException
     */
    public void setLoginstorage(String loginstorage) throws ApplicationException {
        loginstorage=loginstorage.toLowerCase();
        if(loginstorage.equals("session"))this.loginstorage=Scope.SCOPE_SESSION;
        else if(loginstorage.equals("cookie"))this.loginstorage=Scope.SCOPE_COOKIE;
        else throw new ApplicationException("invalid loginStorage definition ["+loginstorage+"] for tag application, valid values are [session,cookie]");
    }
  /**
   * @param scriptrotect the scriptrotect to set
   */     
  public void setScriptprotect(String strScriptrotect) {
    this.scriptrotect=strScriptrotect;
    //getAppContext().setScriptProtect(strScriptrotect);
  }

  public void setOnmissingtemplate(Object oUDF) throws PageException {
    this.onmissingtemplate=Caster.toFunction(oUDF);
  }

  @Override
  public int doStartTag() throws PageException  {
       
        ApplicationContextPro ac;
        boolean initORM;
        if(action==ACTION_CREATE){
          ac=new ClassicApplicationContext(pageContext.getConfig(),name,false,
              pageContext.getCurrentPageSource().getResourceTranslated(pageContext));
          initORM=set(ac);
          pageContext.setApplicationContext(ac);
        }
        else {
          ac=(ApplicationContextPro) pageContext.getApplicationContext();
          initORM=set(ac);
        }
       
        if(initORM) ORMUtil.resetEngine(pageContext,false);
       
        return SKIP_BODY;
  }

  private Resource getSource() throws PageException {
    return ResourceUtil.getResource(pageContext,pageContext.getCurrentPageSource());
  }

  private boolean set(ApplicationContextPro ac) throws PageException {
    if(applicationTimeout!=null)      ac.setApplicationTimeout(applicationTimeout);
    if(sessionTimeout!=null)        ac.setSessionTimeout(sessionTimeout);
    if(clientTimeout!=null)        ac.setClientTimeout(clientTimeout);
    if(clientstorage!=null)  {
      ac.setClientstorage(clientstorage);
    }
    if(sessionstorage!=null)  {
      ac.setSessionstorage(sessionstorage);
    }
    if(customTagMappings!=null)        ac.setCustomTagMappings(customTagMappings);
    if(componentMappings!=null)        ac.setComponentMappings(componentMappings);
    if(mappings!=null)            ac.setMappings(mappings);
    if(loginstorage!=Scope.SCOPE_UNDEFINEDac.setLoginStorage(loginstorage);
    if(!StringUtil.isEmpty(datasource))    {
      ac.setDefDataSource(datasource);
      ac.setORMDataSource(datasource);
    }
    if(!StringUtil.isEmpty(defaultdatasource))ac.setDefDataSource(defaultdatasource);
    if(datasources!=null){
      try {
        ac.setDataSources(AppListenerUtil.toDataSources(datasources));
      }
      catch (ClassException e) {
        throw Caster.toPageException(e);
      }
    }
   
    if(onmissingtemplate!=null && ac instanceof ClassicApplicationContext){
      ((ClassicApplicationContext)ac).setOnMissingTemplate(onmissingtemplate);
    }
   
   
    if(scriptrotect!=null)          ac.setScriptProtect(AppListenerUtil.translateScriptProtect(scriptrotect));
    if(bufferOutput!=null)          ac.setBufferOutput(bufferOutput.booleanValue());
    if(secureJson!=null)          ac.setSecureJson(secureJson.booleanValue());
    if(secureJsonPrefix!=null)        ac.setSecureJsonPrefix(secureJsonPrefix);
    if(setClientCookies!=null)        ac.setSetClientCookies(setClientCookies.booleanValue());
    if(setClientManagement!=null)      ac.setSetClientManagement(setClientManagement.booleanValue());
    if(setDomainCookies!=null)        ac.setSetDomainCookies(setDomainCookies.booleanValue());
    if(setSessionManagement!=null)      ac.setSetSessionManagement(setSessionManagement.booleanValue());
    if(localMode!=-1)             ac.setLocalMode(localMode);
    if(locale!=null)             ac.setLocale(locale);
    if(timeZone!=null)             ac.setTimeZone(timeZone);
    if(sessionType!=-1)           ac.setSessionType(sessionType);
    if(triggerDataMember!=null)       ac.setTriggerComponentDataMember(triggerDataMember.booleanValue());
   
    if(cacheFunction!=null)         ac.setDefaultCacheName(Config.CACHE_DEFAULT_FUNCTION, cacheFunction);
    if(cacheObject!=null)           ac.setDefaultCacheName(Config.CACHE_DEFAULT_OBJECT, cacheObject);
    if(cacheQuery!=null)           ac.setDefaultCacheName(Config.CACHE_DEFAULT_QUERY, cacheQuery);
    if(cacheResource!=null)         ac.setDefaultCacheName(Config.CACHE_DEFAULT_RESOURCE, cacheResource);
    if(cacheTemplate!=null)         ac.setDefaultCacheName(Config.CACHE_DEFAULT_TEMPLATE, cacheTemplate);
   
    ac.setClientCluster(clientCluster);
    ac.setSessionCluster(sessionCluster);
    if(s3!=null)               ac.setS3(AppListenerUtil.toS3(s3));
   
    // ORM
    boolean initORM=false;
    ac.setORMEnabled(ormenabled);
    if(ormenabled) {
      initORM=true;
      AppListenerUtil.setORMConfiguration(pageContext, ac, ormsettings);
    }
   
   
    return initORM;
  }

  @Override
  public int doEndTag()  {
    return EVAL_PAGE;
  }

}
TOP

Related Classes of railo.runtime.tag.Application

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.