001    package railo.runtime.type.dt;
002    
003    import java.text.SimpleDateFormat;
004    import java.util.Locale;
005    
006    import railo.commons.date.DateTimeUtil;
007    import railo.runtime.PageContext;
008    import railo.runtime.dump.DumpData;
009    import railo.runtime.dump.DumpProperties;
010    import railo.runtime.dump.DumpTable;
011    import railo.runtime.dump.SimpleDumpData;
012    import railo.runtime.engine.ThreadLocalPageContext;
013    import railo.runtime.exp.PageException;
014    import railo.runtime.op.Operator;
015    import railo.runtime.type.SimpleValue;
016    
017    
018    /**
019     * Printable and Castable Date Object (no visible time)
020     */
021    public final class DateImpl extends  Date implements SimpleValue {
022            
023            private static SimpleDateFormat railoFormatter= new SimpleDateFormat("yyyy-MM-dd",Locale.US);
024            
025            //private TimeZone timezone;
026            
027    
028            public DateImpl() {
029                    this(null,System.currentTimeMillis());
030            }
031            public DateImpl(long utcTime) {
032                    this(null,utcTime);
033            }
034    
035            public DateImpl(PageContext pc) {
036                    this(pc,System.currentTimeMillis());
037            }
038            public DateImpl(PageContext pc, long utcTime) {
039                    super(DateTimeImpl.addOffset(ThreadLocalPageContext.getConfig(pc), utcTime));
040                    //this.timezone=ThreadLocalPageContext.getTimeZone(pc);
041            }
042            
043            public DateImpl(java.util.Date date) {
044                    super(date.getTime());
045                    /*if(date instanceof Localized) {
046                            Localized l=(Localized) date;
047                            this.timezone=l.getTimezone();
048                    }
049                    else timezone=ThreadLocalPageContext.getTimeZone();*/
050            }
051    
052            @Override
053            public String castToString() {
054                    synchronized (railoFormatter) {
055                    railoFormatter.setTimeZone(ThreadLocalPageContext.getTimeZone());
056                return "{d '"+railoFormatter.format(this)+"'}";
057            }
058            }
059    
060        @Override
061        public String castToString(String defaultValue) {
062            return castToString();
063        }
064    
065        @Override
066        public double toDoubleValue() {
067            return DateTimeUtil.getInstance().toDoubleValue(this);
068        }
069        
070        @Override
071        public double castToDoubleValue(double defaultValue) {
072            return DateTimeUtil.getInstance().toDoubleValue(this);
073        }
074    
075        @Override
076            public DumpData toDumpData(PageContext pageContext, int maxlevel, DumpProperties dp) {
077                    String str=castToString("");
078            DumpTable table=new DumpTable("date","#ff9900","#ffcc00","#000000");
079            table.appendRow(1, new SimpleDumpData("Date"), new SimpleDumpData(str));
080            return table;
081        }
082    
083        @Override
084        public boolean castToBooleanValue() throws PageException {
085            return DateTimeUtil.getInstance().toBooleanValue(this);
086        }
087        
088        @Override
089        public Boolean castToBoolean(Boolean defaultValue) {
090            return defaultValue;
091        }
092    
093        @Override
094        public double castToDoubleValue() {
095            return DateTimeUtil.getInstance().toDoubleValue(this);
096        }
097        
098        @Override
099        public DateTime castToDateTime() {
100            return this;
101        }
102        
103        
104        @Override
105        public DateTime castToDateTime(DateTime defaultValue) {
106            return this;
107        }
108    
109    
110            @Override
111            public int compareTo(boolean b) {
112                    return Operator.compare(castToDoubleValue(), b?1D:0D);
113            }
114    
115            @Override
116            public int compareTo(DateTime dt) throws PageException {
117                    return Operator.compare((java.util.Date)this, (java.util.Date)dt);
118            }
119    
120            @Override
121            public int compareTo(double d) throws PageException {
122                    return Operator.compare(castToDoubleValue(), d);
123            }
124    
125            @Override
126            public int compareTo(String str) {
127                    return Operator.compare(castToString(), str);
128            }
129    }