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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 20 10:21:42 EDT 2010


Author: velias
Date: 2010-10-20 10:21:42 -0400 (Wed, 20 Oct 2010)
New Revision: 35597

Added:
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.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/AggregatorUtils.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java
   labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.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/aggregator/AggregatorUtilsTest.java
Log:
ReportGenerator implemented incl. unit tets

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-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGenerator.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,14 +1,25 @@
 package org.jboss.community.sbs.plugin.reports.monthly;
 
 import java.io.InputStream;
+import java.io.StringWriter;
+import java.io.Writer;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
 
 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;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.JIRAAggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.SBSAggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ProjectConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfig;
 import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfigParser;
 import org.jboss.community.sbs.plugin.reports.monthly.config.SystemId;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.FISHEYEValueSource;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.JIRAValueSource;
+import org.jboss.community.sbs.plugin.reports.monthly.valuesource.SBSValueSource;
 
+import au.com.bytecode.opencsv.CSVWriter;
+
 /**
  * JBoss.org monthly report generator.
  * 
@@ -16,25 +27,100 @@
  */
 public class ReportGenerator {
 
+  public static final char CSV_FILE_SEPARATOR = ',';
+
   /**
+   * Generate JBoss.org monthly report. This method is reentrant and thread safe.
    * 
+   * @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
+   * @return String containing csv file with generated report data
    * 
-   * @param configFile input stream with report content configuration file. See {@link ReportConfigParser}.
-   * @param dateFrom
-   * @param DateTo
-   * @return
+   * @throws Exception if something goes wrong
    */
-  public String generateReport(InputStream configFile, Date dateFrom, Date DateTo) {
+  public String generateReport(InputStream configFile, Date dateFrom, Date dateTo) throws Exception {
 
-    // TODO RG parse config file
-    // TODO RG prepare value sources
-    // TODO RG prepare aggregators
-    // TODO RG generate report
+    ReportConfig config = new ReportConfigParser().parseConfigFile(configFile);
 
-    Map<SystemId, Aggregator> agregators = new HashMap<SystemId, Aggregator>();
+    SBSAggregator as = new SBSAggregator(new SBSValueSource(dateFrom, dateTo));
+    JIRAAggregator aj = new JIRAAggregator(new JIRAValueSource(dateFrom, dateTo));
+    FISHEYEAggregator af = new FISHEYEAggregator(new FISHEYEValueSource(dateFrom, dateTo));
 
-    return null;
+    StringWriter writer = new StringWriter();
+    CSVWriter csvwriter = getCSVWriter(writer);
 
+    generateHeader(csvwriter, as, aj, af);
+
+    generateValues(csvwriter, config, as, aj, af);
+
+    return writer.toString();
   }
 
+  /**
+   * Get CSV writer used to create result CSV file.
+   * 
+   * @param writer to be filled by CSV.
+   * @return CSV writer.
+   */
+  protected CSVWriter getCSVWriter(Writer writer) {
+    return new CSVWriter(writer, CSV_FILE_SEPARATOR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER);
+  }
+
+  /**
+   * Generate report value rows.
+   * 
+   * @param csvwriter to write rows to
+   * @param config report content configuration
+   * @param aSbs SBS aggregator to use
+   * @param aJira JIRA aggregator to use
+   * @param aFisheye FihEye aggregator to use
+   * @param return number of generated rows
+   * 
+   */
+  @SuppressWarnings("unchecked")
+  protected int generateValues(CSVWriter csvwriter, ReportConfig config, Aggregator aSbs, Aggregator aJira,
+      Aggregator aFisheye) {
+
+    int rowcount = 0;
+    if (config != null && !AggregatorUtils.isEmptyList(config.getProjects())) {
+
+      for (ProjectConfig pc : config.getProjects()) {
+        String[] valsbs = aSbs.getReportValues(pc.getSystemDataConfigFor(SystemId.SBS));
+        String[] valjira = aJira.getReportValues(pc.getSystemDataConfigFor(SystemId.JIRA));
+        String[] valfisheye = aFisheye.getReportValues(pc.getSystemDataConfigFor(SystemId.FISHEYE));
+
+        String[] vals = new String[1 + valsbs.length + valjira.length + valfisheye.length];
+        vals[0] = pc.getName();
+        int i = 1;
+        i = AggregatorUtils.fillArray(vals, valsbs, i);
+        i = AggregatorUtils.fillArray(vals, valjira, i);
+        i = AggregatorUtils.fillArray(vals, valfisheye, i);
+        csvwriter.writeNext(vals);
+        rowcount++;
+      }
+    }
+    return rowcount;
+  }
+
+  /**
+   * Generate report header row.
+   * 
+   * @param csvwriter to write header row to
+   * @param aSbs SBS aggregator to use
+   * @param aJira JIRA aggregator to use
+   * @param aFisheye FihEye aggregator to use
+   */
+  protected void generateHeader(CSVWriter csvwriter, Aggregator<?> aSbs, Aggregator<?> aJira, Aggregator<?> aFisheye) {
+    String[] hsbs = aSbs.getHeaderValues();
+    String[] hjira = aJira.getHeaderValues();
+    String[] hfisheye = aFisheye.getHeaderValues();
+    String[] header = new String[1 + hsbs.length + hjira.length + hfisheye.length];
+    header[0] = "Project";
+    int i = 1;
+    i = AggregatorUtils.fillArray(header, hsbs, i);
+    i = AggregatorUtils.fillArray(header, hjira, i);
+    i = AggregatorUtils.fillArray(header, hfisheye, i);
+    csvwriter.writeNext(header);
+  }
 }

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-20 12:05:21 UTC (rev 35596)
+++ 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-20 14:21:42 UTC (rev 35597)
@@ -6,6 +6,9 @@
 /**
  * Interface for data aggregator. Aggregator is used to aggregate report values from {@link ValueSource} for one
  * configuration element ({@link SystemDataConfig}) for distinct project and system.
+ * <p>
+ * New instance of {@link Aggregator} implementation is created for every report generation, so you may use instance
+ * variables if necessary, and initialize it in constructor.
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
  */

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java	2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtils.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -124,4 +124,22 @@
     return list == null || list.isEmpty();
   }
 
