NumberConvertUtils.java

package com.github.mygreen.sqlmapper.core.util;

import org.springframework.util.StringUtils;

/**
 * 数値の変換用ユーティリティです。
 *
 *
 * @author T.TSUCHIE
 *
 */
public class NumberConvertUtils {

    /**
     * 数値を変換しかつインクリメントする。
     * 値がnullのときはnullを返す。
     * @param type 変換後のクラスタイプ
     * @param value 変換対象の値
     * @return インクリメントした値。引数valueがnullのときはnullを返す。
     * @throws IllegalArgumentException typeがサポートしていない数値型の場合。
     */
    public static Number incrementNumber(final Class<?> type, final Object value) {

        if(type == Integer.class) {
            Integer num = toInteger(value);
            if(num == null) {
                return num;
            }
            return Integer.valueOf(num + 1);

        } else if (type == int.class) {
            return toPrimitiveInteger(value) + 1;

        } else if(type == Long.class) {
            Long num = toLong(value);
            if(num == null) {
                return num;
            }
            return Long.valueOf(num + 1L);

        } else if(type == long.class) {
            return toPrimitiveLong(value) + 1L;

        } else if(type == Short.class) {
            Short num = toShort(value);
            if(num == null) {
                return num;
            }
            return Short.valueOf((short)(num + 1));

        } else if (type == short.class) {
            return toPrimitiveShort(value) + (short)1;

        }

        throw new IllegalArgumentException("not support number type : " + type.getName());

    }

    /**
     * 数値に変換する。
     * @param type 変換後のクラスタイプ
     * @param value 変換対象の値
     * @return 変換した値。引数valueがnullのときはnullを返す。
     * @throws IllegalArgumentException typeがサポートしていない数値型の場合。
     */
    public static Number convertNumber(final Class<?> type, final Object value) {

        if(type == Integer.class) {
            return toInteger(value);
        } else if (type == int.class) {
            return toPrimitiveInteger(value);
        } else if(type == Long.class) {
            return toLong(value);
        } else if(type == long.class) {
            return toPrimitiveLong(value);
        } else if(type == Short.class) {
            return toShort(value);
        } else if (type == short.class) {
            return toPrimitiveShort(value);
        }

        throw new IllegalArgumentException("not support number type : " + type.getName());

    }

    public static Integer toInteger(final Object value) {

        if(value == null) {
            return null;
        }

        if(value instanceof Number) {
            return ((Number)value).intValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? Integer.valueOf(1) : Integer.valueOf(0);
        }

        if(value instanceof String) {
            return toInteger((String)value);
        }

        return toInteger(value.toString());

    }

    public static Integer toInteger(String value) {
        if(!StringUtils.hasLength(value)) {
            return null;
        }

        return Integer.valueOf(value);
    }

    public static Integer toPrimitiveInteger(final Object value) {
        if(value == null) {
            return 0;
        }

        if(value instanceof Number) {
            return ((Number)value).intValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? 1 : 0;
        }

        if(value instanceof String) {
            return toPrimitiveInteger((String)value);
        }

        return toPrimitiveInteger(value.toString());
    }

    public static int toPrimitiveInteger(String value) {
        if(!StringUtils.hasLength(value)) {
            return 0;
        }

        return Integer.valueOf(value).intValue();
    }

    public static Long toLong(final Object value) {

        if(value == null) {
            return null;
        }

        if(value instanceof Number) {
            return ((Number)value).longValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? Long.valueOf(1) : Long.valueOf(0);
        }

        if(value instanceof String) {
            return toLong((String)value);
        }

        return toLong(value.toString());

    }

    public static Long toLong(String value) {
        if(!StringUtils.hasLength(value)) {
            return null;
        }

        return Long.valueOf(value);
    }

    public static Long toPrimitiveLong(final Object value) {
        if(value == null) {
            return 0L;
        }

        if(value instanceof Number) {
            return ((Number)value).longValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? 1L : 0L;
        }

        if(value instanceof String) {
            return toPrimitiveLong((String)value);
        }

        return toPrimitiveLong(value.toString());
    }

    public static long toPrimitiveLong(String value) {
        if(!StringUtils.hasLength(value)) {
            return 0L;
        }

        return Long.valueOf(value).longValue();
    }

    public static Short toShort(final Object value) {

        if(value == null) {
            return null;
        }

        if(value instanceof Number) {
            return ((Number)value).shortValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? Short.valueOf((short)1) : Short.valueOf((short)0);
        }

        if(value instanceof String) {
            return toShort((String)value);
        }

        return toShort(value.toString());

    }

    public static Short toShort(String value) {
        if(!StringUtils.hasLength(value)) {
            return null;
        }

        return Short.valueOf(value);
    }

    public static Short toPrimitiveShort(final Object value) {
        if(value == null) {
            return 0;
        }

        if(value instanceof Number) {
            return ((Number)value).shortValue();
        }

        if (value instanceof Boolean) {
            return ((Boolean)value).booleanValue() ? (short)1 : (short)0;
        }

        if(value instanceof String) {
            return toPrimitiveShort((String)value);
        }

        return toPrimitiveShort(value.toString());
    }

    public static short toPrimitiveShort(String value) {
        if(!StringUtils.hasLength(value)) {
            return 0;
        }

        return Short.valueOf(value).shortValue();
    }

}