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    }