[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