/**
 * 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: SINewsManager.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/25  Original
 */
public class SINewsManager {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  private LinkedHashMap news = new LinkedHashMap();

  public SINewsManager(){
  }

  /**
   * SINewsManager
   * 表示可能なニュースメッセージを取得します
   * @param lConnection
   */
  public SINewsManager(Connection lConnection) {
    this(lConnection,0);
  }
  
  public SINewsManager(Connection lConnection,boolean mobileFlg) {
    this(lConnection,9);
  }
  
  public SINewsManager(Connection lConnection,int index) {
    Statement statement=null;
    ResultSet resultSet=null;
    SINews lNews;
    String lNow=(new SIDateTime()).getFullDateTime();
    
    //クエリ文の作成
    StringBuffer lSqlBuf=new StringBuffer();
    lSqlBuf.append("SELECT NewsCode,StartDateTime,Description ");
    lSqlBuf.append("FROM NewsMTbl ");
    if (SIDBMultiConf.SIDB_CURRENT_INX==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lSqlBuf.append("WHERE StartDateTime<=").append(SIDBUtil.SQL2Str(lNow," "));
    }else{
      lSqlBuf.append("WHERE StartDateTime<=").append(new SIDateTimeType(lNow).getValue());
    }
    lSqlBuf.append(" AND dispFlg=").append(SIDBUtil.SQL2Str(String.valueOf(index)," "));
    
    lSqlBuf.append("ORDER BY StartDateTime DESC");
    //
    try {
      log.debug("lSqlBuf="+lSqlBuf.toString());
      statement=lConnection.createStatement();
      resultSet=statement.executeQuery(lSqlBuf.toString());
      while(resultSet.next()){
        lNews=new SINews();
        lNews.setEncode(SIConfig.SIENCODE_NONE);
        lNews.setNewsCode(resultSet.getString("NewsCode"));
        lNews.setStartDateTime(SIDBUtil.getDateTime(resultSet.getTimestamp("StartDateTime")));
        lNews.setDescription(resultSet.getString("Description"));
        if (index==5){
        }else if (lNews.getDescription().indexOf("target=\"_blank\"") > 0||lNews.getDescription().indexOf("target=\"blank\"") > 0) {
          lNews.setDescription(lNews.getDescription().replaceAll("</a>", " <img src=\"/ws/img/icon_blank.gif\" alt=\"\" /></a>"));
        }
        news.put(lNews.getNewsCode(),lNews);
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      SIDBUtil.close(statement,resultSet);
    }
  }

  /**
   * <b>getCollection</b>
   * ニュースメッセージコレクションを取得します
   * @param  なし
   * @return Collection
   */
  public Collection getCollection() {
    return news.values();
  }
}