Package railo.runtime.type.wrap

Source Code of railo.runtime.type.wrap.ListAsArray

package railo.runtime.type.wrap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map.Entry;

import railo.commons.lang.CFTypes;
import railo.runtime.PageContext;
import railo.runtime.converter.LazyConverter;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.dump.DumpUtil;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.op.Caster;
import railo.runtime.op.Duplicator;
import railo.runtime.type.Array;
import railo.runtime.type.ArrayImpl;
import railo.runtime.type.Collection;
import railo.runtime.type.KeyImpl;
import railo.runtime.type.Sizeable;
import railo.runtime.type.Struct;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.it.EntryIterator;
import railo.runtime.type.it.KeyIterator;
import railo.runtime.type.it.StringIterator;
import railo.runtime.type.util.ArrayUtil;
import railo.runtime.type.util.MemberUtil;

/**
*
*/
public class ListAsArray implements Array,List,Sizeable {

  protected List list;
 
  private ListAsArray(List list) {
    this.list=list;
  }
 
  public static Array toArray(List list) {
    if(list instanceof ArrayAsList) return ((ArrayAsList)list).array;
    if(list instanceof Array) return (Array) list;
    return new ListAsArray(list);
  }
 
 
  @Override
  public Object append(Object o) throws PageException {
    list.add(o);
    return o;
  }
 
 
  @Override
  public Object appendEL(Object o) {
    list.add(o);
    return o;
  }

  @Override
  public boolean containsKey(int index) {
    return get(index-1,null)!=null;
  }

  @Override
  public Object get(int key, Object defaultValue) {
    try {
      Object rtn = list.get(key-1);
      if(rtn==null) return defaultValue;
      return rtn;
    }
    catch(Throwable t) {
      return defaultValue;
    }
  }

  @Override
  public Object getE(int key) throws PageException {
    try {
      Object rtn = list.get(key-1);
      if(rtn==null) throw new ExpressionException("Element at position ["+key+"] does not exist in list");
      return rtn;
    }
    catch(Throwable t) {
      throw new ExpressionException("Element at position ["+key+"] does not exist in list",t.getMessage());
    }
  }

  @Override
  public int getDimension() {
    return 1;
  }

  public boolean insert(int key, Object value) throws PageException {
    try {
    list.add(key-1, value);
    }
    catch(Throwable t) {
      throw new ExpressionException("can't insert value to array at position "+key+", array goes from 1 to "+size());
    }
    return true;
  }

  public int[] intKeys() {
    ListIterator lit = list.listIterator();
    ArrayList keys = new ArrayList();
    int index=0;
    Object v;
    while(lit.hasNext()) {
      index=lit.nextIndex()+1;
      v=lit.next();
      if(v!=null)keys.add(Integer.valueOf(index));
    }
    int[] intKeys = new int[keys.size()];
    Iterator it = keys.iterator();
    index=0;
    while(it.hasNext()) {
      intKeys[index++]=((Integer)it.next()).intValue();
    }
   
    return intKeys;
  }

  @Override
  public Object prepend(Object o) throws PageException {
    list.add(0,o);
    return o;
  }

  public Object removeE(int key) throws PageException {
    try {
    return list.remove(key-1);
    }
    catch(Throwable t) {
      throw new ExpressionException("can not remove Element at position ["+key+"]",t.getMessage());
    }
  }

  @Override
  public Object removeEL(int key) {
    try {
      return removeE(key);
    } catch (PageException e) {
      return null;
    }
  }

  public void resize(int to) throws PageException {
    while(size()<to)list.add(null);
  }

  @Override
  public Object setE(int key, Object value) throws PageException {
    if(key<=size()) {
      try {
      list.set(key-1, value);
      }
      catch(Throwable t) {
        throw new ExpressionException("can not set Element at position ["+key+"]",t.getMessage());
      }
     
    }
    else {
      while(size()<key-1)list.add(null);
      list.add(value);
    }
    return value;
  }

  @Override
  public Object setEL(int key, Object value) {
    try {
      return setE(key, value);
    } catch (Throwable t) {}
    return value;
  }

  @Override
  public void sort(String sortType, String sortOrder) throws PageException {
    sort(ArrayUtil.toComparator(null, sortType, sortOrder, false));
  }

  @Override
  public synchronized void sort(Comparator comp) throws PageException {
    if(getDimension()>1)
      throw new ExpressionException("only 1 dimensional arrays can be sorted");
    Collections.sort(list,comp);
  }

  @Override
  public Object[] toArray() {
    return list.toArray();
  }

  public ArrayList toArrayList() {
    return new ArrayList(list);
  }

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

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

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

  @Override
  public Collection duplicate(boolean deepCopy) {new ArrayImpl().duplicate(deepCopy);
    return new ListAsArray((List)Duplicator.duplicate(list,deepCopy));
  }

 

  @Override
  public Object get(String key) throws PageException {
    return getE(Caster.toIntValue(key));
  }

  @Override
  public Object get(Key key) throws PageException {
    return get(key.getString());
  }

  @Override
  public Object get(String key, Object defaultValue) {
    double index=Caster.toIntValue(key,Integer.MIN_VALUE);
    if(index==Integer.MIN_VALUE) return defaultValue;
      return get((int)index,defaultValue);
  }