+  /**
+   * Fill data from one array to another array starting on specified position.
+   * 
+   * @param master array which is filled with values
+   * @param values to fill into master
+   * @param beginIndex start index of filling in master array
+   * @return end index of filling in master array, points to first not filled item after filling
+   * 
+   * @throws ArrayIndexOutOfBoundsException if master array is too small
+   */
+  public static int fillArray(String[] master, String[] values, int beginIndex) {
+    int i = beginIndex;
+    for (int j = 0; j < values.length; i++, j++) {
+      master[i] = values[j];
+    }
+    return i;
+  }
+
 }

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java	2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/FISHEYEValueSource.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,5 +1,7 @@
 package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
 
+import java.util.Date;
+
 import org.jboss.community.sbs.plugin.reports.monthly.config.FishEyeRepositoryConfig;
 
 /**
@@ -7,8 +9,18 @@
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
  */
-public class FISHEYEValueSource implements ValueSource<FishEyeRepositoryConfig> {
+public class FISHEYEValueSource extends ValueSourceBase<FishEyeRepositoryConfig> {
 
+  /**
+   * Constructor.
+   * 
+   * @param dateFrom lower time bound to generate report for
+   * @param dateTo upper time bound to generate report for
+   */
+  public FISHEYEValueSource(Date dateFrom, Date dateTo) {
+    super(dateFrom, dateTo);
+  }
+
   @Override
   public String[] getValues(FishEyeRepositoryConfig id) {
     // TODO implement me

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java	2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/JIRAValueSource.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -1,13 +1,24 @@
 package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
 
+import java.util.Date;
 
 /**
  * Data source to obtain report value for one project in JIRA.
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
  */
-public class JIRAValueSource implements ValueSource<String> {
+public class JIRAValueSource extends ValueSourceBase<String> {
 
+  /**
+   * Constructor.
+   * 
+   * @param dateFrom lower time bound to generate report for
+   * @param dateTo upper time bound to generate report for
+   */
+  public JIRAValueSource(Date dateFrom, Date dateTo) {
+    super(dateFrom, dateTo);
+  }
+
   @Override
   public String[] getValues(String projectKey) {
     // TODO implement me

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-20 12:05:21 UTC (rev 35596)
+++ 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-20 14:21:42 UTC (rev 35597)
@@ -1,12 +1,24 @@
 package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
 
+import java.util.Date;
+
 /**
  * Data source to obtain report value for one Space from SBS.
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
  */
-public class SBSValueSource implements ValueSource<SBSValueKey> {
+public class SBSValueSource extends ValueSourceBase<SBSValueKey> {
 
+  /**
+   * Constructor.
+   * 
+   * @param dateFrom lower time bound to generate report for
+   * @param dateTo upper time bound to generate report for
+   */
+  public SBSValueSource(Date dateFrom, Date dateTo) {
+    super(dateFrom, dateTo);
+  }
+
   @Override
   public String[] getValues(SBSValueKey id) {
     // TODO LIBOR implement SBSDataSource, return single value array!

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-20 12:05:21 UTC (rev 35596)
+++ 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-20 14:21:42 UTC (rev 35597)
@@ -3,16 +3,20 @@
 import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
 
 /**
- * Interface for DataSource. Data sources are used in {@link Aggregator} instances to obtain data from underlying
- * system.
+ * Interface for Report Value Source. Value sources are used in {@link Aggregator} instances to obtain report values
+ * from underlying system based on identifier appropriate for given system.
+ * <p>
+ * New instance of {@link ValueSource} implementation is created for every report generation, so you may use instance
+ * variables if necessary, and initialize it in constructor.
  * 
  * @author Vlastimil Elias (velias at redhat dot com)
+ * 
  * @param T data type of identifier used to identify row of data in this data source.
  */
 public interface ValueSource<T> {
 
   /**
-   * Get values from underlying system for given config element.
+   * Get values from underlying system for one config element, one key.
    * 
    * @param id identifier to read data for
    * @return values for given id

Added: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/main/java/org/jboss/community/sbs/plugin/reports/monthly/valuesource/ValueSourceBase.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -0,0 +1,28 @@
+package org.jboss.community.sbs.plugin.reports.monthly.valuesource;
+
+import java.util.Date;
+
+/**
+ * Base class for {@link ValueSource} implementations.
+ * 
+ * @author Vlastimil Elias (velias at redhat dot com)
+ * 
+ * @param T data type of identifier used to identify row of data in this data source.
+ */
+public abstract class ValueSourceBase<T> implements ValueSource<T> {
+
+  protected Date dateFrom;
+  protected Date dateTo;
+
+  /**
+   * Constructor.
+   * 
+   * @param dateFrom lower time bound to generate report for
+   * @param dateTo upper time bound to generate report for
+   */
+  public ValueSourceBase(Date dateFrom, Date dateTo) {
+    this.dateFrom = dateFrom;
+    this.dateTo = dateTo;
+  }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/ReportGeneratorTest.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -0,0 +1,140 @@
+package org.jboss.community.sbs.plugin.reports.monthly;
+
+import java.io.StringWriter;
+
+import org.jboss.community.sbs.plugin.reports.monthly.aggregator.Aggregator;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ProjectConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.ReportConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.SystemDataConfig;
+import org.jboss.community.sbs.plugin.reports.monthly.config.SystemId;
+import org.junit.Assert;
+import org.junit.Test;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+/**
+ * Unit test for {@link ReportGenerator}.
+ * 
+ * @author Vlastimil Elias (velias at redhat dot com)
+ */
+public class ReportGeneratorTest {
+
+  @Test
+  public void generateHeader() {
+
+    ReportGenerator tested = new ReportGenerator();
+
+    StringWriter writer = new StringWriter();
+    CSVWriter csvwriter = tested.getCSVWriter(writer);
+
+    Aggregator<SystemDataConfig> asbs = new MockAggregator("sbs", SystemId.SBS);
+    Aggregator<SystemDataConfig> ajira = new MockAggregator("jira", SystemId.JIRA);
+    Aggregator<SystemDataConfig> afe = new MockAggregator("fe", SystemId.FISHEYE);
+
+    tested.generateHeader(csvwriter, asbs, ajira, afe);
+    Assert.assertEquals("Project,sbs-h1,sbs-h2,jira-h1,jira-h2,fe-h1,fe-h2\n", writer.toString());
+
+  }
+
+  @Test
+  public void generateValues() {
+    ReportGenerator tested = new ReportGenerator();
+
+    MockAggregator asbs = new MockAggregator("sbs", SystemId.SBS);
+    MockAggregator ajira = new MockAggregator("jira", SystemId.JIRA);
+    MockAggregator afe = new MockAggregator("fe", SystemId.FISHEYE);
+
+    // no config
+    StringWriter writer = new StringWriter();
+    CSVWriter csvwriter = tested.getCSVWriter(writer);
+    Assert.assertEquals(0, tested.generateValues(csvwriter, null, asbs, ajira, afe));
+    Assert.assertEquals("", writer.toString());
+
+    // no project
+    writer = new StringWriter();
+    csvwriter = tested.getCSVWriter(writer);
+    ReportConfig config = new ReportConfig();
+    Assert.assertEquals(0, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+    Assert.assertEquals("", writer.toString());
+
+    // single project
+    writer = new StringWriter();
+    csvwriter = tested.getCSVWriter(writer);
+    ProjectConfig pc = new ProjectConfig();
+    pc.setName("P1");
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.SBS));
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.JIRA));
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.FISHEYE));
+    config.addProjectConfig(pc);
+    Assert.assertEquals(1, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+    Assert.assertEquals(1, asbs.checkCallCount());
+    Assert.assertEquals(1, ajira.checkCallCount());
+    Assert.assertEquals(1, afe.checkCallCount());
+    Assert.assertEquals("P1,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\n", writer.toString());
+
+    // multiple projects
+    writer = new StringWriter();
+    csvwriter = tested.getCSVWriter(writer);
+    pc = new ProjectConfig();
+    pc.setName("P2");
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.SBS));
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.JIRA));
+    pc.addSystemDataConfig(new MockSystemDataConfig(SystemId.FISHEYE));
+    config.addProjectConfig(pc);
+    Assert.assertEquals(2, tested.generateValues(csvwriter, config, asbs, ajira, afe));
+    Assert.assertEquals(2, asbs.checkCallCount());
+    Assert.assertEquals(2, ajira.checkCallCount());
+    Assert.assertEquals(2, afe.checkCallCount());
+    Assert.assertEquals("P1,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\nP2,sbs-1,sbs-2,jira-1,jira-2,fe-1,fe-2\n", writer
+        .toString());
+
+  }
+
+  /**
+   * Mock system data config used for {@link MockAggregator}.
+   */
+  protected static class MockSystemDataConfig extends SystemDataConfig {
+
+    protected MockSystemDataConfig(SystemId sid) {
+      super(sid);
+    }
+
+  }
+
+  /**
+   * Mock aggregator used on tests.
+   */
+  protected static class MockAggregator implements Aggregator<SystemDataConfig> {
+
+    public SystemId system;
+
+    public String prefix;
+
+    public int callcount = 0;
+
+    public MockAggregator(String prefix, SystemId system) {
+      this.prefix = prefix;
+      this.system = system;
+    }
+
+    public int checkCallCount() {
+      int ret = callcount;
+      callcount = 0;
+      return ret;
+    }
+
+    @Override
+    public String[] getHeaderValues() {
+      return new String[] { prefix + "-h1", prefix + "-h2" };
+    }
+
+    @Override
+    public String[] getReportValues(SystemDataConfig config) {
+      callcount++;
+      Assert.assertNotNull("config can't be null, probably bad passing of config", config);
+      Assert.assertEquals(system, config.getSystem());
+      return new String[] { prefix + "-1", prefix + "-2" };
+    }
+  };
+
+}

Modified: labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java
===================================================================
--- labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java	2010-10-20 12:05:21 UTC (rev 35596)
+++ labs/jbosslabs/labs-3.0-build/integration/sbs/reports/trunk/src/test/java/org/jboss/community/sbs/plugin/reports/monthly/aggregator/AggregatorUtilsTest.java	2010-10-20 14:21:42 UTC (rev 35597)
@@ -118,4 +118,35 @@
 
   }
 
+  @Test
+  public void fillArray() {
+
+    String[] master = new String[5];
+    String[] values = new String[] { "a", "b" };
+
+    int endIndex = AggregatorUtils.fillArray(master, values, 0);
+    Assert.assertEquals(2, endIndex);
+    Assert.assertEquals("a", master[0]);
+    Assert.assertEquals("b", master[1]);
+    Assert.assertNull(master[2]);
+    Assert.assertNull(master[3]);
+    Assert.assertNull(master[4]);
+
+    endIndex = AggregatorUtils.fillArray(master, values, 3);
+    Assert.assertEquals(5, endIndex);
+    Assert.assertEquals("a", master[0]);
+    Assert.assertEquals("b", master[1]);
+    Assert.assertNull(master[2]);
+    Assert.assertEquals("a", master[3]);
+    Assert.assertEquals("b", master[4]);
+
+    try {
+      endIndex = AggregatorUtils.fillArray(master, values, 4);
+      Assert.fail("ArrayIndexOutOfBoundsException not thrown");
+    } catch (ArrayIndexOutOfBoundsException e) {
+
+    }
+
+  }
+
 }



More information about the jboss-svn-commits mailing list