package railo.runtime.type;
import java.util.Date;
import railo.runtime.PageContext;
import railo.runtime.dump.DumpData;
import railo.runtime.dump.DumpProperties;
import railo.runtime.dump.DumpTable;
import railo.runtime.exp.ExpressionException;
import railo.runtime.exp.PageException;
import railo.runtime.op.Caster;
import railo.runtime.op.Operator;
import railo.runtime.op.date.DateCaster;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.ref.Reference;
/**
* Simple Value Array, a Array that can't cast to a Simple Value
*/
public final class SVArray extends ArrayImpl implements Reference {
private int position=1;
/**
* Constructor of the class
*/
public SVArray() {
super();
}
/**
* Constructor of the class
* @param dimension
* @throws ExpressionException
*/
public SVArray(int dimension) throws ExpressionException {
super(dimension);
}
/**
* Constructor of the class
* @param objects
*/
public SVArray(Object[] objects) {
super(objects);
}
/**
* @return Returns the position.
*/
public int getPosition() {
return position;
}
/**
* @param position The position to set.
*/
public void setPosition(int position) {
this.position = position;
}
@Override
public Collection.Key getKey() {
return KeyImpl.init(Caster.toString(position));
}
@Override
public String getKeyAsString() {
return Caster.toString(position);
}
@Override
public Object get(PageContext pc) throws PageException {
return getE(position);
}
@Override
public Object get(PageContext pc, Object defaultValue) {
return get(position,defaultValue);
}
@Override
public Object touch(PageContext pc) throws PageException {
Object o=get(position,null);
if(o!=null) return o;
return setE(position,new StructImpl());
}
@Override
public Object touchEL(PageContext pc) {
Object o=get(position,null);
if(o!=null) return o;
return setEL(position,new StructImpl());
}
@Override
public Object set(PageContext pc, Object value) throws PageException {
return setE(position,value);
}
@Override
public Object setEL(PageContext pc, Object value) {
return setEL(position,value);
}
@Override
public Object remove(PageContext pc) throws PageException {
return removeE(position);
}
@Override
public Object removeEL(PageContext pc) {
return removeEL(position);
}
@Override
public Object getParent() {
return this;
}
@Override
public String castToString() throws PageException {
return Caster.toString(getE(position));
}
@Override
public String castToString(String defaultValue) {
Object value = get(position,null);
if(value==null) return defaultValue;
return Caster.toString(value,defaultValue);
}
@Override
public boolean castToBooleanValue() throws PageException {
return Caster.toBooleanValue(getE(position));
}
@Override
public Boolean castToBoolean(Boolean defaultValue) {
Object value = get(position,defaultValue);
if(value==null)return defaultValue;
return Caster.toBoolean(value,defaultValue);
}
@Override
public double castToDoubleValue() throws PageException {
return Caster.toDoubleValue(getE(position));
}
@Override
public double castToDoubleValue(double defaultValue) {
Object value = get(position,null);
if(value==null)return defaultValue;
return Caster.toDoubleValue(value,defaultValue);
}
@Override
public DateTime castToDateTime() throws PageException {
return Caster.toDate(getE(position),null);
}
@Override
public DateTime castToDateTime(DateTime defaultValue) {
Object value = get(position,defaultValue);
if(value==null)return defaultValue;
return DateCaster.toDateAdvanced(value, true, null, defaultValue);
}
@Override
public int compareTo(boolean b) throws PageException {
return Operator.compare(castToBooleanValue(), b);
}
@Override
public int compareTo(DateTime dt) throws PageException {
return Operator.compare((Date)castToDateTime(), (Date)dt);
}
@Override
public int compareTo(double d) throws PageException {
return Operator.compare(castToDoubleValue(), d);
}
@Override
public int compareTo(String str) throws PageException {
return Operator.compare(castToString(), str);
}
@Override
public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
DumpTable table= (DumpTable) super.toDumpData(pageContext, maxlevel,dp);
table.setTitle("SV Array");
return table;
}
@Override
public synchronized Object clone() {
return duplicate(true);
}
@Override
public synchronized Collection duplicate(boolean deepCopy) {
SVArray sva = new SVArray();
duplicate(sva,deepCopy);
sva.position=position;
return sva;
}
}