Package railo.runtime.type.scope

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

package railo.runtime.type.scope;

import java.util.Iterator;

import railo.runtime.PageContext;
import railo.runtime.config.NullSupportHelper;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.op.Duplicator;
import railo.runtime.type.Collection;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.util.CollectionUtil;
import railo.runtime.type.util.KeyConstants;
import railo.runtime.type.util.StructSupport;

/**
* caller scope
*/
public final class CallerImpl extends StructSupport implements Caller  {

  private static final long serialVersionUID = -6228400815042475435L;
 
  private PageContext pc;
    private Variables variablesScope;
    private Local localScope;
    private Argument argumentsScope;
    private boolean checkArgs;
   
   
    @Override
    public Object get(Collection.Key key) throws PageException  {
     
      char c=key.lowerCharAt(0);
    if('a'==c) {
      if(KeyConstants._application.equalsIgnoreCase(key))     return pc.applicationScope();
      else if(checkArgs && KeyConstants._arguments.equalsIgnoreCase(key))    return argumentsScope;//pc.argumentsScope();
    }
    else if('c'==c) {
      if(KeyConstants._cgi.equalsIgnoreCase(key))          return pc.cgiScope();
      if(KeyConstants._cookie.equalsIgnoreCase(key))        return pc.cookieScope();
      if(KeyConstants._client.equalsIgnoreCase(key))        return pc.clientScope();
      if(KeyConstants._cluster.equalsIgnoreCase(key))        return pc.clusterScope();
    }
    else if('f'==c) {
      if(KeyConstants._form.equalsIgnoreCase(key))        return pc.formScope();
    }
    else if('r'==c) {
      if(KeyConstants._request.equalsIgnoreCase(key))        return pc.requestScope();
    }
    else if('l'==c) {
      if(KeyConstants._local.equalsIgnoreCase(key) && checkArgsreturn localScope;//pc.localScope();
    }
    else if('s'==c) {
      if(KeyConstants._session.equalsIgnoreCase(key))        return pc.sessionScope();
      if(KeyConstants._server.equalsIgnoreCase(key))        return pc.serverScope();
    }
    else if('u'==c) {
      if(KeyConstants._url.equalsIgnoreCase(key))          return pc.urlScope();
    }
    else if('v'==c) {
      if(KeyConstants._variables.equalsIgnoreCase(key))      return variablesScope;
    }
     
      // upper variable scope
        Object o;
       
        if(checkArgs) {
            o=localScope.get(key,NullSupportHelper.NULL());
            if(o!=NullSupportHelper.NULL()) return o;
            o=argumentsScope.get(key,NullSupportHelper.NULL());
            if(o!=NullSupportHelper.NULL()) return o;
        }
        o=variablesScope.get(key,NullSupportHelper.NULL());
        if(o!=NullSupportHelper.NULL()) return o;
       
        // get from cascaded scopes
        o=((UndefinedImpl)pc.undefinedScope()).getCascading(key,NullSupportHelper.NULL());
        if(o!=NullSupportHelper.NULL()) return o;
       
        /*
        // get scopes
        if(key.equalsIgnoreCase(VARIABLES)) {
            return variablesScope;//new StructImpl(getMap());
        }
       
        scope=VariableInterpreter.scopeKey2Int(key);
        if(scope!=Scope.SCOPE_UNDEFINED)
            return pc.scope(scope);
        */
        throw new ExpressionException("["+key.getString() +"] not found in caller scope");
    }
   
    @Override
    public Object get(Collection.Key key, Object defaultValue) {
     
      char c=key.lowerCharAt(0);
    if('a'==c) {
      if(KeyConstants._application.equalsIgnoreCase(key)){
        try {
          return pc.applicationScope();
        }
        catch (PageException e) {}
      }
      else if(checkArgs && KeyConstants._arguments.equalsIgnoreCase(key))    return argumentsScope;//pc.argumentsScope();
    }
    else if('c'==c) {
      if(KeyConstants._cgi.equalsIgnoreCase(key))          return pc.cgiScope();
      if(KeyConstants._cookie.equalsIgnoreCase(key))        return pc.cookieScope();
      if(KeyConstants._client.equalsIgnoreCase(key)){
        try {
          return pc.clientScope();
        }
        catch (PageException e) {}
      }
      if(KeyConstants._cluster.equalsIgnoreCase(key)){
        try {
          return pc.clusterScope();
        }
        catch (PageException e) {}
      }
    }
    else if('f'==c) {
      if(KeyConstants._form.equalsIgnoreCase(key))        return pc.formScope();
    }
    else if('r'==c) {
      if(KeyConstants._request.equalsIgnoreCase(key))        return pc.requestScope();
    }
    else if('l'==c) {
      if(checkArgs && KeyConstants._local.equalsIgnoreCase(key))  return localScope;//pc.localScope();
    }
    else if('s'==c) {
      if(KeyConstants._session.equalsIgnoreCase(key)){
        try {
          return pc.sessionScope();
        }
        catch (PageException e) {}
      }
      if(KeyConstants._server.equalsIgnoreCase(key)){
        try {
          return pc.serverScope();
        }
        catch (PageException e) {}
      }
    }
    else if('u'==c) {
      if(KeyConstants._url.equalsIgnoreCase(key))          return pc.urlScope();
    }
    else if('v'==c) {
      if(KeyConstants._variables.equalsIgnoreCase(key))      return variablesScope;
    }
     
     
     
      Object o;
        if(checkArgs) {
            o=localScope.get(key,NullSupportHelper.NULL());
            if(o!=NullSupportHelper.NULL()) return o;
            o=argumentsScope.get(key,NullSupportHelper.NULL());
            if(o!=NullSupportHelper.NULL()) return o;
        }
        o=variablesScope.get(key,NullSupportHelper.NULL());
        if(o!=NullSupportHelper.NULL()) return o;
       
       
        // get from cascaded scopes
        o=((UndefinedImpl)pc.undefinedScope()).getCascading(key,NullSupportHelper.NULL());
        if(o!=NullSupportHelper.NULL()) return o;
       
        return defaultValue;
    }
   
    @Override
    public void initialize(PageContext pc) {
        this.pc=pc;
    }

    @Override
    public void setScope(Variables variablesScope, Local localScope, Argument argumentsScope, boolean checkArgs) {
      this.variablesScope = variablesScope;
        this.localScope = localScope;
        this.argumentsScope = argumentsScope;
        this.checkArgs = checkArgs;
    }

    @Override
    public boolean isInitalized() {
        return pc!=null;
    }

    @Override
    public void release() {
        this.pc=null;
    }

    @Override
    public void release(PageContext pc) {
        this.pc=null;
    }

    @Override
    public int size() {
        return variablesScope.size();
    }

    @Override
    public Collection.Key[] keys() {
      return CollectionUtil.keys(this);
    }

  @Override
  public Object remove(Collection.Key key) throws PageException {
        if(checkArgs && localScope.containsKey(key))
            return localScope.remove(key);
        return variablesScope.remove(key);
  }

  @Override
  public Object removeEL(Collection.Key key) {
        if(checkArgs && localScope.containsKey(key))
            return localScope.removeEL(key);
        return variablesScope.removeEL(key);
  }

    @Override
    public void clear() {
        variablesScope.clear();
    }

  public Object set(Key key, Object value) throws PageException {
        if(checkArgs) {
            if(localScope.containsKey(key))     return localScope.set(key,value);
            if(argumentsScope.containsKey(key))  return argumentsScope.set(key,value);
        }
        return variablesScope.set(key,value);
  }

  @Override
  public Object setEL(Key key, Object value) {
        if(checkArgs) {
            if(localScope.containsKey(key))     return localScope.setEL(key,value);
            if(argumentsScope.containsKey(key))  return argumentsScope.setEL(key,value);
        }
        return variablesScope.setEL(key,value);
  }

    @Override
    public Iterator<Collection.Key> keyIterator() {
        return variablesScope.keyIterator();
    }
   
    @Override
  public Iterator<String> keysAsStringIterator() {
      return variablesScope.keysAsStringIterator();
    }
 
  @Override
  public Iterator<Entry<Key, Object>> entryIterator() {
    return variablesScope.entryIterator();
  }
 
  @Override
  public Iterator<Object> valueIterator() {
    return variablesScope.valueIterator();
  }
   
    @Override
    public Collection duplicate(boolean deepCopy) {
        return (Collection) Duplicator.duplicate(variablesScope,deepCopy);
    }

  @Override
  public boolean containsKey(Collection.Key key) {
        return get(key,null)!=null;
  }

    @Override
  public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
      return variablesScope.toDumpData(pageContext, --maxlevel,dp);
    }

