001    package railo.runtime.op;
002    
003    import java.awt.Color;
004    import java.io.File;
005    import java.io.Serializable;
006    import java.util.Iterator;
007    import java.util.List;
008    import java.util.Locale;
009    import java.util.Map;
010    import java.util.TimeZone;
011    
012    import org.w3c.dom.Node;
013    import org.w3c.dom.NodeList;
014    
015    import railo.commons.color.ColorCaster;
016    import railo.commons.io.res.Resource;
017    import railo.commons.io.res.util.ResourceUtil;
018    import railo.runtime.PageContext;
019    import railo.runtime.engine.ThreadLocalPageContext;
020    import railo.runtime.exp.CasterException;
021    import railo.runtime.exp.PageException;
022    import railo.runtime.op.date.DateCaster;
023    import railo.runtime.type.Array;
024    import railo.runtime.type.Collection;
025    import railo.runtime.type.Query;
026    import railo.runtime.type.Struct;
027    import railo.runtime.type.dt.DateTime;
028    import railo.runtime.type.dt.TimeSpan;
029    import railo.runtime.util.Cast;
030    
031    /**
032     * Implementation of the cast interface
033     */
034    public final class CastImpl implements Cast {
035    
036        private static CastImpl singelton;
037    
038        @Override
039        public Object castTo(PageContext pc, short type, Object o) throws PageException {
040            return Caster.castTo(pc,type,o);
041        }
042    
043        @Override
044        public Object castTo(PageContext pc, short type, String strType, Object o) throws PageException {
045            return Caster.castTo(pc,type,strType,o);
046        }
047    
048        @Override
049        public Object castTo(PageContext pc, String type, Object o) throws PageException {
050            return Caster.castTo(pc,type,o,false);
051        }
052        public Object castTo(PageContext pc, String type, Object o, boolean alsoPattern) throws PageException {
053            return Caster.castTo(pc,type,o,alsoPattern);
054        }
055    
056        @Override
057        public Array toArray(Object obj, Array defaultValue) {
058            return Caster.toArray(obj,defaultValue);
059        }
060    
061        @Override
062        public Array toArray(Object obj) throws PageException {
063            return Caster.toArray(obj);
064        }
065    
066        @Override
067        public String toBase64(Object o, String defaultValue) {
068            return Caster.toBase64(o,null,defaultValue);
069        }
070    
071        @Override
072        public String toBase64(Object o) throws PageException {
073            return Caster.toBase64(o,null);
074        }
075    
076        @Override
077        public byte[] toBinary(Object obj, byte[] defaultValue) {
078            return Caster.toBinary(obj,defaultValue);
079        }
080    
081        @Override
082        public byte[] toBinary(Object obj) throws PageException {
083            return Caster.toBinary(obj);
084        }
085    
086        @Override
087        public Boolean toBoolean(boolean b) {
088            return Caster.toBoolean(b);
089        }
090    
091        @Override
092        public Boolean toBoolean(char c) {
093            return Caster.toBoolean(c);
094        }
095    
096        @Override
097        public Boolean toBoolean(double d) {
098            return Caster.toBoolean(d);
099        }
100    
101        @Override
102        public Boolean toBoolean(Object o, Boolean defaultValue) {
103            return Caster.toBoolean(o,defaultValue);
104        }
105    
106        @Override
107        public Boolean toBoolean(Object o) throws PageException {
108            return Caster.toBoolean(o);
109        }
110    
111        @Override
112        public Boolean toBoolean(String str, Boolean defaultValue) {
113            return Caster.toBoolean(str,defaultValue);
114        }
115    
116        @Override
117        public Boolean toBoolean(String str) throws PageException {
118            return Caster.toBoolean(str);
119        }
120    
121        @Override
122        public boolean toBooleanValue(boolean b) {
123            return Caster.toBooleanValue(b);
124        }
125    
126        @Override
127        public boolean toBooleanValue(char c) {
128            return Caster.toBooleanValue(c);
129        }
130    
131        @Override
132        public boolean toBooleanValue(double d) {
133            return Caster.toBooleanValue(d);
134        }
135    
136        @Override
137        public boolean toBooleanValue(Object o, boolean defaultValue) {
138            return Caster.toBooleanValue(o,defaultValue);
139        }
140    
141        @Override
142        public boolean toBooleanValue(Object o) throws PageException {
143            return Caster.toBooleanValue(o);
144        }
145    
146        @Override
147        public boolean toBooleanValue(String str, boolean defaultValue) {
148            return Caster.toBooleanValue(str,defaultValue);
149        }
150    
151        @Override
152        public boolean toBooleanValue(String str) throws PageException {
153            return Caster.toBooleanValue(str);
154        }
155    
156        @Override
157        public Byte toByte(boolean b) {
158            return Caster.toByte(b);
159        }
160    
161        @Override
162        public Byte toByte(char c) {
163            return Caster.toByte(c);
164        }
165    
166        @Override
167        public Byte toByte(double d) {
168            return Caster.toByte(d);
169        }
170    
171        @Override
172        public Byte toByte(Object o, Byte defaultValue) {
173            return Caster.toByte(o,defaultValue);
174        }
175    
176        @Override
177        public Byte toByte(Object o) throws PageException {
178            return Caster.toByte(o);
179        }
180    
181        @Override
182        public byte toByteValue(boolean b) {
183            return Caster.toByteValue(b);
184        }
185    
186        @Override
187        public byte toByteValue(char c) {
188            return Caster.toByteValue(c);
189        }
190    
191        @Override
192        public byte toByteValue(double d) {
193            return Caster.toByteValue(d);
194        }
195    
196        @Override
197        public byte toByteValue(Object o, byte defaultValue) {
198            return Caster.toByteValue(o,defaultValue);
199        }
200    
201        @Override
202        public byte toByteValue(Object o) throws PageException {
203            return Caster.toByteValue(o);
204        }
205    
206        @Override
207        public Character toCharacter(boolean b) {
208            return Caster.toCharacter(b);
209        }
210    
211        @Override
212        public Character toCharacter(char c) {
213            return Caster.toCharacter(c);
214        }
215    
216        @Override
217        public Character toCharacter(double d) {
218            return Caster.toCharacter(d);
219        }
220    
221        @Override
222        public Character toCharacter(Object o, Character defaultValue) {
223            return Caster.toCharacter(o,defaultValue);
224        }
225    
226        @Override
227        public Character toCharacter(Object o) throws PageException {
228            return Caster.toCharacter(o);
229        }
230    
231        @Override
232        public char toCharValue(boolean b) {
233            return Caster.toCharValue(b);
234        }
235    
236        @Override
237        public char toCharValue(char c) {
238            return Caster.toCharValue(c);
239        }
240    
241        @Override
242        public char toCharValue(double d) {
243            return Caster.toCharValue(d);
244        }
245    
246        @Override
247        public char toCharValue(Object o, char defaultValue) {
248            return Caster.toCharValue(o,defaultValue);
249        }
250    
251        @Override
252        public char toCharValue(Object o) throws PageException {
253            return Caster.toCharValue(o);
254        }
255    
256        @Override
257        public Collection toCollection(Object o, Collection defaultValue) {
258            return Caster.toCollection(o,defaultValue);
259        }
260    
261        @Override
262        public Collection toCollection(Object o) throws PageException {
263            return Caster.toCollection(o);
264        }
265        
266        @Override
267        public Color toColor(Object o) throws PageException {
268            if(o instanceof Color) return (Color) o;
269            else if (o instanceof String)ColorCaster.toColor((String)o);
270            else if (o instanceof Number)ColorCaster.toColor(Integer.toHexString(((Number)o).intValue()));
271            throw new CasterException(o,Color.class);
272        }
273    
274        
275        @Override
276        public DateTime toDate(boolean b, TimeZone tz) {
277            return Caster.toDate(b,tz);
278        }
279    
280        @Override
281        public DateTime toDate(char c, TimeZone tz) {
282            return Caster.toDate(c,tz);
283        }
284    
285        @Override
286        public DateTime toDate(double d, TimeZone tz) {
287            return Caster.toDate(d,tz);
288        }
289    
290        @Override
291        public DateTime toDate(Locale locale, String str, TimeZone tz, DateTime defaultValue) {
292            return DateCaster.toDateTime(locale,str,tz,defaultValue,true);
293        }
294    
295        @Override
296        public DateTime toDate(Locale locale, String str, TimeZone tz) throws PageException {
297            return DateCaster.toDateTime(locale,str,tz,true);
298        }
299    
300        @Override
301        public DateTime toDate(Object o, boolean alsoNumbers, TimeZone tz, DateTime defaultValue) {
302            return Caster.toDate(o,alsoNumbers,tz,defaultValue);
303        }
304    
305        @Override
306        public DateTime toDate(Object o, TimeZone tz) throws PageException {
307            return Caster.toDate(o,tz);
308        }
309    
310        @Override
311        public DateTime toDate(String str, boolean alsoNumbers, TimeZone tz, DateTime defaultValue) {
312            return Caster.toDate(str,alsoNumbers,tz,defaultValue);
313        }
314    
315        @Override
316        public DateTime toDate(String str, TimeZone tz) throws PageException {
317            return Caster.toDate(str,tz);
318        }
319    
320        @Override
321        public DateTime toDatetime(Object o, TimeZone tz) throws PageException {
322            return Caster.toDate(o,tz);
323        }
324    
325        @Override
326        public DateTime toDateTime(Object o, TimeZone tz) throws PageException {
327            return Caster.toDate(o,tz);
328        }
329    
330        @Override
331        public String toDecimal(boolean b) {
332            return Caster.toDecimal(b);
333        }
334    
335        @Override
336        public String toDecimal(char c) {
337            return Caster.toDecimal(c);
338        }
339    
340        @Override
341        public String toDecimal(double d) {
342            return Caster.toDecimal(d);
343        }
344    
345        @Override
346        public String toDecimal(Object value, String defaultValue) {
347            return Caster.toDecimal(value,defaultValue);
348        }
349    
350        @Override
351        public String toDecimal(Object value) throws PageException {
352            return Caster.toDecimal(value);
353        }
354    
355        @Override
356        public Double toDouble(boolean b) {
357            return Caster.toDouble(b);
358        }
359    
360        @Override
361        public Double toDouble(char c) {
362            return Caster.toDouble(c);
363        }
364    
365        @Override
366        public Double toDouble(double d) {
367            return Caster.toDouble(d);
368        }
369    
370        @Override
371        public Double toDouble(Object o, Double defaultValue) {
372            return Caster.toDouble(o,defaultValue);
373        }
374    
375        @Override
376        public Double toDouble(Object o) throws PageException {
377            return Caster.toDouble(o);
378        }
379    
380        @Override
381        public Double toDouble(String str, Double defaultValue) {
382            return Caster.toDouble(str,defaultValue);
383        }
384    
385        @Override
386        public Double toDouble(String str) throws PageException {
387            return Caster.toDouble(str);
388        }
389    
390        @Override
391        public double toDoubleValue(boolean b) {
392            return Caster.toDoubleValue(b);
393        }
394    
395        @Override
396        public double toDoubleValue(char c) {
397            return Caster.toDoubleValue(c);
398        }
399    
400        @Override
401        public double toDoubleValue(double d) {
402            return Caster.toDoubleValue(d);
403        }
404    
405        @Override
406        public double toDoubleValue(Object o, double defaultValue) {
407            return Caster.toDoubleValue(o,defaultValue);
408        }
409    
410        @Override
411        public double toDoubleValue(Object o) throws PageException {
412            return Caster.toDoubleValue(o);
413        }
414    
415        @Override
416        public double toDoubleValue(String str, double defaultValue) {
417            return Caster.toDoubleValue(str,defaultValue);
418        }
419    
420        @Override
421        public double toDoubleValue(String str) throws PageException {
422            return Caster.toDoubleValue(str);
423        }
424    
425        @Override
426        public File toFile(Object obj, File defaultValue) {
427            return Caster.toFile(obj,defaultValue);
428        }
429    
430        @Override
431        public File toFile(Object obj) throws PageException {
432            return Caster.toFile(obj);
433        }
434    
435        @Override
436        public Integer toInteger(boolean b) {
437            return Caster.toInteger(b);
438        }
439    
440        @Override
441        public Integer toInteger(char c) {
442            return Caster.toInteger(c);
443        }
444    
445        @Override
446        public Integer toInteger(double d) {
447            return Caster.toInteger(d);
448        }
449    
450        @Override
451        public Integer toInteger(Object o, Integer defaultValue) {
452            return Caster.toInteger(o,defaultValue);
453        }
454    
455        @Override
456        public Integer toInteger(Object o) throws PageException {
457            return Caster.toInteger(o);
458        }
459    
460        @Override
461        public int toIntValue(boolean b) {
462            return Caster.toIntValue(b);
463        }
464    
465        @Override
466        public int toIntValue(char c) {
467            return Caster.toIntValue(c);
468        }
469    
470        @Override
471        public int toIntValue(double d) {
472            return Caster.toIntValue(d);
473        }
474    
475        @Override
476        public int toIntValue(Object o, int defaultValue) {
477            return Caster.toIntValue(o,defaultValue);
478        }
479    
480        @Override
481        public int toIntValue(Object o) throws PageException {
482            return Caster.toIntValue(o);
483        }
484    
485        @Override
486        public int toIntValue(String str, int defaultValue) {
487            return Caster.toIntValue(str,defaultValue);
488        }
489    
490        @Override
491        public int toIntValue(String str) throws PageException {
492            return Caster.toIntValue(str);
493        }
494    
495        @Override
496        public Iterator toIterator(Object o) throws PageException {
497            return Caster.toIterator(o);
498        }
499    
500        @Override
501        public List toList(Object o, boolean duplicate, List defaultValue) {
502            return Caster.toList(o,duplicate,defaultValue);
503        }
504    
505        @Override
506        public List toList(Object o, boolean duplicate) throws PageException {
507            return Caster.toList(o,duplicate);
508        }
509    
510        @Override
511        public List toList(Object o, List defaultValue) {
512            return Caster.toList(o,defaultValue);
513        }
514    
515        @Override
516        public List toList(Object o) throws PageException {
517            return Caster.toList(o);
518        }
519    
520        @Override
521        public Locale toLocale(String strLocale, Locale defaultValue) {
522            return Caster.toLocale(strLocale,defaultValue);
523        }
524    
525        @Override
526        public Locale toLocale(String strLocale) throws PageException {
527            return Caster.toLocale(strLocale);
528        }
529    
530        @Override
531        public Long toLong(boolean b) {
532            return Caster.toLong(b);
533        }
534    
535        @Override
536        public Long toLong(char c) {
537            return Caster.toLong(c);
538        }
539    
540        @Override
541        public Long toLong(double d) {
542            return Caster.toLong(d);
543        }
544    
545        @Override
546        public Long toLong(Object o, Long defaultValue) {
547            return Caster.toLong(o,defaultValue);
548        }
549    
550        @Override
551        public Long toLong(Object o) throws PageException {
552            return Caster.toLong(o);
553        }
554    
555        @Override
556        public long toLongValue(boolean b) {
557            return Caster.toLongValue(b);
558        }
559    
560        @Override
561        public long toLongValue(char c) {
562            return Caster.toLongValue(c);
563        }
564    
565        @Override
566        public long toLongValue(double d) {
567            return Caster.toLongValue(d);
568        }
569    
570        @Override
571        public long toLongValue(Object o, long defaultValue) {
572            return Caster.toLongValue(o,defaultValue);
573        }
574    
575        @Override
576        public long toLongValue(Object o) throws PageException {
577            return Caster.toLongValue(o);
578        }
579    
580        @Override
581        public Map toMap(Object o, boolean duplicate, Map defaultValue) {
582            return Caster.toMap(o,duplicate,defaultValue);
583        }
584    
585        @Override
586        public Map toMap(Object o, boolean duplicate) throws PageException {
587            return Caster.toMap(o,duplicate);
588        }
589    
590        @Override
591        public Map toMap(Object o, Map defaultValue) {
592            return Caster.toMap(o,defaultValue);
593        }
594    
595        @Override
596        public Map toMap(Object o) throws PageException {
597            return Caster.toMap(o);
598        }
599    
600        @Override
601        public Node toNode(Object o, Node defaultValue) {
602            return Caster.toNode(o,defaultValue);
603        }
604    
605        @Override
606        public Node toNode(Object o) throws PageException {
607            return Caster.toNode(o);
608        }
609    
610        @Override
611        public NodeList toNodeList(Object o, NodeList defaultValue) {
612            return Caster.toNodeList(o,defaultValue);
613        }
614    
615        @Override
616        public NodeList toNodeList(Object o) throws PageException {
617            return Caster.toNodeList(o);
618        }
619    
620        @Override
621        public Object toNull(Object value, Object defaultValue) {
622            return Caster.toNull(value,defaultValue);
623        }
624    
625        @Override
626        public Object toNull(Object value) throws PageException {
627            return Caster.toNull(value);
628        }
629    
630        public Collection.Key toKey(Object o) throws PageException{
631            return Caster.toKey(o);
632        }
633        
634        public Collection.Key toKey(Object o, Collection.Key defaultValue){
635            return Caster.toKey(o,defaultValue);
636        }
637        
638        @Override
639        public PageException toPageException(Throwable t) {
640            return Caster.toPageException(t);
641        }
642    
643        @Override
644        public Query toQuery(Object o, boolean duplicate, Query defaultValue) {
645            return Caster.toQuery(o,duplicate,defaultValue);
646        }
647    
648        @Override
649        public Query toQuery(Object o, boolean duplicate) throws PageException {
650            return Caster.toQuery(o,duplicate);
651        }
652    
653        @Override
654        public Query toQuery(Object o, Query defaultValue) {
655            return Caster.toQuery(o,defaultValue);
656        }
657    
658        @Override
659        public Query toQuery(Object o) throws PageException {
660            return Caster.toQuery(o);
661        }
662    
663        @Override
664        public Boolean toRef(boolean b) {
665            return Caster.toRef(b);
666        }
667    
668        @Override
669        public Byte toRef(byte b) {
670            return Caster.toRef(b);
671        }
672    
673        @Override
674        public String toRef(char c) {
675            return Caster.toRef(c);
676        }
677    
678        @Override
679        public Collection toRef(Collection o) {
680            return Caster.toRef(o);
681        }
682    
683        @Override
684        public Double toRef(double d) {
685            return Caster.toRef(d);
686        }
687    
688        @Override
689        public Float toRef(float f) {
690            return Caster.toRef(f);
691        }
692    
693        @Override
694        public Integer toRef(int i) {
695            return Caster.toRef(i);
696        }
697    
698        @Override
699        public Long toRef(long l) {
700            return Caster.toRef(l);
701        }
702    
703        @Override
704        public Object toRef(Object o) {
705            return Caster.toRef(o);
706        }
707    
708        @Override
709        public Short toRef(short s) {
710            return Caster.toRef(s);
711        }
712    
713        @Override
714        public String toRef(String str) {
715            return Caster.toRef(str);
716        }
717    
718        @Override
719        public Short toShort(boolean b) {
720            return Caster.toShort(b);
721        }
722    
723        @Override
724        public Short toShort(char c) {
725            return Caster.toShort(c);
726        }
727    
728        @Override
729        public Short toShort(double d) {
730            return Caster.toShort(d);
731        }
732    
733        @Override
734        public Short toShort(Object o, Short defaultValue) {
735            return Caster.toShort(o,defaultValue);
736        }
737    
738        @Override
739        public Short toShort(Object o) throws PageException {
740            return Caster.toShort(o);
741        }
742    
743        @Override
744        public short toShortValue(boolean b) {
745            return Caster.toShortValue(b);
746        }
747    
748        @Override
749        public short toShortValue(char c) {
750            return Caster.toShortValue(c);
751        }
752    
753        @Override
754        public short toShortValue(double d) {
755            return Caster.toShortValue(d);
756        }
757    
758        @Override
759        public short toShortValue(Object o, short defaultValue) {
760            return Caster.toShortValue(o,defaultValue);
761        }
762    
763        @Override
764        public short toShortValue(Object o) throws PageException {
765            return Caster.toShortValue(o);
766        }
767    
768        @Override
769        public String toString(boolean b) {
770            return Caster.toString(b);
771        }
772    
773        @Override
774        public String toString(double d) {
775            return Caster.toString(d);
776        }
777    
778        @Override
779        public String toString(int i) {
780            return Caster.toString(i);
781        }
782    
783        @Override
784        public String toString(long l) {
785            return Caster.toString(l);
786        }
787    
788        @Override
789        public String toString(Object o, String defaultValue) {
790            return Caster.toString(o,defaultValue);
791        }
792    
793        @Override
794        public String toString(Object o) throws PageException {
795            return Caster.toString(o);
796        }
797        
798        @Override
799        public Struct toStruct(Object o, Struct defaultValue,boolean caseSensitive) {
800            return Caster.toStruct(o,defaultValue,caseSensitive);
801        }
802    
803        @Override
804        public Struct toStruct(Object o, Struct defaultValue) {
805            return Caster.toStruct(o,defaultValue,true);
806        }
807    
808        @Override
809        public Struct toStruct(Object o) throws PageException {
810            return Caster.toStruct(o);
811        }
812    
813        @Override
814        public TimeSpan toTimespan(Object o, TimeSpan defaultValue) {
815            return Caster.toTimespan(o,defaultValue);
816        }
817    
818        @Override
819        public TimeSpan toTimespan(Object o) throws PageException {
820            return Caster.toTimespan(o);
821        }
822    
823        @Override
824        public String toTypeName(Object o) {
825            return Caster.toTypeName(o);
826        }
827    
828        @Override
829        public Object toUUId(Object o, Object defaultValue) {
830            return Caster.toUUId(o,defaultValue);
831        }
832    
833        @Override
834        public Object toUUId(Object o) throws PageException {
835            return Caster.toUUId(o);
836        }
837    
838        @Override
839        public Object toVariableName(Object obj, Object defaultValue) {
840            return Caster.toVariableName(obj,defaultValue);
841        }
842    
843        @Override
844        public Object toVariableName(Object o) throws PageException {
845            return Caster.toVariableName(o);
846        }
847    
848        @Override
849        public Object toVoid(Object o, Object defaultValue) {
850            return Caster.toVoid(o,defaultValue);
851        }
852    
853        @Override
854        public Object toVoid(Object o) throws PageException {
855            return Caster.toVoid(o);
856        }
857    
858        @Override
859        public Node toXML(Object value, Node defaultValue) {
860            return Caster.toXML(value,defaultValue);
861        }
862    
863        @Override
864        public Node toXML(Object value) throws PageException {
865            return Caster.toXML(value);
866        }
867    
868        public static Cast getInstance() {
869            if(singelton==null)singelton=new CastImpl();
870            return singelton;
871        }
872    
873            @Override
874            public Resource toResource(Object obj) throws PageException {
875                    if(obj instanceof Resource) return (Resource) obj;
876                    if(obj instanceof File) return ResourceUtil.toResource((File) obj);
877                    return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), toString(obj));
878            }
879    
880            @Override
881            public Resource toResource(Object obj, Resource defaultValue) {
882                    if(obj instanceof Resource) return (Resource) obj;
883                    String path=toString(obj,null);
884                    if(path==null)return defaultValue;
885                    return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), path);
886            }
887    
888            @Override
889            public Object to(String type, Object o,boolean alsoPattern) throws PageException {
890                    return Caster.castTo(ThreadLocalPageContext.get(), type, o,alsoPattern);
891            }
892    
893            @Override
894            public Serializable toSerializable(Object obj) throws PageException {
895                    return Caster.toSerializable(obj);
896            }
897    
898            @Override
899            public Serializable toSerializable(Object object, Serializable defaultValue) {
900                    return Caster.toSerializable(object, defaultValue);
901            }
902    
903    }