Package railo.runtime.type.scope

Source Code of railo.runtime.type.scope.ServerImpl

package railo.runtime.type.scope;

import java.io.File;

import railo.commons.io.SystemUtil;
import railo.commons.lang.ClassUtil;
import railo.commons.lang.StringUtil;
import railo.runtime.Info;
import railo.runtime.PageContext;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.i18n.LocaleFactory;
import railo.runtime.instrumentation.InstrumentationUtil;
import railo.runtime.op.Caster;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.ReadOnlyStruct;
import railo.runtime.type.dt.DateTimeImpl;
import railo.runtime.type.util.KeyConstants;


/**
* Server Scope
*/
public final class ServerImpl extends ScopeSupport implements Server,SharedScope {

  private static final DateTimeImpl expired=new DateTimeImpl(2145913200000L,false);

  private static final Key PRODUCT_NAME = KeyImpl.intern("productname");
  private static final Key PRODUCT_LEVEL = KeyImpl.intern("productlevel");
    private static final Key PRODUCT_CONTEXT_COUNT = KeyImpl.intern("productcontextcount");
    private static final Key PRODUCT_VERSION = KeyImpl.intern("productversion");
    private static final Key SERIAL_NUMBER = KeyImpl.intern("serialnumber");
    private static final Key APP_SERVER =KeyConstants._appserver;
    private static final Key EXPIRATION = KeyImpl.intern("expiration");
    private static final Key INSTALL_KIT = KeyImpl.intern("installkit");
    private static final Key ROOT_DIR = KeyImpl.intern("rootdir");
    private static final Key SUPPORTED_LOCALES = KeyImpl.intern("supportedlocales");
    private static final Key  COLDFUSION= KeyConstants._coldfusion;
    private static final Key  SERVLET= KeyConstants._servlet;
    private static final Key  ARCH= KeyImpl.intern("arch");
    private static final Key  MAC_ADDRESS= KeyImpl.intern("macAddress");
    private static final Key  ARCH_MODEL= KeyImpl.intern("archModel");
//  private static final Key  JAVA_AGENT_PATH = KeyImpl.intern("javaAgentPath");
    private static final Key  JAVA_EXECUTION_PATH = KeyImpl.intern("executionPath");
    private static final Key  JAVA_AGENT_SUPPORTED = KeyImpl.intern("javaAgentSupported");
    private static final Key  LOADER_VERSION= KeyImpl.intern("loaderVersion");
    private static final Key  LOADER_PATH = KeyImpl.intern("loaderPath");
    private static final Key  VERSION= KeyConstants._version;
    private static final Key  ADDITIONAL_INFORMATION= KeyImpl.intern("additionalinformation");
    private static final Key BUILD_NUMBER = KeyImpl.intern("buildnumber");
    private static final Key OS = KeyConstants._os;
    private static final Key STATE = KeyConstants._state;
    private static final Key RELEASE_DATE = KeyImpl.intern("release-date");
    private static final Key RAILO = KeyConstants._railo;
    private static final Key FILE = KeyConstants._file;
    private static final Key SEPARATOR = KeyConstants._separator;
    private static final Key VENDOR = KeyImpl.intern("vendor");
    private static final Key FREE_MEMORY = KeyImpl.intern("freeMemory");
    private static final Key MAX_MEMORY = KeyImpl.intern("maxMemory");
    private static final Key TOTAL_MEMORY = KeyImpl.intern("totalMemory");
    private static final Key JAVA = KeyConstants._java;
  private static final Key VERSION_NAME = KeyImpl.intern("versionName");
  private static final Key VERSION_NAME_EXPLANATION = KeyImpl.intern("versionNameExplanation");

  private static String jap;

  private static String jep;

  /*
    Supported CFML Application
   
    Blog
    - http://www.blogcfm.org
   
   
   
    */
  /**
   * constructor of the server scope
   * @param pc
   */
  public ServerImpl(PageContext pc) {
    super(true,"server",SCOPE_SERVER);
    reload(pc);

  }
 
  @Override
  public void reload() { 
    reload(ThreadLocalPageContext.get());
  }
 
