Package org.squirrelframework.foundation.fsm

Source Code of org.squirrelframework.foundation.fsm.GeneralConverter

package org.squirrelframework.foundation.fsm;

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

import org.apache.commons.lang3.StringUtils;

public class GeneralConverter<T> implements Converter<T> {

    private Class<T> type;

    public GeneralConverter(Class<T> type) {
        this.type = type;
    }

    @Override
    public String convertToString(T obj) {
        if(Enum.class.isAssignableFrom(type)) {
            return ((Enum<?>)obj).name();
        } else if(Date.class.isAssignableFrom(type)) {
            return Long.toString(((Date)obj).getTime());
        }
        return obj != null ? obj.toString() : StringUtils.EMPTY;
    }

    @Override
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public T convertFromString(String value) {
        if(value==null) return null;
       
        if (type.equals(boolean.class) || type.equals(Boolean.class)) {
            if (value == null || value.isEmpty()) {
                return null;
            } else if (value.equalsIgnoreCase("true")) {
                return type.cast(Boolean.TRUE);
            }
            return type.cast(Boolean.FALSE);
        } else if (Number.class.isAssignableFrom(type)
                || int.class.isAssignableFrom(type)
                || long.class.isAssignableFrom(type)
                || double.class.isAssignableFrom(type)
                || float.class.isAssignableFrom(type)
                || byte.class.isAssignableFrom(type)
                || short.class.isAssignableFrom(type)) {
            BigDecimal convertedValue = new BigDecimal(value);
            if (Integer.class.equals(type) || int.class.equals(type)) {
                return type.cast(convertedValue.intValue());
            } else if (Long.class.equals(type) || long.class.equals(type)) {
                return type.cast(convertedValue.longValue());
            } else if (Double.class.equals(type) || double.class.equals(type)) {
                return type.cast(convertedValue.doubleValue());
            } else if (Float.class.equals(type) || float.class.equals(type)) {
                return type.cast(convertedValue.floatValue());
            } else if (BigInteger.class.equals(type)) {
                return type.cast(convertedValue.toBigInteger());
            } else if (BigDecimal.class.equals(type)) {
                return type.cast(convertedValue);
            } else if (Short.class.equals(type) || short.class.equals(type)) {
                return type.cast(convertedValue.shortValue());
            } else if (Byte.class.equals(type) || byte.class.equals(type)) {
                return type.cast(convertedValue.byteValue());
            }
        } else if(Enum.class.isAssignableFrom(type)) {
            return type.cast(Enum.valueOf((Class)type, value));
        } else if(String.class.equals(type)) {
            return type.cast(value);
        } else if(Date.class.isAssignableFrom(type)) {
            return type.cast(new Date(Long.parseLong(value)));
        } else if(Character.class.equals(type) || char.class.equals(type)) {
            return type.cast(value.charAt(0));
        }
        throw new IllegalStateException("Unable to coverter type: \'" +
                type.getName() +"\' with value \'"+value.toString()+"\'.");
    }

}
TOP

Related Classes of org.squirrelframework.foundation.fsm.GeneralConverter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.