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

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Collection;
import java.util.LinkedHashMap;

import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDateTimeType;
import jp.co.sint.tools.SIDateTime;

import org.apache.log4j.Category;

/**
 * @version $Id: SIOpaqueManager.java,v 1.0 2003/10/15 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>
 * Jinwang Chen   2003/10/15 11:55:02  Original
 */
public class SIOpaqueManager {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);

  //メッセージのセット
  private LinkedHashMap opaques = new LinkedHashMap();

  public SIOpaqueManager() {}

  /**
   * <b>SIOpaqueManager</b>
   * コンストラクタ
   * @param なし
   * @return なし
   * @throws なし
   */
  public SIOpaqueManager(Connection lConnection) {
    Statement statement=null;
    ResultSet resultSet=null;
    SIOpaque opaque=new SIOpaque();
    SIDateTime lDateTime =new SIDateTime();
    String lNow = lDateTime.getFullDateTime();

    //クエリ用のSQL文の作成
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT OpaqueCode,Description FROM OpaqueMTbl ");
    if (SIDBMultiConf.SIDB_CURRENT_INX==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lSqlBuf.append("WHERE (StartDateTime<=").append(SIDBUtil.SQL2Str(lNow)).append(" AND EndDateTime>=").append(SIDBUtil.SQL2Str(lNow)).append(") ");
      lSqlBuf.append("OR    (StartDateTime IS NULL AND EndDateTime>=").append(SIDBUtil.SQL2Str(lNow)).append(") ");
      lSqlBuf.append("OR    (StartDateTime <=").append(SIDBUtil.SQL2Str(lNow)).append(" AND EndDateTime IS NULL) ");
    }else{
      lSqlBuf.append("WHERE (StartDateTime<=").append(new SIDateTimeType(lNow).getValue()).append(" AND EndDateTime>=").append(new SIDateTimeType(lNow).getValue()).append(") ");
      lSqlBuf.append("OR    (StartDateTime IS NULL AND EndDateTime>=").append(new SIDateTimeType(lNow).getValue()).append(") ");
      lSqlBuf.append("OR    (StartDateTime <=").append(new SIDateTimeType(lNow).getValue()).append(" AND EndDateTime IS NULL) ");
    }
    lSqlBuf.append("ORDER BY DispOrder");
    try {
      log.debug("lSqlBuf="+lSqlBuf);
      statement=lConnection.createStatement();
      resultSet=statement.executeQuery(lSqlBuf.toString());
      //テロップメッセージの構成
      while (resultSet.next()){
        opaque = new SIOpaque();
        opaque.setEncode(SIConfig.SIENCODE_NONE);
        opaque.setOpaqueCode(resultSet.getString("OpaqueCode"));
        opaque.setDescription(resultSet.getString("Description"));
        opaques.put(opaque.getOpaqueCode(),opaque);
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      SIDBUtil.close(statement,resultSet);
    }
  }

  /**
   * <b>getOpaqueAsArray</b>
   * テロップマスタに値レコードリスト
   * @param なし
   * @return 値レコードリスト
   * @throws なし
   */
  public Collection getCollection() {
     return opaques.values();
  }
}
