/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.basic;

import jp.co.sint.config.SIConfig;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * <p>Description:郵便番号ソフトから郵便番号を元に県名と市区町村名を検索します。</p>
 * @version $Id: SIZipBasic.java,v 1.0 2004/03/15 Exp $
 * @author : Jinwang Chen
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 *  ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * Jinwang Chen   2004/03/15 11:34:43  Original
 */
public class SIZipBasic {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  //zipdicディレクトリまでのフォルダ名
  private String zipDicDir=SIConfig.SIZIP_DIC_DIR;

  //郵便辞書オブジェクトの生成
  private jp.co.sint.zipdic.ZipDic zipDic=new jp.co.sint.zipdic.ZipDic(zipDicDir);

  /**
   * SIZipBasic
   * コンストラクタ
   * @param  なし
   * @return なし
   * @throws ClassNotFoundException
   */
  public SIZipBasic(){
  }

  /**
   * SIZipBasic
   * コンストラクタ
   * @param  lZipDicDir zipdicディレクトリまでのフォルダ名
   * @return なし
   * @throws ClassNotFoundException
   */
  public SIZipBasic(String lZipDicDir)throws ClassNotFoundException{
    setZipDicDir(lZipDicDir);
  }

  /**
   * setZipDicDir
   * zipdicディレクトリまでのフォルダ名を設定します。
   * @param  lZipDicDir zipdicディレクトリまでのフォルダ名
   * @return なし
   * @throws なし
   */
  public void setZipDicDir(String lZipDicDir)throws ClassNotFoundException{
    if (SIUtil.isNull(lZipDicDir))lZipDicDir="";
    this.zipDicDir=lZipDicDir;
    zipDic=new jp.co.sint.zipdic.ZipDic(this.zipDicDir);//新しい郵便辞書オブジェクトの生成
  }

  /**
   * getZipDicDir
   * zipdicディレクトリまでのフォルダ名を取得します。
   * @param  なし
   * @return zipdicディレクトリまでのフォルダ名
   * @throws なし
   */
  public String getZipDicDir(){
    return this.zipDicDir;
  }

  /**
   * getPrefectureName
   * 郵便番号辞書ソフトから県名を取得
   * @param  lZipCode 対象郵便番号
   * @return 県名
   * @throws なし
   */
  public String getPrefectureName(String lZipCode){
    if (SIUtil.isNull(lZipCode)||lZipCode.length()!=7) return "";

    String lPrefectureName="";
    if (zipDic!= null) {
      lPrefectureName = zipDic.getAddress(lZipCode,jp.co.sint.zipdic.ZipDic.MODE_PREFECTURE);
    }else log.warn("null zipDic.");
    return lPrefectureName;
  }

  /**
   * getPrefectureName
   * 郵便番号辞書ソフトから県名を取得
   * @param  lZipCode1 対象郵便番号1
   * @param  lZipCode2 対象郵便番号2
   * @return 県名
   * @throws なし
   */
  public String getPrefectureName(String lZipCode1,String lZipCode2){
    if (SIUtil.isNotNull(lZipCode1)&&SIUtil.isNotNull(lZipCode2)){
      return getPrefectureName(lZipCode1+lZipCode2);
    }else if (SIUtil.isNotNull(lZipCode1)){
      return getPrefectureName(lZipCode1);
    }else if (SIUtil.isNotNull(lZipCode2)){
      return getPrefectureName(lZipCode2);
    }else return "";
  }

  /**
   * getAddressName
   * 郵便番号辞書ソフトから住所(市区町村名＋町域名)を取得
   * @param  lZipCode 郵便番号コード
   * @return 市区町村名＋町域名
   * @throws なし
   */
  public String getAddressName(String lZipCode){
    if (SIUtil.isNull(lZipCode)||lZipCode.length()!=7) return "";

    String lAddressName="";
    if (zipDic!=null) {
      lAddressName=zipDic.getAddress(lZipCode,jp.co.sint.zipdic.ZipDic.MODE_ADDRESS3);
    }else log.warn("null zipDic.");
    return lAddressName;
  }

  /**
   * getAddressName
   * 郵便番号辞書ソフトから住所(市区町村名＋町域名)を取得
   * @param  lZipCode1 郵便番号コード1
   * @param  lZipCode2 郵便番号コード2
   * @return 市区町村名＋町域名
   * @throws なし
   */
  public String getAddressName(String lZipCode1,String lZipCode2){
    if (SIUtil.isNotNull(lZipCode1)&&SIUtil.isNotNull(lZipCode2)){
      return getAddressName(lZipCode1+lZipCode2);
    }else if (SIUtil.isNotNull(lZipCode1)){
      return getAddressName(lZipCode1);
    }else if (SIUtil.isNotNull(lZipCode2)){
      return getAddressName(lZipCode2);
    }else return "";
  }
}