  public void reload(PageContext pc) {   
     
      ReadOnlyStruct coldfusion=new ReadOnlyStruct();
      coldfusion.setEL(PRODUCT_LEVEL,Info.getLevel());
      //coldfusion.setEL(PRODUCT_CONTEXT_COUNT,"inf");
      coldfusion.setEL(PRODUCT_VERSION,"10,0,0,0");
      //coldfusion.setEL(PRODUCT_VERSION,"8,0,0,1");
      coldfusion.setEL(SERIAL_NUMBER,"0");
      coldfusion.setEL(PRODUCT_NAME,"Railo");
     
      // TODO scope server missing values
      coldfusion.setEL(APP_SERVER,"");// Jrun
      coldfusion.setEL(EXPIRATION,expired);//
      coldfusion.setEL(INSTALL_KIT,"");//
     
      String rootdir="";
      try{
        rootdir=ThreadLocalPageContext.getConfig(pc).getRootDirectory().getAbsolutePath();
      }
      catch(Throwable t){}
      coldfusion.setEL(ROOT_DIR,rootdir);//

     
      coldfusion.setEL(SUPPORTED_LOCALES,LocaleFactory.getLocaleList());//
     
     
      coldfusion.setReadOnly(true);
    super.setEL (COLDFUSION,coldfusion);
   
    ReadOnlyStruct os=new ReadOnlyStruct();
      os.setEL(KeyConstants._name,System.getProperty("os.name") );
      os.setEL(ARCH,System.getProperty("os.arch") );
      os.setEL(MAC_ADDRESS,SystemUtil.getMacAddress());
      int arch=SystemUtil.getOSArch();
      if(arch!=SystemUtil.ARCH_UNKNOW)os.setEL(ARCH_MODEL,new Double(arch) );
      os.setEL(VERSION,System.getProperty("os.version") );
      os.setEL(ADDITIONAL_INFORMATION,"");
      os.setEL(BUILD_NUMBER,"");

     
      os.setReadOnly(true);
    super.setEL (OS,os);
   
    ReadOnlyStruct railo=new ReadOnlyStruct();
      railo.setEL(VERSION,Info.getVersionAsString());
      railo.setEL(VERSION_NAME,Info.getVersionName());
      railo.setEL(VERSION_NAME_EXPLANATION,Info.getVersionNameExplanation());
      railo.setEL(STATE,Info.getStateAsString());
      railo.setEL(RELEASE_DATE,Info.getRealeaseDate());
      railo.setEL(LOADER_VERSION,Caster.toDouble(SystemUtil.getLoaderVersion()));
      railo.setEL(LOADER_PATH, ClassUtil.getSourcePathForClass("railo.loader.servlet.CFMLServlet", ""));

      railo.setReadOnly(true);
    super.setEL (RAILO,railo);

    ReadOnlyStruct separator=new ReadOnlyStruct();
      separator.setEL(KeyConstants._path,System.getProperty("path.separator"));
      separator.setEL(FILE,System.getProperty("file.separator"));
      separator.setEL(KeyConstants._line,System.getProperty("line.separator"));
      separator.setReadOnly(true);
    super.setEL (SEPARATOR,separator);
     
    ReadOnlyStruct java=new ReadOnlyStruct();
      java.setEL(VERSION,System.getProperty("java.version"));
      java.setEL(VENDOR,System.getProperty("java.vendor"));
      arch=SystemUtil.getJREArch();
      if(arch!=SystemUtil.ARCH_UNKNOW)java.setEL(ARCH_MODEL,new Double(arch) );
      Runtime rt = Runtime.getRuntime();
      java.setEL(FREE_MEMORY,new Double(rt.freeMemory()));
      java.setEL(TOTAL_MEMORY,new Double(rt.totalMemory()));
      java.setEL(MAX_MEMORY,new Double(rt.maxMemory()));
      java.setEL(JAVA_AGENT_SUPPORTED,Caster.toBoolean(InstrumentationUtil.isSupported()));
     
      //if(jap==null) jap=JavaUtil.getSourcePathForClass("railo.runtime.instrumentation.Agent");
      //java.setEL(JAVA_AGENT_PATH, jap);
     
      if(jep==null) {
        String temp = System.getProperty( "user.dir", "" );
        if ( !StringUtil.isEmpty(temp) && !temp.endsWith( File.separator ) )
          temp = temp + File.separator;
        jep=temp;
      }
      java.setEL( JAVA_EXECUTION_PATH, jep );

      java.setReadOnly(true);
      super.setEL (JAVA,java);
   

      ReadOnlyStruct servlet=new ReadOnlyStruct();
      String name="";
      try{
        name=pc.getServletContext().getServerInfo();
      }
      catch(Throwable t){}
      servlet.setEL(KeyConstants._name,name);
      servlet.setReadOnly(true);
     
     
      super.setEL (SERVLET,servlet);
     
  }

  @Override
  public Object set(Collection.Key key, Object value) throws PageException {
    if(isReadOnlyKey(key))
      throw new ExpressionException("you can't rewrite key ["+key+"] from server scope, key is readonly");
    return super.set (key, value);
  }


  @Override
  public Object setEL(Collection.Key key, Object value) {
    if(!isReadOnlyKey(key))return super.setEL (key, value);
    return value;
  }
 
  /**
   * returns if the key is a readonly key
   * @param key key to check
   * @return is readonly
   */
  private boolean isReadOnlyKey(Collection.Key key) {
   
    return (key.equals(JAVA) ||
        key.equals(SEPARATOR) ||
        key.equals(OS) ||
        key.equals(COLDFUSION) ||
        key.equals(RAILO));
  }

  public void touchBeforeRequest(PageContext pc) {
    // do nothing
  }

  public void touchAfterRequest(PageContext pc) {
    // do nothing
  }
}
TOP

Related Classes of railo.runtime.type.scope.ServerImpl

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.