  @Override
  public Object get(Key key, Object defaultValue) {
    return get(key.getString(),defaultValue);
  }

  @Override
  public Key[] keys() {
    int[] intKeys = intKeys();
    Collection.Key[] keys = new Collection.Key[intKeys.length];
    for(int i=0;i<intKeys.length;i++) {
      keys[i]=KeyImpl.init(Caster.toString(intKeys[i]));
    }
    return keys;
  }

  @Override
  public Object remove(Key key) throws PageException {
    return removeE(Caster.toIntValue(key.getString()));
  }

  @Override
  public Object removeEL(Key key) {
    double index=Caster.toIntValue(key.getString(),Integer.MIN_VALUE);
    if(index==Integer.MIN_VALUE) return null;
      return removeEL((int)index);
  }

  @Override
  public Object set(String key, Object value) throws PageException {
    return setE(Caster.toIntValue(key),value);
  }

  @Override
  public Object set(Key key, Object value) throws PageException {
    return set(key.getString(),value);
  }

  @Override
  public Object setEL(String key, Object value) {
    double index=Caster.toIntValue(key,Integer.MIN_VALUE);
    if(index==Integer.MIN_VALUE) return value;
      return setEL((int)index,value);
  }

  @Override
  public Object setEL(Key key, Object value) {
    return setEL(key.getString(), value);
  }

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

  public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
    return DumpUtil.toDumpData(list, pageContext,maxlevel,dp);
  }

  @Override
  public Iterator iterator() {
    return list.iterator();
  }

  @Override
  public Iterator<Collection.Key> keyIterator() {
    return new KeyIterator(keys());
  }
   
    @Override
  public Iterator<String> keysAsStringIterator() {
      return new StringIterator(keys());
    }
 
  @Override
  public Iterator<Entry<Key, Object>> entryIterator() {
    return new EntryIterator(this,keys());
  }

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

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


    @Override
    public boolean castToBooleanValue() throws PageException {
        throw new ExpressionException("Can't cast Complex Object Type "+Caster.toClassName(list)+" 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 "+Caster.toClassName(list)+" 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 "+Caster.toClassName(list)+" to a Date");
    }
   
    @Override
    public DateTime castToDateTime(DateTime defaultValue) {
        return defaultValue;
    }

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

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

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

  @Override
  public int compareTo(String str) throws PageException {
    throw new ExpressionException("can't compare Complex Object Type "+Caster.toClassName(list)+" with a String");
  }

  @Override
  public String toString() {
    return LazyConverter.serialize(this);
  }
 
  @Override
  public Object clone() {
    return duplicate(true);
  }

  @Override
  public boolean add(Object o) {
    return list.add(o);
  }

  @Override
  public void add(int index, Object element) {
    list.add(index, element);
  }

  @Override
  public boolean addAll(java.util.Collection c) {
    return list.addAll(c);
  }

  @Override
  public boolean addAll(int index, java.util.Collection c) {
    return list.addAll(index, c);
  }

  @Override
  public boolean contains(Object o) {
    return list.contains(o);
  }

  @Override
  public boolean containsAll(java.util.Collection c) {
    return list.contains(c);
  }

  @Override
  public Object get(int index) {
    return list.get(index);
  }

  @Override
  public int indexOf(Object o) {
    return list.indexOf(o);
  }

  @Override
  public boolean isEmpty() {
    return list.isEmpty();
  }

  @Override
  public int lastIndexOf(Object o) {
    return list.lastIndexOf(o);
  }

  @Override
  public ListIterator listIterator() {
    return list.listIterator();
  }

  @Override
  public ListIterator listIterator(int index) {
    return list.listIterator(index);
  }

  @Override
  public boolean remove(Object o) {
    return list.remove(o);
  }

  @Override
  public Object remove(int index) {
    return list.remove(index);
  }

  @Override
  public boolean removeAll(java.util.Collection c) {
    return list.removeAll(c);
  }

  @Override
  public boolean retainAll(java.util.Collection c) {
    return list.retainAll(c);
  }

  @Override
  public Object set(int index, Object element) {
    return list.set(index, element);
  }

  @Override
  public List subList(int fromIndex, int toIndex) {
    return list.subList(fromIndex, toIndex);
  }

  @Override
  public Object[] toArray(Object[] a) {
    return list.toArray(a);
  }


  @Override
  public List toList() {
    return this;
  }

  public Iterator valueIterator() {
    return list.iterator();
  }

  @Override
  public long sizeOf() {
    return ArrayUtil.sizeOf(list);
  }

  @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 {
    return MemberUtil.call(pc, this, methodName, args, CFTypes.TYPE_ARRAY, "array");
  }

  @Override
  public Object callWithNamedValues(PageContext pc, Key methodName, Struct args) throws PageException {
    return MemberUtil.callWithNamedValues(pc,this,methodName,args, CFTypes.TYPE_ARRAY, "array");
  }

  @Override
  public java.util.Iterator<Object> getIterator() {
      return valueIterator();
    }
}
TOP

Related Classes of railo.runtime.type.wrap.ListAsArray

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.