package org.jzonic.jlo.handler;
import org.jzonic.jlo.LogRecord;
import org.jzonic.jlo.error.ErrorHandler;
import org.jzonic.jlo.formatter.tokens.TokenParser;
import java.util.Map;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author Andreas Mecky andreas.mecky@xcom.de
* @author Terry Dye terry.dye@xcom.de
*
*/
public class JDBCHandler extends AbstractHandler {
private String insertSQL;
private TokenParser tp = new TokenParser();
private Connection con;
private String jdbcDriver;
private String jdbcURL;
private String jdbcUser;
private String jdbcPassword;
public JDBCHandler(String configName) {
super(configName);
}
public void publish(String msg) {
throw new UnsupportedOperationException("no supported");
}
public Connection getConnection() {
try {
Class.forName(jdbcDriver);
}
catch (Exception e) {
ErrorHandler.reportError("Could not load driver", e);
}
try {
if ( con == null) {
con = DriverManager.getConnection(jdbcURL, jdbcUser,jdbcPassword);
}
return con;
}
catch (Exception e) {
ErrorHandler.reportError("Error while establishing connection", e);
}
return null;
}
public void closeConnection(Connection con) {
}
public void publish(LogRecord lr) {
// get the sql command
String sql = tp.parseLine(lr,insertSQL);
// execute sql
Connection con = null;
try {
con = getConnection();
if ( con != null ) {
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);
stmt.close();
}
}
catch (SQLException e) {
ErrorHandler.reportError("Error while running insert query", e);
}
closeConnection(con);
}
public void setParameter(Map parameters) {
if ( parameters.containsKey("sql")) {
insertSQL = (String)parameters.get("sql");
}
if ( parameters.containsKey("user")) {
jdbcUser = (String)parameters.get("user");
}
if ( parameters.containsKey("password")) {
jdbcPassword = (String)parameters.get("password");
}
if ( parameters.containsKey("driver")) {
jdbcDriver = (String)parameters.get("driver");
}
if ( parameters.containsKey("url")) {
jdbcURL = (String)parameters.get("url");
}
}
}