001 package railo.runtime.type; 002 003 import java.util.Date; 004 005 import railo.runtime.PageContext; 006 import railo.runtime.dump.DumpData; 007 import railo.runtime.dump.DumpProperties; 008 import railo.runtime.dump.DumpTable; 009 import railo.runtime.dump.DumpUtil; 010 import railo.runtime.dump.SimpleDumpData; 011 import railo.runtime.exp.PageException; 012 import railo.runtime.op.Caster; 013 import railo.runtime.op.Duplicator; 014 import railo.runtime.op.Operator; 015 import railo.runtime.op.date.DateCaster; 016 import railo.runtime.type.dt.DateTime; 017 018 public final class CastableStruct extends StructImpl { 019 020 private Object value; 021 022 public CastableStruct() { 023 } 024 public CastableStruct(Object value) { 025 this.value=value; 026 } 027 public CastableStruct(Object value, int type) { 028 super(type); 029 this.value=value; 030 } 031 032 /** 033 * @return the value 034 */ 035 public Object getValue() { 036 return value; 037 } 038 039 /** 040 * @param value the value to set 041 */ 042 public void setValue(Object value) { 043 this.value = value; 044 } 045 046 @Override 047 public boolean castToBooleanValue() throws PageException { 048 if(value==null) return super.castToBooleanValue(); 049 return Caster.toBooleanValue(value); 050 051 } 052 053 @Override 054 public Boolean castToBoolean(Boolean defaultValue) { 055 if(value==null) return super.castToBoolean(defaultValue); 056 return Caster.toBoolean(value,defaultValue); 057 } 058 059 @Override 060 public DateTime castToDateTime() throws PageException { 061 if(value==null) return super.castToDateTime(); 062 return Caster.toDate(value, null); 063 } 064 065 @Override 066 public DateTime castToDateTime(DateTime defaultValue) { 067 if(value==null) return super.castToDateTime(defaultValue); 068 return DateCaster.toDateAdvanced(value,true,null,defaultValue); 069 } 070 071 @Override 072 public double castToDoubleValue() throws PageException { 073 if(value==null) return super.castToDoubleValue(); 074 return Caster.toDoubleValue(value); 075 } 076 077 @Override 078 public double castToDoubleValue(double defaultValue) { 079 if(value==null) return super.castToDoubleValue(defaultValue); 080 return Caster.toDoubleValue(value,defaultValue); 081 } 082 083 @Override 084 public String castToString() throws PageException { 085 if(value==null) return super.castToString(); 086 return Caster.toString(value); 087 } 088 089 @Override 090 public String castToString(String defaultValue) { 091 if(value==null) return super.castToString(defaultValue); 092 return Caster.toString(value,defaultValue); 093 } 094 095 @Override 096 public int compareTo(boolean b) throws PageException { 097 if(value==null) return super.compareTo(b); 098 return Operator.compare(value, b); 099 } 100 101 @Override 102 public int compareTo(DateTime dt) throws PageException { 103 if(value==null) return super.compareTo(dt); 104 return Operator.compare(value, (Date)dt); 105 } 106 107 @Override 108 public int compareTo(double d) throws PageException { 109 if(value==null) return super.compareTo(d); 110 return Operator.compare(value,d); 111 } 112 113 @Override 114 public int compareTo(String str) throws PageException { 115 if(value==null) return super.compareTo(str); 116 return Operator.compare(value, str); 117 } 118 119 @Override 120 public Collection duplicate(boolean deepCopy) { 121 if(value==null) return super.duplicate(deepCopy); 122 Struct sct=new CastableStruct(deepCopy?Duplicator.duplicate(value,deepCopy):value); 123 copy(this,sct,deepCopy); 124 return sct; 125 } 126 127 @Override 128 public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) { 129 if(value==null) return super.toDumpData(pageContext, maxlevel,dp); 130 DumpTable table = new DumpTable("struct","#9999ff","#ccccff","#000000"); 131 table.setTitle("Value Struct"); 132 maxlevel--; 133 table.appendRow(1,new SimpleDumpData("value"),DumpUtil.toDumpData(value, pageContext,maxlevel,dp)); 134 table.appendRow(1,new SimpleDumpData("struct"),super.toDumpData(pageContext, maxlevel,dp)); 135 136 return table; 137 } 138 139 140 141 }