[jboss-svn-commits] JBL Code SVN: r35631 - in labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src: main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 21 04:06:36 EDT 2010


Author: velias
Date: 2010-10-21 04:06:35 -0400 (Thu, 21 Oct 2010)
New Revision: 35631

Added:
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSourceTest.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBaseTest.java
Modified:
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregator.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SingleKeyListAggregator.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/FISHEYEAggregatorTest.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/JIRAAggregatorTest.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregatorTest.java
Log:
SBSValueSource implemented

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -5,6 +5,8 @@
 import java.io.Writer;
 import java.util.Date;
 
+import javax.sql.DataSource;
+
 import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
 import org.jboss.community.sbs.plugin.reports.monthly.aggregator.AggregatorUtils;
 import org.jboss.community.sbs.plugin.reports.monthly.aggregator.FISHEYEAggregator;
@@ -28,6 +30,14 @@
  */
 public class ReportGenerator {
 
+  /**
+   * SBS DB data source used to obtain SBS data.
+   */
+  protected DataSource dataSource;
+
+  /**
+   * Value separator used in report output CSV file.
+   */
   public static final char CSV_FILE_SEPARATOR = ',';
 
   /**
@@ -36,6 +46,7 @@
    * @param configFile input stream with report content configuration file. See {@link ReportConfigParser}.
    * @param dateFrom lower time bound to generate report for
    * @param dateTo upper time bound to generate report for
+   * @param rhUsersSnapshotTimestamp timestamp of used SBS RH users snapshot
    * @param sysConfig System configuration provider to be used during report generation. Required system config values
    *          are documented in distinct {@link ValueSource} subclass's javadoc.
    * 
@@ -43,12 +54,13 @@
    * 
    * @throws Exception if something goes wrong
    */
-  public String generateReport(InputStream configFile, Date dateFrom, Date dateTo, SystemConfigProvider sysConfig)
-      throws Exception {
+  public String generateReport(InputStream configFile, Date dateFrom, Date dateTo, Date rhUsersSnapshotTimestamp,
+      SystemConfigProvider sysConfig) throws Exception {
 
     ReportConfig config = new ReportConfigParser().parseConfigFile(configFile);
 
-    SBSAggregator as = new SBSAggregator(new SBSValueSource(sysConfig, dateFrom, dateTo));
+    SBSAggregator as = new SBSAggregator(new SBSValueSource(dataSource, sysConfig, dateFrom, dateTo,
+        rhUsersSnapshotTimestamp));
     JIRAAggregator aj = new JIRAAggregator(new JIRAValueSource(sysConfig, dateFrom, dateTo));
     FISHEYEAggregator af = new FISHEYEAggregator(new FISHEYEValueSource(sysConfig, dateFrom, dateTo));
 
@@ -81,11 +93,12 @@
    * @param aJira JIRA aggregator to use
    * @param aFisheye FihEye aggregator to use
    * @param return number of generated rows
+   * @throws Exception
    * 
    */
   @SuppressWarnings("unchecked")
   protected int generateValues(CSVWriter csvwriter, ReportConfig config, Aggregator aSbs, Aggregator aJira,
-      Aggregator aFisheye) {
+      Aggregator aFisheye) throws Exception {
 
     int rowcount = 0;
     if (config != null && !AggregatorUtils.isEmptyList(config.getProjects())) {
@@ -128,4 +141,13 @@
     i = AggregatorUtils.fillArray(header, hfisheye, i);
     csvwriter.writeNext(header);
   }
+
+  /**
+   * Set SBS DB data source used to obtain SBS data. Used for Spring injection.
+   * 
+   * @param dataSource SBS DB data source used to obtain SBS data
+   */
+  public void setDataSource(DataSource dataSource) {
+    this.dataSource = dataSource;
+  }
 }

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/Aggregator.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -33,7 +33,8 @@
    * 
    * @param config element to get data for
    * @return String array with values.
+   * @throws Exception
    */
-  public abstract String[] getReportValues(T config);
+  public abstract String[] getReportValues(T config) throws Exception;
 
 }
\ No newline at end of file

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregator.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregator.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -39,7 +39,7 @@
   }
 
   @Override
-  public String[] getReportValues(SystemDataConfigSBS config) {
+  public String[] getReportValues(SystemDataConfigSBS config) throws Exception {
     List<Long> devSpacesList = (config != null ? config.getDevSpaces() : null);
     List<Long> userSpacesList = (config != null ? config.getUserSpaces() : null);
 
@@ -75,9 +75,10 @@
    * @param valueType type of value to get
    * @param spaces list of Space identifiers to sum values for
    * @return summed value. Return {@link Aggregator#VALUE_NOT_AVAILABLE} if input spaces list is empty.
+   * @throws Exception
    * 
    */
-  protected String getReportValue(SBSValueType valueType, List<Long> spaces) {
+  protected String getReportValue(SBSValueType valueType, List<Long> spaces) throws Exception {
     return getReportValue(valueType, spaces, null);
   }
 
@@ -88,9 +89,10 @@
    * @param spaces1 list of Space identifiers to sum values for
    * @param spaces2 list of Space identifiers to sum values for
    * @return summed value. Return {@link Aggregator#VALUE_NOT_AVAILABLE} if both input spaces lists are empty.
+   * @throws Exception
    * 
    */
-  protected String getReportValue(SBSValueType valueType, List<Long> spaces1, List<Long> spaces2) {
+  protected String getReportValue(SBSValueType valueType, List<Long> spaces1, List<Long> spaces2) throws Exception {
 
     if (AggregatorUtils.isEmptyList(spaces1) && AggregatorUtils.isEmptyList(spaces2)) {
       return VALUE_NOT_AVAILABLE;

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SingleKeyListAggregator.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SingleKeyListAggregator.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SingleKeyListAggregator.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -32,7 +32,7 @@
   }
 
   @Override
-  public String[] getReportValues(T config) {
+  public String[] getReportValues(T config) throws Exception {
     List<Z> keyList = (config != null ? getKeyList(config) : null);
     if (!AggregatorUtils.isEmptyList(keyList)) {
       long[] ret = AggregatorUtils.createFilledArray(arrayLen, 0l);

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSource.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -1,31 +1,202 @@
 package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
 
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
+import javax.sql.DataSource;
+
 import org.jboss.community.sbs.plugin.reports.monthly.SystemConfigProvider;
 
 /**
- * Data source to obtain report value for one Space from SBS.
+ * Data source used to obtain report value for Space from SBS.
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
  */
 public class SBSValueSource extends ValueSourceBase<SBSValueKey> {
 
   /**
+   * DB data source used to load data from.
+   */
+  protected DataSource dataSource;
+
+  protected Date rhUsersSnapshotTimestamp;
+
+  /**
+   * Values loaded from DB by bulk SQL queries are stored here for subsequent {@link #getValues(SBSValueKey)} calls.
+   */
+  protected Map<SBSValueType, Map<Long, Long>> valueCache = new HashMap<SBSValueType, Map<Long, Long>>();
+
+  /**
+   * Map with SQL select statements used to obtain distinct types of values.
+   * 
+   * @see #initSqlStatements()
+   */
+  protected Map<SBSValueType, String> sqlStatements = new HashMap<SBSValueType, String>();
+
+  /**
    * Constructor.
    * 
+   * @param dataSource SBS DB data source used to load data from
    * @param sysConfig System configuration provider to be used
    * @param dateFrom lower time bound to generate report for
    * @param dateTo upper time bound to generate report for
+   * @param rhUsersSnapshotTimestamp timestamp of used SBS RH users snapshot
    */
-  public SBSValueSource(SystemConfigProvider sysConfig, Date dateFrom, Date dateTo) {
+  public SBSValueSource(DataSource dataSource, SystemConfigProvider sysConfig, Date dateFrom, Date dateTo,
+      Date rhUsersSnapshotTimestamp) {
     super(sysConfig, dateFrom, dateTo);
+    this.dataSource = dataSource;
+    this.rhUsersSnapshotTimestamp = rhUsersSnapshotTimestamp;
+    initSqlStatements();
   }
 
+  /**
+   * Init SQL statements used to obtain values from SBS database.
+   * <p>
+   * SQL select statement must return two long values:
+   * <ul>
+   * <li>spaceId
+   * <li>given type of value for report
+   * </ul>
+   * <p>
+   * SQL statement must use three long parameters in where clause:
+   * <ul>
+   * <li>rhUsersSnapshotTimestamp
+   * <li>dateFrom
+   * <li>dateTo
+   * </ul>
+   */
+  protected void initSqlStatements() {
+    // TODO LIBOR define correct SQL statements!
+
+    // WIKI related values
+    sqlStatements.put(SBSValueType.WIKI_NEW_ARTICLE_RH,
+        "select spadeid, value from ... where rhUsersSnapshotTimestamp=? and date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.WIKI_NEW_ARTICLE_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    sqlStatements.put(SBSValueType.WIKI_EDIT_ARTICLE_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.WIKI_EDIT_ARTICLE_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    sqlStatements.put(SBSValueType.WIKI_COMMENT_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.WIKI_COMMENT_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    // forum related values
+    sqlStatements.put(SBSValueType.FORUM_QUESTION_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.FORUM_QUESTION_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    sqlStatements.put(SBSValueType.FORUM_ANSWER_HELPFUL_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.FORUM_ANSWER_CORRECT_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.FORUM_ANSWER_HELPFUL_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.FORUM_ANSWER_CORRECT_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    sqlStatements.put(SBSValueType.FORUM_THREAD_RH,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements.put(SBSValueType.FORUM_THREAD_CM,
+        "select spadeid, value from ... where date > ? and date < ? and ...");
+
+    sqlStatements
+        .put(SBSValueType.FORUM_REPLY_RH, "select spadeid, value from ... where date > ? and date < ? and ...");
+    sqlStatements
+        .put(SBSValueType.FORUM_REPLY_CM, "select spadeid, value from ... where date > ? and date < ? and ...");
+
+  }
+
   @Override
-  public String[] getValues(SBSValueKey id) {
-    // TODO LIBOR implement SBSDataSource, return single value array!
-    return null;
+  public String[] getValues(SBSValueKey id) throws Exception {
+    // must return one item array with value of defined type for defined space
+    Map<Long, Long> valMap = valueCache.get(id.getValueType());
+    if (valMap == null) {
+      valMap = loadValMap(id.getValueType());
+      valueCache.put(id.getValueType(), valMap);
+    }
+    Long val = valMap.get(id.getSpaceId());
+    if (val == null)
+      val = 0l;
+    return new String[] { val.toString() };
   }
 
+  /**
+   * Load value map from DB for given value type.
+   * 
+   * @param valueType type of value to load map for
+   * @return loaded map of values
+   * @throws Exception
+   */
+  protected Map<Long, Long> loadValMap(SBSValueType valueType) throws Exception {
+    String statement = sqlStatements.get(valueType);
+    if (statement == null) {
+      throw new IllegalArgumentException("No SQL statement defined for value type " + valueType);
+    }
+
+    Connection conn = dataSource.getConnection();
+    PreparedStatement ps = null;
+    ResultSet rs = null;
+    try {
+      ps = conn.prepareStatement(statement);
+      ps.setLong(1, rhUsersSnapshotTimestamp.getTime());
+      ps.setLong(2, dateFrom.getTime());
+      ps.setLong(3, dateTo.getTime());
+
+      rs = ps.executeQuery();
+
+      Map<Long, Long> ret = new HashMap<Long, Long>();
+      if (rs != null) {
+        while (rs.next()) {
+          ret.put(rs.getLong(1), rs.getLong(2));
+        }
+      }
+
+      return ret;
+    } finally {
+      finalizeDBStuff(conn, ps, rs);
+    }
+  }
+
+  /**
+   * Finalize work with DB stuff.
+   * 
+   * @param conn to close if not null
+   * @param ps to close if not null
+   * @param rs to close if not null
+   */
+  protected void finalizeDBStuff(Connection conn, PreparedStatement ps, ResultSet rs) {
+    if (rs != null) {
+      try {
+        rs.close();
+      } catch (SQLException e) {
+        // nothing to do
+      }
+    }
+    if (ps != null) {
+      try {
+        ps.close();
+      } catch (SQLException e) {
+        // nothing to do
+      }
+    }
+    if (conn != null) {
+      try {
+        conn.close();
+      } catch (SQLException e) {
+        // nothing to do
+      }
+    }
+  }
+
 }

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSource.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -20,7 +20,9 @@
    * 
    * @param id identifier to read data for
    * @return values for given id
+   * 
+   * @throws Exception if something goes wrong
    */
-  public String[] getValues(T id);
+  public String[] getValues(T id) throws Exception;
 
 }

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -39,7 +39,7 @@
   }
 
   @Test
-  public void generateValues() {
+  public void generateValues() throws Exception {
     ReportGenerator tested = new ReportGenerator();
 
     MockAggregator asbs = new MockAggregator("sbs", SystemId.SBS);

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/FISHEYEAggregatorTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/FISHEYEAggregatorTest.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/FISHEYEAggregatorTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -28,7 +28,7 @@
   }
 
   @Test
-  public void getReportValues() {
+  public void getReportValues() throws Exception {
 
     FISHEYEAggregator tested = new FISHEYEAggregator(valueSourceMock);
 

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/JIRAAggregatorTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/JIRAAggregatorTest.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/JIRAAggregatorTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -27,7 +27,7 @@
   }
 
   @Test
-  public void getReportValues() {
+  public void getReportValues() throws Exception {
 
     JIRAAggregator tested = new JIRAAggregator(valueSourceMock);
 

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregatorTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregatorTest.java	2010-10-21 07:42:02 UTC (rev 35630)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/SBSAggregatorTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -31,7 +31,7 @@
   }
 
   @Test
-  public void getReportValues() {
+  public void getReportValues() throws Exception {
 
     SBSAggregator tested = new SBSAggregator(valueSourceMock);
 
@@ -85,7 +85,7 @@
   }
 
   @Test
-  public void getReportValue_1() {
+  public void getReportValue_1() throws Exception {
 
     SBSAggregator tested = new SBSAggregator(valueSourceMock);
 
@@ -110,7 +110,7 @@
   }
 
   @Test
-  public void getReportValue_2() {
+  public void getReportValue_2() throws Exception {
 
     SBSAggregator tested = new SBSAggregator(valueSourceMock);
 

Added: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSourceTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSourceTest.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/SBSValueSourceTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -0,0 +1,180 @@
+package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.sql.DataSource;
+
+import org.jboss.community.sbs.plugin.reports.monthly.JiveSystemConfigProvider;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link SBSValueSource}.
+ * 
+ * @author Vlastimil Elias (velias at redhat dot com)
+ */
+public class SBSValueSourceTest {
+
+  @Test
+  public void constructor() {
+    Date from = new Date();
+    Date to = new Date();
+    Date rhts = new Date();
+
+    SBSValueSource tested = new SBSValueSource(mockDataSource, new JiveSystemConfigProvider(), from, to, rhts);
+
+    Assert.assertTrue(tested.dataSource == mockDataSource);
+    Assert.assertNotNull(tested.sysConfig);
+    Assert.assertTrue(tested.dateFrom == from);
+    Assert.assertTrue(tested.dateTo == to);
+    Assert.assertTrue(tested.rhUsersSnapshotTimestamp == rhts);
+
+  }
+
+  @Test
+  public void initSqlStatements() {
+    SBSValueSource tested = new SBSValueSource(null, null, null, null, null);
+
+    tested.initSqlStatements();
+
+    // test statements are initialized for all value types
+    Assert.assertEquals(SBSValueType.values().length, tested.sqlStatements.size());
+    for (SBSValueType t : SBSValueType.values()) {
+      Assert.assertNotNull(tested.sqlStatements.get(t));
+    }
+  }
+
+  @Test
+  public void getValues() throws Exception {
+
+    SBSValueSourceLoadValueMock tested = new SBSValueSourceLoadValueMock();
+
+    SBSValueKey id = new SBSValueKey(SBSValueType.FORUM_ANSWER_CORRECT_CM);
+    id.setSpaceId(1l);
+    String[] val = tested.getValues(id);
+    // load called
+    Assert.assertEquals(1, tested.checkCallCount());
+    assertEquals(val, getMockVal(id));
+
+    // second space from loaded values
+    id.setSpaceId(2l);
+    val = tested.getValues(id);
+    // cache in action no other load call
+    Assert.assertEquals(0, tested.checkCallCount());
+    assertEquals(val, getMockVal(id));
+
+    // space which is not in loaded values
+    id.setSpaceId(100l);
+    val = tested.getValues(id);
+    // cache in action no other load call
+    Assert.assertEquals(0, tested.checkCallCount());
+    assertEquals(val, 0l);
+
+    // second value type
+    SBSValueKey id2 = new SBSValueKey(SBSValueType.FORUM_ANSWER_CORRECT_RH);
+    id2.setSpaceId(1l);
+    val = tested.getValues(id2);
+    // load called
+    Assert.assertEquals(1, tested.checkCallCount());
+    assertEquals(val, getMockVal(id2));
+
+    // second space from loaded values
+    id2.setSpaceId(2l);
+    val = tested.getValues(id2);
+    // cache in action no other load call
+    Assert.assertEquals(0, tested.checkCallCount());
+    assertEquals(val, getMockVal(id2));
+
+    // first value type again, cache in action still
+    id.setSpaceId(2l);
+    val = tested.getValues(id);
+    // cache in action no other load call
+    Assert.assertEquals(0, tested.checkCallCount());
+    assertEquals(val, getMockVal(id));
+  }
+
+  protected static Long getMockVal(SBSValueKey id) {
+    return getMockVal(id.getValueType(), id.getSpaceId());
+  }
+
+  protected static Long getMockVal(SBSValueType valueType, Long spaceId) {
+    return new Long(spaceId + valueType.hashCode());
+  }
+
+  protected void assertEquals(String[] val, Long expected) {
+    Assert.assertEquals(expected, new Long(val[0]));
+  }
+
+  protected static class SBSValueSourceLoadValueMock extends SBSValueSource {
+
+    protected int callCount = 0;
+
+    public int checkCallCount() {
+      int ret = callCount;
+      callCount = 0;
+      return ret;
+    }
+
+    public SBSValueSourceLoadValueMock() {
+      super(null, null, null, null, null);
+    }
+
+    @Override
+    protected Map<Long, Long> loadValMap(SBSValueType valueType) throws Exception {
+      Map<Long, Long> ret = new HashMap<Long, Long>();
+      ret.put(1l, getMockVal(valueType, 1l));
+      ret.put(2l, getMockVal(valueType, 2l));
+      ret.put(3l, getMockVal(valueType, 3l));
+      callCount++;
+      return ret;
+    }
+
+  }
+
+  private DataSource mockDataSource = new DataSource() {
+
+    @Override
+    public <T> T unwrap(Class<T> iface) throws SQLException {
+      return null;
+    }
+
+    @Override
+    public boolean isWrapperFor(Class<?> iface) throws SQLException {
+      return false;
+    }
+
+    @Override
+    public void setLoginTimeout(int seconds) throws SQLException {
+    }
+
+    @Override
+    public void setLogWriter(PrintWriter out) throws SQLException {
+    }
+
+    @Override
+    public int getLoginTimeout() throws SQLException {
+      return 0;
+    }
+
+    @Override
+    public PrintWriter getLogWriter() throws SQLException {
+      return null;
+    }
+
+    @Override
+    public Connection getConnection(String username, String password) throws SQLException {
+      return null;
+    }
+
+    @Override
+    public Connection getConnection() throws SQLException {
+      return null;
+    }
+  };
+
+}

Added: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBaseTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBaseTest.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBaseTest.java	2010-10-21 08:06:35 UTC (rev 35631)
@@ -0,0 +1,45 @@
+package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+
+import java.util.Date;
+
+import org.jboss.community.sbs.plugin.reports.monthly.JiveSystemConfigProvider;
+import org.jboss.community.sbs.plugin.reports.monthly.SystemConfigProvider;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link ValueSourceBase}.
+ * 
+ * @author Vlastimil Elias (velias at redhat dot com)
+ */
+public class ValueSourceBaseTest {
+
+  @SuppressWarnings("unchecked")
+  @Test
+  public void constructor() {
+
+    Date from = new Date();
+    Date to = new Date();
+
+    ValueSourceBase tested = new MockValueSource(new JiveSystemConfigProvider(), from, to);
+
+    Assert.assertNotNull(tested.sysConfig);
+    Assert.assertTrue(tested.dateFrom == from);
+    Assert.assertTrue(tested.dateTo == to);
+
+  }
+
+  @SuppressWarnings("unchecked")
+  static class MockValueSource extends ValueSourceBase {
+
+    public MockValueSource(SystemConfigProvider sysConfig, Date dateFrom, Date dateTo) {
+      super(sysConfig, dateFrom, dateTo);
+    }
+
+    @Override
+    public String[] getValues(Object id) throws Exception {
+      return null;
+    }
+
+  };
+}



More information about the jboss-svn-commits mailing list