Package railo.runtime.type.util

Source Code of railo.runtime.type.util.StructSupport

package railo.runtime.type.util;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import railo.commons.lang.CFTypes;
import railo.commons.lang.ExceptionUtil;
import railo.runtime.PageContext;
import railo.runtime.config.Config;
import railo.runtime.converter.LazyConverter;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Sizeable;
import railo.runtime.type.Struct;
import railo.runtime.type.UDFPlus;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.it.KeyAsStringIterator;

public abstract class StructSupport implements Map,Struct,Sizeable {

  private static final long serialVersionUID = 7433668961838400995L;

  /**
   * throw exception for invalid key
   * @param key Invalid key
   * @return returns an invalid key Exception
   */
  public static ExpressionException invalidKey(Config config,Struct sct,Key key) {
    StringBuilder sb=new StringBuilder();
    Iterator<Key> it = sct.keyIterator();
    Key k;

    while(it.hasNext()){
      k = it.next();
      if( k.equals( key ) )
        return new ExpressionException( "the value from key [" + key.getString() + "] is NULL, which is the same as not existing in CFML" );
      if(sb.length()>0)sb.append(',');
      sb.append(k.getString());
    }
    config=ThreadLocalPageContext.getConfig(config);
    if(config!=null && config.debug())
      return new ExpressionException(ExceptionUtil.similarKeyMessage(sct, key.getString(), "key", "keys",true));
   
   
    return new ExpressionException( "key [" + key.getString() + "] doesn't exist (existing keys:" + sb.toString() + ")" );
  }
 
  @Override
  public long sizeOf() {
    return StructUtil.sizeOf(this);
  }
 
  @Override
  public Set entrySet() {
    return StructUtil.entrySet(this);
  }

  @Override
  public final Object get(Object key) {
    return get(KeyImpl.toKey(key,null), null);
  }

  @Override
  public final boolean isEmpty() {
    return size()==0;
  }

  @Override
  public Set keySet() {
    return StructUtil.keySet(this);
  }

  @Override
  public Object put(Object key, Object value) {
    return setEL(KeyImpl.toKey(key,null), value);
  }

  @Override
  public final void putAll(Map t) {
    StructUtil.putAll(this, t);
  }

  @Override
  public final Object remove(Object key) {
    return removeEL(KeyImpl.toKey(key,null));
  }

  @Override
  public final Object clone(){
    return duplicate(true);
  }
 
  @Override
  public final boolean containsKey(Object key) {
    return containsKey(KeyImpl.toKey(key,null));
  }

  @Override
  public final boolean containsKey(String key) {
    return containsKey(KeyImpl.init(key));
  }

  @Override
  public final Object get(String key, Object defaultValue) {
    return get(KeyImpl.init(key), defaultValue);
  }

  @Override
  public final Object get(String key) throws PageException {
    return get(KeyImpl.init(key));
  }

  @Override
  public final Object set(String key, Object value) throws PageException {
    return set(KeyImpl.init(key), value);
  }

  @Override
  public final Object setEL(String key, Object value) {
    return setEL(KeyImpl.init(key), value);
  }

  @Override
  public DumpData toDumpData(PageContext pageContext, int maxlevel,DumpProperties properties) {
    return StructUtil.toDumpTable(this,"Struct",pageContext,maxlevel,properties);
  }

  @Override
  public boolean castToBooleanValue() throws PageException {
        throw new ExpressionException("can't cast Complex Object Type Struct to a boolean value");
    }
   
    @Override
  public Boolean castToBoolean(Boolean defaultValue) {
        return defaultValue;
    }

    @Override
  public double castToDoubleValue() throws PageException {
        throw new ExpressionException("can't cast Complex Object Type Struct to a number value");
    }
   
    @Override
  public double castToDoubleValue(double defaultValue) {
        return defaultValue;
    }

    @Override
  public DateTime castToDateTime() throws PageException {
        throw new ExpressionException("can't cast Complex Object Type Struct to a Date");
    }
   
    @Override
  public DateTime castToDateTime(DateTime defaultValue) {
        return defaultValue;
    }

    @Override
  public String castToString() throws PageException {
        throw new ExpressionException("Can't cast Complex Object Type Struct to String",
          "Use Built-In-Function \"serialize(Struct):String\" to create a String from Struct");
    }

    @Override
  public String castToString(String defaultValue) {
        return defaultValue;
    }

    @Override
  public int compareTo(boolean b) throws PageException {
    throw new ExpressionException("can't compare Complex Object Type Struct with a boolean value");
  }

  @Override
  public int compareTo(DateTime dt) throws PageException {
    throw new ExpressionException("can't compare Complex Object Type Struct with a DateTime Object");
  }

  @Override
  public int compareTo(double d) throws PageException {
    throw new ExpressionException("can't compare Complex Object Type Struct with a numeric value");
  }

  @Override
  public int compareTo(String str) throws PageException {
    throw new ExpressionException("can't compare Complex Object Type Struct with a String");
  }
 
  @Override
  public String toString() {
    return LazyConverter.serialize(this);
  }

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

  @Override
  public boolean containsValue(Object value) {
    return values().contains(value);
  }
 
    @Override
  public Iterator<String> keysAsStringIterator() {
      return new KeyAsStringIterator(keyIterator());
    }

    @Override
  public Object get(PageContext pc, Key key, Object defaultValue) {
    return get(key, defaultValue);
  }

    @Override
  public Object get(PageContext pc, Key key) throws PageException {
    return get(key);
  }

    @Override
  public Object set(PageContext pc, Key propertyName, Object value) throws PageException {
    return set(propertyName, value);
  }

    @Override
  public Object setEL(PageContext pc, Key propertyName, Object value) {
    return setEL(propertyName, value);
  }

    @Override
  public Object call(PageContext pc, Key methodName, Object[] args) throws PageException {
    Object obj = get(methodName,null);
    if(obj instanceof UDFPlus) {
      return ((UDFPlus)obj).call(pc,methodName,args,false);
    }
    return MemberUtil.call(pc, this, methodName, args, CFTypes.TYPE_STRUCT, "struct");
  }

    @Override
  public Object callWithNamedValues(PageContext pc, Key methodName, Struct args) throws PageException {
    Object obj = get(methodName,null);
    if(obj instanceof UDFPlus) {
      return ((UDFPlus)obj).callWithNamedValues(pc,methodName,args,false);
    }
    return MemberUtil.callWithNamedValues(pc,this,methodName,args, CFTypes.TYPE_STRUCT, "struct");
  }
   
    public java.util.Iterator<String> getIterator() {
      return keysAsStringIterator();
    }

    @Override
  public boolean equals(Object obj){
    if(!(obj instanceof Collection)) return false;
    return CollectionUtil.equals(this,(Collection)obj);
  }

    /*@Override
  public int hashCode() {
    return CollectionUtil.hashCode(this);
  }*/
TOP

Related Classes of railo.runtime.type.util.StructSupport

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.