merged 1.1 branch into head
[mir.git] / source / mir / producer / ExternalDbProducerNode.java
index cfc1e51..3ff4b30 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
  *
  * This file is part of Mir.
  *
@@ -19,8 +19,6 @@
  *
  * 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;
@@ -48,11 +48,11 @@ public class ExternalDbProducerNode extends ProducerNodeDecorator {
   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;
@@ -60,61 +60,59 @@ public class ExternalDbProducerNode extends ProducerNodeDecorator {
     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);
     }
-  };
+  }
 }