added the comment status count field
[mir.git] / source / mir / producer / ExternalDbProducerNode.java
index cfc1e51..301ed80 100755 (executable)
  */
 package mir.producer;
 
+import mir.util.ExceptionRoutines;
+import mir.util.ParameterExpander;
+
+import java.sql.*;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-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 +45,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 +57,58 @@ 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 (expandedDriver.equals("mysql")){
-       Class.forName("com.mysql.jdbc.Driver");
+      if (expandedDriver.equals("postgresql")) {
+        Class.forName("org.postgresql.Driver");
       }
-      else {
-         throw new Exception("Unsupported DB Driver:"+expandedDriver);
+      if (expandedDriver.equals("mysql")) {
+        Class.forName("com.mysql.jdbc.Driver");
+      } else {
+        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();
+      ArrayList 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)) {
+        HashMap 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);
     }
-  };
+  }
 }