package railo.runtime.op;
import java.awt.Color;
import java.io.File;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import railo.commons.color.ColorCaster;
import railo.commons.io.res.Resource;
import railo.commons.io.res.util.ResourceUtil;
import railo.runtime.PageContext;
import railo.runtime.engine.ThreadLocalPageContext;
import railo.runtime.exp.CasterException;
import railo.runtime.exp.PageException;
import railo.runtime.op.date.DateCaster;
import railo.runtime.type.Array;
import railo.runtime.type.Collection;
import railo.runtime.type.Query;
import railo.runtime.type.Struct;
import railo.runtime.type.dt.DateTime;
import railo.runtime.type.dt.TimeSpan;
import railo.runtime.util.Cast;
/**
* Implementation of the cast interface
*/
public final class CastImpl implements Cast {
private static CastImpl singelton;
@Override
public Object castTo(PageContext pc, short type, Object o) throws PageException {
return Caster.castTo(pc,type,o);
}
@Override
public Object castTo(PageContext pc, short type, String strType, Object o) throws PageException {
return Caster.castTo(pc,type,strType,o);
}
@Override
public Object castTo(PageContext pc, String type, Object o) throws PageException {
return Caster.castTo(pc,type,o,false);
}
public Object castTo(PageContext pc, String type, Object o, boolean alsoPattern) throws PageException {
return Caster.castTo(pc,type,o,alsoPattern);
}
@Override
public Array toArray(Object obj, Array defaultValue) {
return Caster.toArray(obj,defaultValue);
}
@Override
public Array toArray(Object obj) throws PageException {
return Caster.toArray(obj);
}
@Override
public String toBase64(Object o, String defaultValue) {
return Caster.toBase64(o,null,defaultValue);
}
@Override
public String toBase64(Object o) throws PageException {
return Caster.toBase64(o,null);
}
@Override
public byte[] toBinary(Object obj, byte[] defaultValue) {
return Caster.toBinary(obj,defaultValue);
}
@Override
public byte[] toBinary(Object obj) throws PageException {
return Caster.toBinary(obj);
}
@Override
public Boolean toBoolean(boolean b) {
return Caster.toBoolean(b);
}
@Override
public Boolean toBoolean(char c) {
return Caster.toBoolean(c);
}
@Override
public Boolean toBoolean(double d) {
return Caster.toBoolean(d);
}
@Override
public Boolean toBoolean(Object o, Boolean defaultValue) {
return Caster.toBoolean(o,defaultValue);
}
@Override
public Boolean toBoolean(Object o) throws PageException {
return Caster.toBoolean(o);
}
@Override
public Boolean toBoolean(String str, Boolean defaultValue) {
return Caster.toBoolean(str,defaultValue);
}
@Override
public Boolean toBoolean(String str) throws PageException {
return Caster.toBoolean(str);
}
@Override
public boolean toBooleanValue(boolean b) {
return Caster.toBooleanValue(b);
}
@Override
public boolean toBooleanValue(char c) {
return Caster.toBooleanValue(c);
}
@Override
public boolean toBooleanValue(double d) {
return Caster.toBooleanValue(d);
}
@Override
public boolean toBooleanValue(Object o, boolean defaultValue) {
return Caster.toBooleanValue(o,defaultValue);
}
@Override
public boolean toBooleanValue(Object o) throws PageException {
return Caster.toBooleanValue(o);
}
@Override
public boolean toBooleanValue(String str, boolean defaultValue) {
return Caster.toBooleanValue(str,defaultValue);
}
@Override
public boolean toBooleanValue(String str) throws PageException {
return Caster.toBooleanValue(str);
}
@Override
public Byte toByte(boolean b) {
return Caster.toByte(b);
}
@Override
public Byte toByte(char c) {
return Caster.toByte(c);
}
@Override
public Byte toByte(double d) {
return Caster.toByte(d);
}
@Override
public Byte toByte(Object o, Byte defaultValue) {
return Caster.toByte(o,defaultValue);
}
@Override
public Byte toByte(Object o) throws PageException {
return Caster.toByte(o);
}
@Override
public byte toByteValue(boolean b) {
return Caster.toByteValue(b);
}
@Override
public byte toByteValue(char c) {
return Caster.toByteValue(c);
}
@Override
public byte toByteValue(double d) {
return Caster.toByteValue(d);
}
@Override
public byte toByteValue(Object o, byte defaultValue) {
return Caster.toByteValue(o,defaultValue);
}
@Override
public byte toByteValue(Object o) throws PageException {
return Caster.toByteValue(o);
}
@Override
public Character toCharacter(boolean b) {
return Caster.toCharacter(b);
}
@Override
public Character toCharacter(char c) {
return Caster.toCharacter(c);
}
@Override
public Character toCharacter(double d) {
return Caster.toCharacter(d);
}
@Override
public Character toCharacter(Object o, Character defaultValue) {
return Caster.toCharacter(o,defaultValue);
}
@Override
public Character toCharacter(Object o) throws PageException {
return Caster.toCharacter(o);
}
@Override
public char toCharValue(boolean b) {
return Caster.toCharValue(b);
}
@Override
public char toCharValue(char c) {
return Caster.toCharValue(c);
}
@Override
public char toCharValue(double d) {
return Caster.toCharValue(d);
}
@Override
public char toCharValue(Object o, char defaultValue) {
return Caster.toCharValue(o,defaultValue);
}
@Override
public char toCharValue(Object o) throws PageException {
return Caster.toCharValue(o);
}
@Override
public Collection toCollection(Object o, Collection defaultValue) {
return Caster.toCollection(o,defaultValue);
}
@Override
public Collection toCollection(Object o) throws PageException {
return Caster.toCollection(o);
}
@Override
public Color toColor(Object o) throws PageException {
if(o instanceof Color) return (Color) o;
else if (o instanceof String)ColorCaster.toColor((String)o);
else if (o instanceof Number)ColorCaster.toColor(Integer.toHexString(((Number)o).intValue()));
throw new CasterException(o,Color.class);
}
@Override
public DateTime toDate(boolean b, TimeZone tz) {
return Caster.toDate(b,tz);
}
@Override
public DateTime toDate(char c, TimeZone tz) {
return Caster.toDate(c,tz);
}
@Override
public DateTime toDate(double d, TimeZone tz) {
return Caster.toDate(d,tz);
}
@Override
public DateTime toDate(Locale locale, String str, TimeZone tz, DateTime defaultValue) {
return DateCaster.toDateTime(locale,str,tz,defaultValue,true);
}
@Override
public DateTime toDate(Locale locale, String str, TimeZone tz) throws PageException {
return DateCaster.toDateTime(locale,str,tz,true);
}
@Override
public DateTime toDate(Object o, boolean alsoNumbers, TimeZone tz, DateTime defaultValue) {
return Caster.toDate(o,alsoNumbers,tz,defaultValue);
}
@Override
public DateTime toDate(Object o, TimeZone tz) throws PageException {
return Caster.toDate(o,tz);
}
@Override
public DateTime toDate(String str, boolean alsoNumbers, TimeZone tz, DateTime defaultValue) {
return Caster.toDate(str,alsoNumbers,tz,defaultValue);
}
@Override
public DateTime toDate(String str, TimeZone tz) throws PageException {
return Caster.toDate(str,tz);
}
@Override
public DateTime toDatetime(Object o, TimeZone tz) throws PageException {
return Caster.toDate(o,tz);
}
@Override
public DateTime toDateTime(Object o, TimeZone tz) throws PageException {
return Caster.toDate(o,tz);
}
@Override
public String toDecimal(boolean b) {
return Caster.toDecimal(b);
}
@Override
public String toDecimal(char c) {
return Caster.toDecimal(c);
}
@Override
public String toDecimal(double d) {
return Caster.toDecimal(d);
}
@Override
public String toDecimal(Object value, String defaultValue) {
return Caster.toDecimal(value,defaultValue);
}
@Override
public String toDecimal(Object value) throws PageException {
return Caster.toDecimal(value);
}
@Override
public Double toDouble(boolean b) {
return Caster.toDouble(b);
}
@Override
public Double toDouble(char c) {
return Caster.toDouble(c);
}
@Override
public Double toDouble(double d) {
return Caster.toDouble(d);
}
@Override
public Double toDouble(Object o, Double defaultValue) {
return Caster.toDouble(o,defaultValue);
}
@Override
public Double toDouble(Object o) throws PageException {
return Caster.toDouble(o);
}
@Override
public Double toDouble(String str, Double defaultValue) {
return Caster.toDouble(str,defaultValue);
}
@Override
public Double toDouble(String str) throws PageException {
return Caster.toDouble(str);
}
@Override
public double toDoubleValue(boolean b) {
return Caster.toDoubleValue(b);
}
@Override
public double toDoubleValue(char c) {
return Caster.toDoubleValue(c);
}
@Override
public double toDoubleValue(double d) {
return Caster.toDoubleValue(d);
}
@Override
public double toDoubleValue(Object o, double defaultValue) {
return Caster.toDoubleValue(o,defaultValue);
}
@Override
public double toDoubleValue(Object o) throws PageException {
return Caster.toDoubleValue(o);
}
@Override
public double toDoubleValue(String str, double defaultValue) {
return Caster.toDoubleValue(str,defaultValue);
}
@Override
public double toDoubleValue(String str) throws PageException {
return Caster.toDoubleValue(str);
}
@Override
public File toFile(Object obj, File defaultValue) {
return Caster.toFile(obj,defaultValue);
}
@Override
public File toFile(Object obj) throws PageException {
return Caster.toFile(obj);
}
@Override
public Integer toInteger(boolean b) {
return Caster.toInteger(b);
}
@Override
public Integer toInteger(char c) {
return Caster.toInteger(c);
}
@Override
public Integer toInteger(double d) {
return Caster.toInteger(d);
}
@Override
public Integer toInteger(Object o, Integer defaultValue) {
return Caster.toInteger(o,defaultValue);
}
@Override
public Integer toInteger(Object o) throws PageException {
return Caster.toInteger(o);
}
@Override
public int toIntValue(boolean b) {
return Caster.toIntValue(b);
}
@Override
public int toIntValue(char c) {
return Caster.toIntValue(c);
}
@Override
public int toIntValue(double d) {
return Caster.toIntValue(d);
}
@Override
public int toIntValue(Object o, int defaultValue) {
return Caster.toIntValue(o,defaultValue);
}
@Override
public int toIntValue(Object o) throws PageException {
return Caster.toIntValue(o);
}
@Override
public int toIntValue(String str, int defaultValue) {
return Caster.toIntValue(str,defaultValue);
}
@Override
public int toIntValue(String str) throws PageException {
return Caster.toIntValue(str);
}
@Override
public Iterator toIterator(Object o) throws PageException {
return Caster.toIterator(o);
}
@Override
public List toList(Object o, boolean duplicate, List defaultValue) {
return Caster.toList(o,duplicate,defaultValue);
}
@Override
public List toList(Object o, boolean duplicate) throws PageException {
return Caster.toList(o,duplicate);
}
@Override
public List toList(Object o, List defaultValue) {
return Caster.toList(o,defaultValue);
}
@Override
public List toList(Object o) throws PageException {
return Caster.toList(o);
}
@Override
public Locale toLocale(String strLocale, Locale defaultValue) {
return Caster.toLocale(strLocale,defaultValue);
}
@Override
public Locale toLocale(String strLocale) throws PageException {
return Caster.toLocale(strLocale);
}
@Override
public Long toLong(boolean b) {
return Caster.toLong(b);
}
@Override
public Long toLong(char c) {
return Caster.toLong(c);
}
@Override
public Long toLong(double d) {
return Caster.toLong(d);
}
@Override
public Long toLong(Object o, Long defaultValue) {
return Caster.toLong(o,defaultValue);
}
@Override
public Long toLong(Object o) throws PageException {
return Caster.toLong(o);
}
@Override
public long toLongValue(boolean b) {
return Caster.toLongValue(b);
}
@Override
public long toLongValue(char c) {
return Caster.toLongValue(c);
}
@Override
public long toLongValue(double d) {
return Caster.toLongValue(d);
}
@Override
public long toLongValue(Object o, long defaultValue) {
return Caster.toLongValue(o,defaultValue);
}
@Override
public long toLongValue(Object o) throws PageException {
return Caster.toLongValue(o);
}
@Override
public Map toMap(Object o, boolean duplicate, Map defaultValue) {
return Caster.toMap(o,duplicate,defaultValue);
}
@Override
public Map toMap(Object o, boolean duplicate) throws PageException {
return Caster.toMap(o,duplicate);
}
@Override
public Map toMap(Object o, Map defaultValue) {
return Caster.toMap(o,defaultValue);
}
@Override
public Map toMap(Object o) throws PageException {
return Caster.toMap(o);
}
@Override
public Node toNode(Object o, Node defaultValue) {
return Caster.toNode(o,defaultValue);
}
@Override
public Node toNode(Object o) throws PageException {
return Caster.toNode(o);
}
@Override
public NodeList toNodeList(Object o, NodeList defaultValue) {
return Caster.toNodeList(o,defaultValue);
}
@Override
public NodeList toNodeList(Object o) throws PageException {
return Caster.toNodeList(o);
}
@Override
public Object toNull(Object value, Object defaultValue) {
return Caster.toNull(value,defaultValue);
}
@Override
public Object toNull(Object value) throws PageException {
return Caster.toNull(value);
}
public Collection.Key toKey(Object o) throws PageException{
return Caster.toKey(o);
}
public Collection.Key toKey(Object o, Collection.Key defaultValue){
return Caster.toKey(o,defaultValue);
}
@Override
public PageException toPageException(Throwable t) {
return Caster.toPageException(t);
}
@Override
public Query toQuery(Object o, boolean duplicate, Query defaultValue) {
return Caster.toQuery(o,duplicate,defaultValue);
}
@Override
public Query toQuery(Object o, boolean duplicate) throws PageException {
return Caster.toQuery(o,duplicate);
}
@Override
public Query toQuery(Object o, Query defaultValue) {
return Caster.toQuery(o,defaultValue);
}
@Override
public Query toQuery(Object o) throws PageException {
return Caster.toQuery(o);
}
@Override
public Boolean toRef(boolean b) {
return Caster.toRef(b);
}
@Override
public Byte toRef(byte b) {
return Caster.toRef(b);
}
@Override
public String toRef(char c) {
return Caster.toRef(c);
}
@Override
public Collection toRef(Collection o) {
return Caster.toRef(o);
}
@Override
public Double toRef(double d) {
return Caster.toRef(d);
}
@Override
public Float toRef(float f) {
return Caster.toRef(f);
}
@Override
public Integer toRef(int i) {
return Caster.toRef(i);
}
@Override
public Long toRef(long l) {
return Caster.toRef(l);
}
@Override
public Object toRef(Object o) {
return Caster.toRef(o);
}
@Override
public Short toRef(short s) {
return Caster.toRef(s);
}
@Override
public String toRef(String str) {
return Caster.toRef(str);
}
@Override
public Short toShort(boolean b) {
return Caster.toShort(b);
}
@Override
public Short toShort(char c) {
return Caster.toShort(c);
}
@Override
public Short toShort(double d) {
return Caster.toShort(d);
}
@Override
public Short toShort(Object o, Short defaultValue) {
return Caster.toShort(o,defaultValue);
}
@Override
public Short toShort(Object o) throws PageException {
return Caster.toShort(o);
}
@Override
public short toShortValue(boolean b) {
return Caster.toShortValue(b);
}
@Override
public short toShortValue(char c) {
return Caster.toShortValue(c);
}
@Override
public short toShortValue(double d) {
return Caster.toShortValue(d);
}
@Override
public short toShortValue(Object o, short defaultValue) {
return Caster.toShortValue(o,defaultValue);
}
@Override
public short toShortValue(Object o) throws PageException {
return Caster.toShortValue(o);
}
@Override
public String toString(boolean b) {
return Caster.toString(b);
}
@Override
public String toString(double d) {
return Caster.toString(d);
}
@Override
public String toString(int i) {
return Caster.toString(i);
}
@Override
public String toString(long l) {
return Caster.toString(l);
}
@Override
public String toString(Object o, String defaultValue) {
return Caster.toString(o,defaultValue);
}
@Override
public String toString(Object o) throws PageException {
return Caster.toString(o);
}
@Override
public Struct toStruct(Object o, Struct defaultValue,boolean caseSensitive) {
return Caster.toStruct(o,defaultValue,caseSensitive);
}
@Override
public Struct toStruct(Object o, Struct defaultValue) {
return Caster.toStruct(o,defaultValue,true);
}
@Override
public Struct toStruct(Object o) throws PageException {
return Caster.toStruct(o);
}
@Override
public TimeSpan toTimespan(Object o, TimeSpan defaultValue) {
return Caster.toTimespan(o,defaultValue);
}
@Override
public TimeSpan toTimespan(Object o) throws PageException {
return Caster.toTimespan(o);
}
@Override
public String toTypeName(Object o) {
return Caster.toTypeName(o);
}
@Override
public Object toUUId(Object o, Object defaultValue) {
return Caster.toUUId(o,defaultValue);
}
@Override
public Object toUUId(Object o) throws PageException {
return Caster.toUUId(o);
}
@Override
public Object toVariableName(Object obj, Object defaultValue) {
return Caster.toVariableName(obj,defaultValue);
}
@Override
public Object toVariableName(Object o) throws PageException {
return Caster.toVariableName(o);
}
@Override
public Object toVoid(Object o, Object defaultValue) {
return Caster.toVoid(o,defaultValue);
}
@Override
public Object toVoid(Object o) throws PageException {
return Caster.toVoid(o);
}
@Override
public Node toXML(Object value, Node defaultValue) {
return Caster.toXML(value,defaultValue);
}
@Override
public Node toXML(Object value) throws PageException {
return Caster.toXML(value);
}
public static Cast getInstance() {
if(singelton==null)singelton=new CastImpl();
return singelton;
}
@Override
public Resource toResource(Object obj) throws PageException {
if(obj instanceof Resource) return (Resource) obj;
if(obj instanceof File) return ResourceUtil.toResource((File) obj);
return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), toString(obj));
}
@Override
public Resource toResource(Object obj, Resource defaultValue) {
if(obj instanceof Resource) return (Resource) obj;
String path=toString(obj,null);
if(path==null)return defaultValue;
return ResourceUtil.toResourceNotExisting(ThreadLocalPageContext.get(), path);
}
@Override
public Object to(String type, Object o,boolean alsoPattern) throws PageException {
return Caster.castTo(ThreadLocalPageContext.get(), type, o,alsoPattern);
}
@Override
public Serializable toSerializable(Object obj) throws PageException {
return Caster.toSerializable(obj);
}
@Override
public Serializable toSerializable(Object object, Serializable defaultValue) {
return Caster.toSerializable(object, defaultValue);
}
}