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

import java.util.*;
import org.apache.log4j.Category;
import jp.co.sint.tools.*;
import jp.co.sint.config.*;

/**
 * @version $Id : SIInsertRec.java,v 1.0 Exp $
 * @author      : Jinwang Chen
 * <br>Description :テーブルに対する新規レコードを作成するとき、各パラメタを設定して
 *               テーブルにレコードを作製します。
 * <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>
 * J.W.Chen       2003/06/26  Original
 */

public class SIInsertRec extends SIExecute {

  //ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  public SIInsertRec() {
  }

  public SIInsertRec(String lTableName) {
    this.tableName = lTableName;
  }

  public void setSQL(String lSQL) {
    if (SIUtil.isNull(lSQL))
      lSQL = "";
    this.sQL = lSQL;
  }

  public String getSQL() {
    if (SIUtil.isNotNull(this.sQL))
      return this.sQL;

    StringBuffer lIntoBuf = new StringBuffer();
    StringBuffer lValueBuf = new StringBuffer();
    String lName;
    Object lValue;

    if (valuesMap == null || valuesMap.size() == 0)
      return "";
    if (SIUtil.isNull(tableName) == true)
      return "";

    for (Iterator it = valuesMap.keySet().iterator(); it.hasNext();) {
      lName = (String) it.next();
      lValue = valuesMap.get(lName);
      lIntoBuf.append("," + lName);

      if (lValue == null) {
        lValueBuf.append(",null");
      } else if (lValue instanceof String) {
        if (SIUtil.isNull((String) lValue) == true)
          lValueBuf.append(",null");
        else
          lValueBuf.append(",'" + SIDBUtil.sqlEncode((String) lValue) + "'");
      } else if (lValue instanceof Integer) {
        lValueBuf.append("," + ((Integer) lValue).intValue());
      } else if (lValue instanceof Long) {
        lValueBuf.append("," + ((Long) lValue).longValue());
      } else if (lValue instanceof Long) {
        lValueBuf.append("," + ((Float) lValue).floatValue());
      } else if (lValue instanceof SISpcType) {
        lValueBuf.append("," + ((SISpcType) lValue).toValue());
      } else
        lValueBuf.append(",null");
    }

    if (lIntoBuf.length() > 0)
      lIntoBuf = new StringBuffer("INSERT INTO " + tableName + "(" + lIntoBuf.toString().substring(1));
    if (lValueBuf.length() > 0)
      lValueBuf = new StringBuffer(")VALUES(" + lValueBuf.toString().substring(1) + ")");
    log.debug("getSQL:sql=" + lIntoBuf.toString() + lValueBuf.toString());
    return lIntoBuf.toString() + lValueBuf.toString();
  }
}