/**
 * 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 : SIModifyRec.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 SIModifyRec extends SIExecuteUpdate {

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

  public SIModifyRec(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 lModifyBuf=new StringBuffer();
    String lCondtionSQL=this.getConditionSQL();

    log.debug("getSQL:tableName="+tableName+",lCondtionSQL="+lCondtionSQL);

    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);
      lModifyBuf.append(","+lName+"=");
      if (lValue==null){
        lModifyBuf.append("null ");
      }else if (lValue instanceof String){
        if (SIUtil.isNull((String)lValue)==true)lModifyBuf.append("null ");
        else lModifyBuf.append("'"+SIDBUtil.sqlEncode((String)lValue)+"' ");
      }else if (lValue instanceof Integer){
        lModifyBuf.append(((Integer)lValue).intValue()+" ");
      }else if (lValue instanceof Long){
        lModifyBuf.append(((Long)lValue).longValue()+" ");
      }else if (lValue instanceof Long){
        lModifyBuf.append(((Float)lValue).floatValue()+" ");
      }else if (lValue instanceof SISpcType){
        lModifyBuf.append(((SISpcType)lValue).toValue()+" ");
        }else lModifyBuf.append("null ");
    }

    if (lModifyBuf.length()>0)lModifyBuf=new StringBuffer("UPDATE "+tableName+" SET "+lModifyBuf.toString().substring(1));
    if (lCondtionSQL.trim().length() >0 )lModifyBuf.append(" WHERE "+lCondtionSQL);

    log.debug("getSQL:lModifyBuf="+lModifyBuf.toString());
    return lModifyBuf.toString();
  }
}