public void testReportExporting() {
    String siteId = null;
    Report r = null;
    ReportParams rp = null;
    List<String> totalsBy = null;

    siteId = FakeData.SITE_A_ID;
    ReportDef rd = new ReportDef();
    rd.setId(0);
    rd.setSiteId(siteId);
    rd.setCreatedBy(FakeData.USER_A_ID);
    rd.setModifiedBy(FakeData.USER_A_ID);
    rd.setTitle("Title 1");
    rp = new ReportParams(siteId);
    rp.setWhat(ReportManager.WHAT_RESOURCES);
    rp.setWhen(ReportManager.WHEN_ALL);
    rp.setWho(ReportManager.WHO_ALL);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    totalsBy.add(StatsManager.T_USER);
    rp.setHowTotalsBy(totalsBy);
    rp.setHowSort(false);
    rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
    rd.setReportParams(rp);
    Report report = M_rm.getReport(rd, false);
    assertNotNull(report);

    // CSV
    String csv = M_rm.getReportAsCsv(report);
    assertNotNull(csv);
    assertTrue(csv.length() > 0);

    // EXCEL
    byte[] excel = M_rm.getReportAsExcel(report, "sheetname");
    assertNotNull(excel);
    assertTrue(excel.length > 0);
    // To verify locally...
    //		File file = new File("d:/sitestats-test.xls");
    //		if(file.exists()) {file.delete();}
    //		FileOutputStream out = null;
    //		try{
    //			out = new FileOutputStream(file);
    //			out.write(excel);
    //			out.flush();
    //		}catch(FileNotFoundException e){
    //			e.printStackTrace();
    //		}catch(IOException e){
    //			e.printStackTrace();
    //		}finally{
    //			if(out != null) {
    //				try{ out.close(); }catch(IOException e){ /* IGNORE */}
    //			}
    //		}

    // PDF: currently disabled due to classloading trouble
    //		byte[] pdf = M_rm.getReportAsPDF(report);
    //		assertNotNull(pdf);
    //		assertTrue(pdf.length > 0);
  }
  public void testReportsFromOverviewPage() {
    M_sum.collectEvents(getSampleData2());

    // MiniStatsVisits & MiniStatUniqueVisits
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      rp.setWhat(ReportManager.WHAT_VISITS_TOTALS);
      rp.setWhen(ReportManager.WHEN_ALL);
      rp.setWho(ReportManager.WHO_ALL);
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_DATE);
      totalsBy.add(StatsManager.T_VISITS);
      totalsBy.add(StatsManager.T_UNIQUEVISITS);
      rp.setHowTotalsBy(totalsBy);
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_DATE);
      rp.setHowSortAscending(false);
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_BOTH);
      rp.setHowChartType(StatsManager.CHARTTYPE_TIMESERIESBAR);
      rp.setHowChartSource(StatsManager.T_DATE);
      rp.setHowChartSeriesSource(StatsManager.T_NONE);
      rp.setHowChartSeriesPeriod(StatsManager.CHARTTIMESERIES_DAY);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(5, rep.getReportData().size());
    }

    // MiniStatEnrolledUsersWithVisits
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      rp.setWhat(ReportManager.WHAT_VISITS);
      rp.setWhen(ReportManager.WHEN_ALL);
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_USER);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(false);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(2, rep.getReportData().size());
    }

    // MiniStatEnrolledUsersWithoutVisits
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      rp.setWhat(ReportManager.WHAT_VISITS);
      rp.setWhen(ReportManager.WHEN_ALL);
      rp.setWho(ReportManager.WHO_NONE);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_USER);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(false);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(0, rep.getReportData().size());
    }

    // MiniStatActivityEvents
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      // what
      rp.setWhat(ReportManager.WHAT_EVENTS);
      rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYEVENTS);
      rp.setWhatEventIds(new ArrayList<String>(M_ers.getEventIds()));
      // when
      rp.setWhen(ReportManager.WHEN_ALL);
      // who
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_EVENT);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_EVENT);
      rp.setHowSortAscending(true);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(6, rep.getReportData().size());
    }

    // MiniStatMostActiveUser
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      // what
      rp.setWhat(ReportManager.WHAT_EVENTS);
      rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYEVENTS);
      rp.setWhatEventIds(new ArrayList<String>(M_ers.getEventIds()));
      // when
      rp.setWhen(ReportManager.WHEN_ALL);
      // who
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_USER);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_TOTAL);
      rp.setHowSortAscending(false);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(3, rep.getReportData().size());
    }

    // MiniStatFiles (files with new event)
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      // what
      rp.setWhat(ReportManager.WHAT_RESOURCES);
      rp.setWhatLimitedAction(true);
      rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_NEW);
      rp.setWhatLimitedResourceIds(true);
      rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/"));
      // when
      rp.setWhen(ReportManager.WHEN_ALL);
      // who
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_RESOURCE);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_RESOURCE);
      rp.setHowSortAscending(true);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(2, rep.getReportData().size());
    }

    // MiniStatOpenedFiles (files with read event)
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      // what
      rp.setWhat(ReportManager.WHAT_RESOURCES);
      rp.setWhatLimitedAction(true);
      rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_READ);
      rp.setWhatLimitedResourceIds(true);
      rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/"));
      // when
      rp.setWhen(ReportManager.WHEN_ALL);
      // who
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_RESOURCE);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_TOTAL);
      rp.setHowSortAscending(false);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(2, rep.getReportData().size());
    }

    // MiniStatUserThatOpenedMoreFiles
    {
      ReportDef r = new ReportDef();
      r.setId(0);
      r.setSiteId(FakeData.SITE_A_ID);
      ReportParams rp = new ReportParams(FakeData.SITE_A_ID);
      // what
      rp.setWhat(ReportManager.WHAT_RESOURCES);
      rp.setWhatLimitedAction(true);
      rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_READ);
      rp.setWhatLimitedResourceIds(true);
      rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/"));
      // when
      rp.setWhen(ReportManager.WHEN_ALL);
      // who
      rp.setWho(ReportManager.WHO_ALL);
      // grouping
      List<String> totalsBy = new ArrayList<String>();
      totalsBy.add(StatsManager.T_USER);
      rp.setHowTotalsBy(totalsBy);
      // sorting
      rp.setHowSort(true);
      rp.setHowSortBy(StatsManager.T_TOTAL);
      rp.setHowSortAscending(false);
      // chart
      rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
      r.setReportParams(rp);
      Report rep = M_rm.getReport(r, false);
      assertNotNull(rep);
      assertEquals(2, rep.getReportData().size());
    }
  }
  public void testGetMoreReports() {
    M_sum.collectEvents(getSampleData());
    String siteId = null;
    Report r = null;
    ReportDef rd = null;
    ReportParams rp = null;
    List<String> totalsBy = null;

    // resources
    siteId = FakeData.SITE_A_ID;
    rd = new ReportDef();
    rd.setId(0);
    rd.setSiteId(siteId);
    rp = new ReportParams(siteId);
    rp.setWhat(ReportManager.WHAT_RESOURCES);
    rp.setWhen(ReportManager.WHEN_ALL);
    rp.setWho(ReportManager.WHO_ALL);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    totalsBy.add(StatsManager.T_USER);
    rp.setHowTotalsBy(totalsBy);
    rp.setHowSort(false);
    rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
    rd.setReportParams(rp);
    r = M_rm.getReport(rd, true, null, false);
    checkCollumns(rd.getReportParams());
    assertEquals(1, r.getReportData().size());

    // visits
    rp.setWhat(ReportManager.WHAT_VISITS);
    r = M_rm.getReport(rd, true, null, true);
    checkCollumns(rd.getReportParams());
    assertEquals(2, r.getReportData().size());

    // visits totals
    rp.setWhat(ReportManager.WHAT_VISITS_TOTALS);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    rp.setHowTotalsBy(totalsBy);
    rd.setId(1);
    r = M_rm.getReport(rd, true, new PagingPosition(0, 5), true);
    assertEquals(1, r.getReportData().size());
    assertEquals(9, ((SiteVisits) (r.getReportData().get(0))).getTotalVisits());
    assertEquals(7, ((SiteVisits) (r.getReportData().get(0))).getTotalUnique());

    //		// activity totals
    //		rp.setWhat(ReportManager.WHAT_ACTIVITY_TOTALS);
    //		rp.setWhatEventIds(FakeData.EVENTIDS);
    //		rp.setWhen(ReportManager.WHEN_LAST365DAYS);
    //		r = M_rm.getReport(rd, false, null, false);
    //		System.out.println(r.getReportData());
    //		System.out.println("ReportParams: "+ rp);
    //		System.out.println("ReportData: "+ r.getReportData());
    //		assertEquals(1, r.getReportData().size());
    //		assertEquals(1, r.getReportData().get(0).getCount());

    // presences I
    rp.setWhat(ReportManager.WHAT_PRESENCES);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    totalsBy.add(StatsManager.T_USER);
    totalsBy.add(StatsManager.T_DATE);
    rp.setHowTotalsBy(totalsBy);
    rp.setHowSort(false);
    r = M_rm.getReport(rd, true, null, true);
    checkCollumns(rd.getReportParams());
    assertEquals(7, r.getReportData().size());

    // presences II
    rp.setWhat(ReportManager.WHAT_PRESENCES);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    totalsBy.add(StatsManager.T_DATE);
    rp.setHowTotalsBy(totalsBy);
    rp.setHowSort(false);
    r = M_rm.getReport(rd, true, null, true);
    checkCollumns(rd.getReportParams());
    assertEquals(5, r.getReportData().size());

    // presences III
    rp.setWhat(ReportManager.WHAT_PRESENCES);
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_SITE);
    rp.setHowTotalsBy(totalsBy);
    rp.setHowSort(false);
    r = M_rm.getReport(rd, true, null, true);
    checkCollumns(rd.getReportParams());
    assertEquals(1, r.getReportData().size());
  }
  // ---- TESTS ----
  public void testGetReport() {
    M_sum.collectEvents(getSampleData());
    String siteId = null;
    Report r = null;
    ReportDef rd = null;
    ReportParams rp = null;
    List<String> totalsBy = null;

    // #1 getReport(ReportDef reportDef, boolean restrictToToolsInSite)
    siteId = FakeData.SITE_B_ID;
    rd = new ReportDef();
    rd.setId(0);
    rd.setSiteId(siteId);
    rp = new ReportParams(siteId);
    rp.setWhat(ReportManager.WHAT_EVENTS);
    rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYTOOL);
    rp.setWhatToolIds(Arrays.asList(ReportManager.WHAT_EVENTS_ALLTOOLS));
    rp.setWhen(ReportManager.WHEN_ALL);
    rp.setWho(ReportManager.WHO_ALL);
    // grouping
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_TOOL);
    totalsBy.add(StatsManager.T_DATE);
    rp.setHowTotalsBy(totalsBy);
    // sorting
    rp.setHowSort(true);
    rp.setHowSortBy(StatsManager.T_TOOL);
    rp.setHowSortAscending(false);
    // chart
    rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_BOTH);
    rp.setHowChartType(StatsManager.CHARTTYPE_TIMESERIESBAR);
    rp.setHowChartSource(StatsManager.T_DATE);
    rp.setHowChartSeriesSource(StatsManager.T_NONE);
    rp.setHowChartSeriesPeriod(StatsManager.CHARTTIMESERIES_DAY);
    rd.setReportParams(rp);
    r = M_rm.getReport(rd, true);
    checkCollumns(rd.getReportParams());
    assertEquals(1, r.getReportData().size());
    r = M_rm.getReport(rd, false);
    checkCollumns(rd.getReportParams());
    assertEquals(2, r.getReportData().size());
    assertNotNull(M_rm.getReportFormattedParams());

    // #2 getReportRowCount(ReportDef reportDef, boolean restrictToToolsInSite)
    assertEquals(1, M_rm.getReportRowCount(rd, true));
    assertEquals(2, M_rm.getReportRowCount(rd, false));

    siteId = FakeData.SITE_B_ID;
    rd = new ReportDef();
    rd.setId(0);
    rd.setSiteId(siteId);
    rp = new ReportParams(siteId);
    rp.setWhat(ReportManager.WHAT_RESOURCES);
    rp.setWhen(ReportManager.WHEN_ALL);
    rp.setWho(ReportManager.WHO_ALL);
    // grouping
    totalsBy = new ArrayList<String>();
    totalsBy.add(StatsManager.T_RESOURCE);
    totalsBy.add(StatsManager.T_DATE);
    rp.setHowTotalsBy(totalsBy);
    // sorting
    rp.setHowSort(true);
    rp.setHowSortBy(StatsManager.T_TOOL);
    rp.setHowSortAscending(false);
    // chart
    rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE);
    rd.setReportParams(rp);
    assertEquals(1, M_rm.getReportRowCount(rd, true));
    assertEquals(1, M_rm.getReportRowCount(rd, false));
  }