    @Override
    public String castToString() throws PageException {
        return variablesScope.castToString();
    }

    @Override
    public String castToString(String defaultValue) {
        return variablesScope.castToString(defaultValue);
    }
   
    @Override
    public boolean castToBooleanValue() throws PageException {
        return variablesScope.castToBooleanValue();
    }
   
    @Override
    public Boolean castToBoolean(Boolean defaultValue) {
        return variablesScope.castToBoolean(defaultValue);
    }

    @Override
    public double castToDoubleValue() throws PageException {
        return variablesScope.castToDoubleValue();
    }
   
    @Override
    public double castToDoubleValue(double defaultValue) {
        return variablesScope.castToDoubleValue(defaultValue);
    }

    @Override
    public DateTime castToDateTime() throws PageException {
        return variablesScope.castToDateTime();
    }
   
    @Override
    public DateTime castToDateTime(DateTime defaultValue) {
        return variablesScope.castToDateTime(defaultValue);
    }


  @Override
  public int compareTo(boolean b) throws PageException {
    return variablesScope.compareTo(b);
  }

  @Override
  public int compareTo(DateTime dt) throws PageException {
    return variablesScope.compareTo(dt);
  }

  @Override
  public int compareTo(double d) throws PageException {
    return variablesScope.compareTo(d);
  }

  @Override
  public int compareTo(String str) throws PageException {
    return variablesScope.compareTo(str);
  }

    @Override
    public int getType() {
        return SCOPE_CALLER;
    }

    @Override
    public String getTypeAsString() {
        return "caller";
    }

  @Override
  public boolean containsValue(Object value) {
    return variablesScope.containsValue(value);
  }

  @Override
  public java.util.Collection values() {
    return variablesScope.values();
  }

  @Override
  public Variables getVariablesScope() {
    return variablesScope;
  }

  @Override
  public Local getLocalScope() {
    return localScope;
  }

  @Override
  public Argument getArgumentsScope() {
    return argumentsScope;
  }
}
TOP

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

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.