/*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
*
* This file is part of Mir.
*
*
* In addition, as a special exception, The Mir-coders gives permission to link
* the code of this program with any library licensed under the Apache Software License,
- * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
- * (or with modified versions of the above that use the same license as the above),
* and distribute linked combinations including the two. You must obey the
* GNU General Public License in all respects for all of the code used other than
* the above mentioned libraries. If you modify this file, you may extend this
*/
package mir.producer;
+import mir.util.ParameterExpander;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
-import java.sql.*;
-
-
-import mir.log.LoggerWrapper;
-import mir.util.ExceptionFunctions;
-import mir.util.ParameterExpander;
public class ExternalDbProducerNode extends ProducerNodeDecorator {
private String key;
private String database;
private String username;
private String password;
- private String query;
-
+ private String query;
- public ExternalDbProducerNode(String aKey, String aDriver, String aHost, String aPort, String aDatabase, String aUsername, String aPassword,String aQuery,ProducerNode aSubNode) {
+ public ExternalDbProducerNode(String aKey, String aDriver, String aHost, String aPort, String aDatabase, String aUsername, String aPassword, String aQuery, ProducerNode aSubNode) {
super(aSubNode);
+
key = aKey;
driver = aDriver;
host = aHost;
database = aDatabase;
username = aUsername;
password = aPassword;
- query =aQuery;
-
+ query = aQuery;
}
- public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure {
+ public void produce(ProductionContext aProductionContext) throws ProducerFailure {
try {
- String expandedKey = ParameterExpander.expandExpression( aValueMap, key );
- String expandedDriver = ParameterExpander.expandExpression( aValueMap, driver);
- String expandedHost = ParameterExpander.expandExpression( aValueMap, host);
- String expandedPort = ParameterExpander.expandExpression( aValueMap, port);
- String expandedDatabase = ParameterExpander.expandExpression( aValueMap, database);
- String expandedUsername = ParameterExpander.expandExpression( aValueMap, username);
- String expandedPassword = ParameterExpander.expandExpression( aValueMap, password);
- String expandedQuery = ParameterExpander.expandExpression( aValueMap, query);
+ String expandedKey = ParameterExpander.expandExpression(aProductionContext.getValueSet(), key);
+ String expandedDriver = ParameterExpander.expandExpression(aProductionContext.getValueSet(), driver);
+ String expandedHost = ParameterExpander.expandExpression(aProductionContext.getValueSet(), host);
+ String expandedPort = ParameterExpander.expandExpression(aProductionContext.getValueSet(), port);
+ String expandedDatabase = ParameterExpander.expandExpression(aProductionContext.getValueSet(), database);
+ String expandedUsername = ParameterExpander.expandExpression(aProductionContext.getValueSet(), username);
+ String expandedPassword = ParameterExpander.expandExpression(aProductionContext.getValueSet(), password);
+ String expandedQuery = ParameterExpander.expandExpression(aProductionContext.getValueSet(), query);
- if (expandedDriver.equals("postgresql")){
- Class.forName("org.postgresql.Driver");
+ if ("postgresql".equals(expandedDriver)) {
+ Class.forName("org.postgresql.Driver");
}
- if (expandedDriver.equals("mysql")){
- Class.forName("com.mysql.jdbc.Driver");
+ if ("mysql".equals(expandedDriver)) {
+ Class.forName("com.mysql.jdbc.Driver");
}
else {
- throw new Exception("Unsupported DB Driver:"+expandedDriver);
+ throw new Exception("Unsupported DB Driver:" + expandedDriver);
}
-
- Connection db = DriverManager.getConnection("jdbc:"+expandedDriver+"://"+expandedHost
- +":"+expandedPort+"/"+expandedDatabase
- , expandedUsername, expandedPassword);
-
+
+ Connection db = DriverManager.getConnection("jdbc:" + expandedDriver + "://" + expandedHost
+ + ":" + expandedPort + "/" + expandedDatabase
+ , expandedUsername, expandedPassword);
+
Statement st = db.createStatement();
ResultSet rs = st.executeQuery(expandedQuery);
ResultSetMetaData rsmd = rs.getMetaData();
- int numberOfColumns= rsmd.getColumnCount();
- ArrayList fieldNames = new ArrayList(numberOfColumns);
- for (int i=0;i<numberOfColumns;i++){
- fieldNames.add(rsmd.getColumnName(i+1));
+ int numberOfColumns = rsmd.getColumnCount();
+ List fieldNames = new ArrayList(numberOfColumns);
+ for (int i = 0; i < numberOfColumns; i++) {
+ fieldNames.add(rsmd.getColumnName(i + 1));
}
- while(rs.next() && !isAborted(aValueMap)) {
- HashMap result=new HashMap();
- Iterator fields = fieldNames.iterator();
- while (fields.hasNext()) {
- String field=(String) fields.next();
- result.put(field,rs.getString(field));
- }
- ParameterExpander.setValueForKey(aValueMap,expandedKey,result);
- super.produce(aValueMap, aVerb, aLogger);
+ while (rs.next() && !isAborted(aProductionContext)) {
+ Map result = new HashMap();
+ Iterator fields = fieldNames.iterator();
+ while (fields.hasNext()) {
+ String field = (String) fields.next();
+ result.put(field, rs.getString(field));
+ }
+ ParameterExpander.setValueForKey(aProductionContext.getValueSet(), expandedKey, result);
+ super.produce(aProductionContext);
}
rs.close();
st.close();
db.close();
}
catch (Throwable t) {
- Throwable s = ExceptionFunctions.traceCauseException(t);
- aLogger.error("Error while accessing external database: " + s.getClass().getName()+","+ s.getMessage());
+ aProductionContext.getLogger().warn("Error while accessing external database", t);
}
- };
+ }
}