package org.itscool.commons.property;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.itscool.commons.util.StringUtil;

/**
 * 入力文字列を16進形式でファイルに書き込んだり、読み込んだりする
 * 為のクラスです
 *
 * @author KANO
 * @since jdk1.4.1
 * @version 1.00A 2004/11/1
*/
public class HexPropertyFile extends PropertyFile{
    /**
     * プロパティファイルの初期化を行います
     * @param path プロパティファイル名を含むパス
     * @throws IOException
     */
    public HexPropertyFile(String path) throws IOException{
        super(path);
    }
    
    /**
     * プロパティ情報を取得します<BR>
     * プロパティ情報は"ISO-8859-1"にエンコーディングされたバイト情報になります
     * @param key プロパティ名
     * @return プロパティ情報をbyte[]形式で返します
     * @throws IOException
     */
    public byte[] readHex(String key){
        String strData = super.read(key);
        if( strData == null ){
            return null;
        }
        strData = StringUtil.decodeHex( strData ); 
        byte[] byteData = null;
        try{
            byteData = strData.getBytes("ISO-8859-1");
        }catch(UnsupportedEncodingException uee ){
            uee.printStackTrace();
        }
        return byteData;
    }
    
    /**
     * 引数byte_dataで指定されたバイト情報をkeyで指定されたプロパティに書き込みます
     * byte_dataは"ISO-8859-1"にエンコーディングされたStringインスタンスに変換されます
     * @param key プロパティ名
     * @param byteData プロパティにセットするバイト情報
     * @param append 追加モード。trueが指定された場合は既存のプロパティファイルに追加されます
     * @return プロパティの追加に成功した場合はtrueを返します。このプロパティが既に存在する
     * 場合はfalseを返します
     * @throws IOException
    */
    public boolean writeHex(String key, byte[] byteData, boolean append)
    throws IOException{
        String data = new String(byteData, "ISO-8859-1");
        data = StringUtil.encodeHex(data);
        
        boolean ret = super.write(key, data, append);
        
        return ret;
    }
}
