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 }