Package com.dp.nebula.wormhole.plugins.common

Source Code of com.dp.nebula.wormhole.plugins.common.DBResultSetSender

package com.dp.nebula.wormhole.plugins.common;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.dp.nebula.wormhole.common.interfaces.ILine;
import com.dp.nebula.wormhole.common.interfaces.ILineSender;
import com.dp.nebula.wormhole.common.interfaces.IPluginMonitor;


public class DBResultSetSender {
 
  private ILineSender sender;

  private int columnCount;
 
  private IPluginMonitor monitor;

  private Map<String, SimpleDateFormat> dateFormatMap = new HashMap<String, SimpleDateFormat>();

  private SimpleDateFormat[] timeMap = null;

  private static final Log s_logger = LogFactory.getLog(DBResultSetSender.class);

  public static DBResultSetSender newSender(ILineSender sender) {
    return new DBResultSetSender(sender);
  }

  public DBResultSetSender(ILineSender lineSender) {
    this.sender = lineSender;
  }

  public void setMonitor(IPluginMonitor iMonitor) {
    this.monitor = iMonitor;
  }
 
  public void setDateFormatMap(Map<String, SimpleDateFormat> dateFormatMap) {
    this.dateFormatMap = dateFormatMap;
  }

  public void sendToWriter(ResultSet resultSet) throws SQLException{
    String item = null;
    Timestamp ts = null;
    setColumnCount(resultSet.getMetaData().getColumnCount());
    setColumnTypes(resultSet);
    while (resultSet.next()) {
      ILine line = sender.createNewLine();
      try {
        /* TODO: date format need to handle by transfomer plugin */
        for (int i = 1; i <= columnCount; i++) {
          if (null != timeMap[i]) {
            ts = resultSet.getTimestamp(i);
            if (null != ts) {
              item = timeMap[i].format(ts);
            } else {
              item = null;
            }
          } else {
            item = resultSet.getString(i);
          }
          line.addField(item);
        }
        Boolean b = sender.send(line);
        if (null != monitor) {
          if (b) {
            monitor.increaseSuccessLines();
          } else {
            monitor.increaseFailedLines();
          }
        }
      } catch (SQLException e) {
        monitor.increaseFailedLines();
        s_logger.error(e.getMessage() + "| One dirty line : " + line.toString('\t'));
      }
    }
   
  }

  public void flush() {
    if (sender != null) {
      sender.flush();
    }
  }
 
  private void setColumnTypes(ResultSet resultSet) throws SQLException {
    timeMap = new SimpleDateFormat[columnCount + 1];

    ResultSetMetaData rsmd = resultSet.getMetaData();
   
    for (int i = 1; i <= columnCount; i++) {
      String type = rsmd.getColumnTypeName(i).toLowerCase().trim();
      if (this.dateFormatMap.containsKey(type)) {
        timeMap[i] = this.dateFormatMap.get(type);
      }
    }
  }
 
  private void setColumnCount(int columnCount) {
    this.columnCount = columnCount;
  }

}
TOP

Related Classes of com.dp.nebula.wormhole.plugins.common.DBResultSetSender

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.