/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CK0281SQLEntity
*	ソースファイル名：CK0281SQLEntity.java
*	作成者			：EK941153
*	日付			：2020年01月17日
*＜機能概要＞
*	見込顧客SQLエンティティクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*
********************************************************************************/

package eo.ejb.cbm.entity;

import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.ArrayList;
import com.fujitsu.futurity.model.base.CAANDebug;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANLog;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.base.CAANSQLEntity;

class CK0281SQLEntity extends CAANSQLEntity {

    /**
     * このエンティティのスキーマ名
     */
    private static final String SCHEMA_NAME = "eo.ejb.cbm.entity.CK0281ETMsg";

    /**
     * このエンティティのＤＢに対応している項目の
     * 全スキーマ項目名とＤＢカラム名のリストのキャッシュ領域
     */
    private static String[][] selectColumnList = null;


    /**
     * 指定された項目で検索します。
     * @param  inMsg  検索する項目情報
     * @return        検索結果を格納したメッセージキャリアの配列
     * @exception CAANRuntimeException SQL実行時のエラーを通知
     */
    CAANMsg[] findByCondition(CAANMsg inMsg) {
        
        CAANLog.println(CAANLog.LEVEL_APP_PROTECTED, "CALL: CK0281SQLEntity#findByCondition");

        int maxCnt = 0;
        if (inMsg.containsKeyOfMsgData("$MAX_SELECT_COUNT")) {
            maxCnt = inMsg.getInt("$MAX_SELECT_COUNT");
            if (maxCnt <= 0) {
                return new CAANMsg[0];
            }
        }
        
        String[][] wlist = getParameterList(getSelectColumnList(), inMsg);

        if (wlist[0].length == 0) {
            // where 句対象が無いので全件検索
            return findByCondition(null, null, null, maxCnt, null);
        } else {
            // where 句の対象があったので where句を作る
            // null値比較は whereList に入れない
            ArrayList clmList = new ArrayList();
            StringBuffer whereStr = new StringBuffer();

            for (int i = 0; i < wlist[0].length; i++) {
                if (i == 0) {
                    whereStr.append("where ");
                } else {
                    whereStr.append(" and ");
                }
                if (inMsg.isNull(wlist[0][i])) {
                    whereStr.append(wlist[1][i]).append(" is Null");
                } else {
                    clmList.add(wlist[0][i]);
                    whereStr.append(wlist[1][i]).append("=?");
                }
            }
            String[] whereList = (String[])clmList.toArray(new String[0]);
            return findByCondition(whereStr.toString(), whereList, inMsg, maxCnt, null);
        }
    }


    /**
     * このエンティティの参照するテーブル名を取得します。
     * @return テーブル名
     */
    protected String getTableName() {
        return CK0281ETMsg.getTableName();
    }

    /**
     * このエンティティのスキーマの内容を取得します。
     * @return スキーマのContents
     */
    protected Object[][] getSchemaContents() {
        return CK0281ETMsg.getSchemaContents();
    }

    /**
     * このエンティティのスキーマ名を取得します。
     * @return スキーマ名
     */
    protected String getSchemaName() {
        return SCHEMA_NAME;
    }

    /**
     * このエンティティのＤＢに対応している項目の
     * 全スキーマ項目名とＤＢカラム名のリストを取得します。<br>
     * キャッシュを行なってあります。
     * インデックス０にスキーマ項目名のリスト、
     * インデックス１にＤＢカラム名のリストが設定されます。
     * @return ＤＢに対応している項目の全スキーマ項目名とＤＢカラム名のリスト
     */
    protected String[][] getSelectColumnList() {
    
        if (selectColumnList == null) {
            selectColumnList = super.getSelectColumnList();
        }
        return selectColumnList;
    }

}
