package org.itscool.commons.connection;

import java.util.HashMap;

/**
 * Transactionの結果を保持するクラスです。<br>
 * このクラスが保持するパラメータ郡はTransactionの
 * 結果によって取得されたパラメータの１レコードに相当します
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2004/11/1
 */
public class Record extends HashMap{
    
    /**
     * パラメータnameで指定されたフィールド値を
     * short型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public Object getObject(String name){
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        return get(name.toUpperCase());
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * short型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public boolean getBoolean(String name){
        boolean ret = false;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Boolean(str)).booleanValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * short型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public byte getByte(String name){
        byte ret = 0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Byte(str)).byteValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * short型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public short getShort(String name){
        short ret = 0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Short(str)).shortValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * int型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public int getInt(String name){
        int ret = 0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Integer(str)).intValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * long型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public long getLong(String name){
        long ret = 0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Long(str)).longValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * String型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public float getFloat(String name){
        float ret = 0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Float(str)).longValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * double型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public double getDouble(String name){
        double ret = 0.0;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        try{
            Object obj = get(name.toUpperCase());
            if( obj == null ) return ret;
            String str = obj.toString();
            ret = (new Double(str)).doubleValue();
        }catch( NumberFormatException nfe ){
            return ret;
        }
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * String型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public String getString(String name){
        String ret = null;
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        Object obj = get(name.toUpperCase());
        if( obj == null ) return ret;
        ret = obj.toString();
        
        return ret;
    }
    
    /**
     * パラメータnameで指定されたフィールド値を
     * Date型で取得します。
     * @param name フィールド名
     * @return フィールドにセットされた値を返します
     */
    public java.util.Date getDate(String name){
        if(name ==null || name.length()==0){
            throw new TransactionException("field name is null");
        }
        java.sql.Date ret = (java.sql.Date)get(name.toUpperCase());
        if( ret == null )return null;
        java.util.Date date = new java.util.Date(ret.getTime());
        return date;
    }
}
