All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.polyglotted.xpathstax.data.Value Maven / Gradle / Ivy

package org.polyglotted.xpathstax.data;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;

public final class Value extends BasicValue {

    public Value(Object data) {
        super(data);
    }

    public static Value of(Object data) {
        return new Value(data);
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public  T coerce(Class targetClazz, T defaultValue) {
        if (isNull()) {
            return defaultValue;

        } else if (instanceOf(targetClazz)) {
            return targetClazz.cast(get());

        } else if (String.class.equals(targetClazz)) {
            return (T) asString();

        } else if (Boolean.class.equals(targetClazz) || boolean.class.equals(targetClazz)) {
            return (T) asBoolean((Boolean) defaultValue);

        } else if (Character.class.equals(targetClazz) || char.class.equals(targetClazz)) {
            return (T) asCharacter((Character) defaultValue);

        } else if (Byte.class.equals(targetClazz) || byte.class.equals(targetClazz)) {
            return (T) asByte((Byte) defaultValue);

        } else if (Short.class.equals(targetClazz) || short.class.equals(targetClazz)) {
            return (T) asShort((Short) defaultValue);

        } else if (Integer.class.equals(targetClazz) || int.class.equals(targetClazz)) {
            return (T) asInteger((Integer) defaultValue);

        } else if (Long.class.equals(targetClazz) || long.class.equals(targetClazz)) {
            return (T) asLong((Long) defaultValue);

        } else if (Float.class.equals(targetClazz) || float.class.equals(targetClazz)) {
            return (T) asFloat((Float) defaultValue);

        } else if (Double.class.equals(targetClazz) || double.class.equals(targetClazz)) {
            return (T) asDouble((Double) defaultValue);

        } else if (BigDecimal.class.equals(targetClazz)) {
            return (T) asBigDecimal((BigDecimal) defaultValue);

        } else if (BigInteger.class.equals(targetClazz)) {
            return (T) asBigInteger((BigInteger) defaultValue);

        } else if (Date.class.equals(targetClazz)) {
            return (T) asDate((Date) defaultValue);

        } else if (targetClazz.isEnum()) {
            return (T) asEnum((Class) targetClazz, null); // TODO fix me
        }
        throw new IllegalArgumentException("Cannot convert to: " + targetClazz);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy