protected BandData loadBandData(Report report, Map<String, Object> handledParams) { BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>(handledParams)); rootBand.addReportFieldFormats(report.getReportFieldFormats()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); dataExtractor.extractData(report, handledParams, rootBand); return rootBand; }
protected BandData loadBandData(Report report, Map<String, Object> handledParams) { BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>(handledParams)); rootBand.addReportFieldFormats(report.getReportFieldFormats()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); dataExtractor.extractData(report, handledParams, rootBand); return rootBand; }
private BandData rootBand() { BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<String, Object>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<String>()); return rootBand; }
root.addChild(footer); root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Band1");
@Test public void testHtmlFormatter() throws Exception { BandData root = new BandData("Root", null, BandOrientation.HORIZONTAL); BandData userBand = new BandData("User", root, BandOrientation.HORIZONTAL); userBand.addData("active", true); userBand.addData("login", "admin"); root.addChild(userBand); root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("User"); FileOutputStream outputStream = new FileOutputStream("./result/integration/html-groovy-test-result.html"); ReportFormatter formatter = new DefaultFormatterFactory().createFormatter(new FormatterFactoryInput("html", root, new ReportTemplateImpl("", "./modules/core/test/integration/html-groovy-test-template.html", "./modules/core/test/integration/html-groovy-test-template.html", ReportOutputType.html, true), outputStream)); formatter.renderDocument(); IOUtils.closeQuietly(outputStream); File sample = new File("./modules/core/test/integration/html-groovy-test-template-result.html"); File result = new File("./result/integration/html-groovy-test-result.html"); boolean isTwoEqual = FileUtils.contentEqualsIgnoreEOL(sample, result, null); Assert.assertTrue("Files are not equal", isTwoEqual); } }
@Test public void stressTest() throws IOException, URISyntaxException { int queries = 100; int recordsPerQuery = 10000; Report report = createReport(queries, recordsPerQuery); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.addReportFieldFormats(report.getReportFieldFormats()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); long start = System.currentTimeMillis(); try { new DataExtractorImpl(new DefaultLoaderFactory().setGroovyDataLoader( new GroovyDataLoader(new DefaultScriptingImpl()))).extractData(report, new HashMap<>(), rootBand); } finally { System.out.println( String.format("Report processing stress test (%d queries and %d records per query) took %d ms", queries, recordsPerQuery, System.currentTimeMillis() - start) ); } }
@Test public void testSqlExtractionForCrosstabBand() throws IOException, URISyntaxException { ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("extraction/fixture/cross_sql_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); Multimap<String, BandData> reportBandMap = HashMultimap.create(); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, new HashMap<>())); Assert.assertNotNull(data); data.forEach(b-> { Assert.assertNotNull(b); Assert.assertTrue(StringUtils.isNotEmpty(b.getName())); reportBandMap.put(b.getName(), b); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } checkHeader(reportBandMap.get("crosstab_header"), 12, "MONTH_NAME", "MONTH_ID"); checkMasterData(reportBandMap.get("crosstab_master_data"), 3, 12, "USER_ID", "LOGIN", "HOURS"); }
@Test public void testGroovyExtractionForBand() throws IOException, URISyntaxException { ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("extraction/fixture/cross_groovy_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); Multimap<String, BandData> reportBandMap = HashMultimap.create(); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, new HashMap<>())); Assert.assertNotNull(data); data.forEach(b-> { Assert.assertNotNull(b); Assert.assertTrue(StringUtils.isNotEmpty(b.getName())); reportBandMap.put(b.getName(), b); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } checkHeader(reportBandMap.get("crosstab_header"), 2, "name", "id"); checkMasterData(reportBandMap.get("crosstab_master_data"), 2, 2, "id", "name", "crosstab_dynamic_header_id", "crosstab_master_data_id", "value"); }
@Test public void testJsonExtractionForBand() throws IOException, URISyntaxException { ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("extraction/fixture/default_json_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); Multimap<String, BandData> reportBandMap = HashMultimap.create(); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, ExtractionUtils.getParams(definition))); Assert.assertNotNull(data); data.forEach(b-> { Assert.assertNotNull(b); Assert.assertTrue(StringUtils.isNotEmpty(b.getName())); reportBandMap.put(b.getName(), b); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } checkHeader(reportBandMap.get("header"), 2, "name", "id"); checkMasterData(reportBandMap.get("master_data"), 2, 2, "id", "name", "value", "user_id"); }
@Test public void testSqlExtractionForCrosstabBand() throws IOException, URISyntaxException { ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("extraction/fixture/default_sql_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); Multimap<String, BandData> reportBandMap = HashMultimap.create(); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, new HashMap<>())); Assert.assertNotNull(data); data.forEach(b-> { Assert.assertNotNull(b); Assert.assertTrue(StringUtils.isNotEmpty(b.getName())); reportBandMap.put(b.getName(), b); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } checkHeader(reportBandMap.get("header"), 12, "MONTH_NAME", "MONTH_ID"); checkMasterData(reportBandMap.get("master_data"), 3, 12, "USER_ID", "LOGIN", "HOURS"); }
@Test public void testGroovyExtractionForBand() throws IOException, URISyntaxException { ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("extraction/fixture/default_groovy_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); Multimap<String, BandData> reportBandMap = HashMultimap.create(); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, new HashMap<>())); Assert.assertNotNull(data); data.forEach(b-> { Assert.assertNotNull(b); Assert.assertTrue(StringUtils.isNotEmpty(b.getName())); reportBandMap.put(b.getName(), b); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } checkHeader(reportBandMap.get("header"), 2, "name", "id"); checkMasterData(reportBandMap.get("master_data"), 2, 2, "id", "name", "value", "user_id"); }
@Test public void testXlsxCharts() throws Exception { BandData root = new BandData("Root", null, BandOrientation.HORIZONTAL); root.addChild(new BandData("Header", root, BandOrientation.HORIZONTAL)); Random random = new Random(); for (int i = 1; i <= 10; i++) { BandData band = new BandData("Band", root, BandOrientation.HORIZONTAL); band.addData("i", i); double value1 = 15 + i + Math.abs(random.nextDouble()) * 30; band.addData("value1", value1); double value2 = 20 + i + Math.abs(random.nextDouble()) * 60; band.addData("value2", value2); double value3 = 25 + i + Math.abs(random.nextDouble()) * 90; band.addData("value3", value3); band.addData("value4", (value1 + value2 + value3) / 3); root.addChild(band); } root.addChild(new BandData("Charts", root, BandOrientation.HORIZONTAL)); root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Header"); root.getFirstLevelBandDefinitionNames().add("Band"); root.getFirstLevelBandDefinitionNames().add("Charts"); FileOutputStream outputStream = new FileOutputStream("./result/smoke/charts.xlsx"); DefaultFormatterFactory defaultFormatterFactory = new DefaultFormatterFactory(); ReportFormatter formatter = defaultFormatterFactory.createFormatter(new FormatterFactoryInput("xlsx", root, new ReportTemplateImpl("", "./modules/core/test/smoketest/charts.xlsx", "./modules/core/test/smoketest/charts.xlsx", ReportOutputType.xlsx), outputStream)); formatter.renderDocument(); IOUtils.closeQuietly(outputStream); }
@Test public void testXlsxRowBreaks() throws Exception { BandData root = new BandData("Root", null, BandOrientation.HORIZONTAL); root.addChild(new BandData("Header", root, BandOrientation.HORIZONTAL)); Random random = new Random(); for (int i = 1; i <= 100; i++) { BandData band = new BandData("Band", root, BandOrientation.HORIZONTAL); band.addData("i", i); double value1 = 15 + i + Math.abs(random.nextDouble()) * 30; band.addData("value1", value1); double value2 = 20 + i + Math.abs(random.nextDouble()) * 60; band.addData("value2", value2); double value3 = 25 + i + Math.abs(random.nextDouble()) * 90; band.addData("value3", value3); band.addData("value4", (value1 + value2 + value3) / 3); root.addChild(band); if (i % 10 == 0) { band.addChild(new BandData("Footer", band)); } } root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Header"); root.getFirstLevelBandDefinitionNames().add("Band"); FileOutputStream outputStream = new FileOutputStream("./result/smoke/row_breaks.xlsx"); DefaultFormatterFactory defaultFormatterFactory = new DefaultFormatterFactory(); ReportFormatter formatter = defaultFormatterFactory.createFormatter(new FormatterFactoryInput("xlsx", root, new ReportTemplateImpl("", "./modules/core/test/smoketest/row_breaks.xlsx", "./modules/core/test/smoketest/row_breaks.xlsx", ReportOutputType.xlsx), outputStream)); formatter.renderDocument(); IOUtils.closeQuietly(outputStream); }
@Test public void testDataLinkage() { Report report = createReport(); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.addReportFieldFormats(report.getReportFieldFormats()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); new DataExtractorImpl(new DefaultLoaderFactory().setGroovyDataLoader( new GroovyDataLoader(new DefaultScriptingImpl()))).extractData(report, new HashMap<>(), rootBand); List<BandData> bands = rootBand.getChildrenByName("Band1"); for (BandData band : bands) { if (((Integer)1).equals(band.getParameterValue("link"))) { Assert.assertEquals(1, band.getParameterValue("col1")); Assert.assertEquals(10, band.getParameterValue("col2")); Assert.assertEquals(100, band.getParameterValue("col3")); } else if (((Integer)2).equals(band.getParameterValue("link"))) { Assert.assertEquals(2, band.getParameterValue("col1")); Assert.assertEquals(20, band.getParameterValue("col2")); Assert.assertEquals(200, band.getParameterValue("col3")); } } }
private BandData createRootBandForAggregation() { BandData root = new BandData("Root", null, BandOrientation.HORIZONTAL); HashMap<String, Object> rootData = new HashMap<String, Object>(); root.setData(rootData); BandData band1_1 = band(1, 2, BandOrientation.HORIZONTAL, null, "Band1"); BandData band2_1 = band(11, 22, BandOrientation.HORIZONTAL, null, "Band2"); BandData band2_2 = band(12, 23, BandOrientation.HORIZONTAL, null, "Band2"); band1_1.addChildren(Arrays.asList(band2_1, band2_2)); BandData band1_2 = band(2, 3, BandOrientation.HORIZONTAL, null, "Band1"); BandData band2_3 = band(13, 24, BandOrientation.HORIZONTAL, null, "Band2"); BandData band3_1 = band(111, null, BandOrientation.VERTICAL, band2_3, "Band3"); BandData band3_2 = band(222, null, BandOrientation.VERTICAL, band2_3, "Band3"); band1_2.addChildren(Collections.singletonList(band2_3)); band2_3.addChildren(Arrays.asList(band3_1, band3_2)); BandData band1_3 = band(3, 4, BandOrientation.HORIZONTAL, null, "Band1"); root.addChild(band1_1); root.addChild(band1_2); root.addChild(band1_3); root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Band1"); return root; }
rootBand.setFirstLevelBandDefinitionNames(new HashSet<>());
root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Band1"); root.getFirstLevelBandDefinitionNames().add("Band2");
@Test public void testXlsxCrosstabFeature() throws Exception { FileOutputStream outputStream = new FileOutputStream("./result/integration/result-crosstab-feature.xlsx"); ReportBand band = YmlDataUtil.bandFrom(FileLoader.load("integration/fixture/cross_sql_report_band.yml")); BandData rootBand = new BandData(BandData.ROOT_BAND_NAME); rootBand.setData(new HashMap<>()); rootBand.setFirstLevelBandDefinitionNames(new HashSet<>()); for (ReportBand definition : band.getChildren()) { List<BandData> data = controllerFactory.controllerBy(definition.getBandOrientation()) .extract(contextFactory.context(definition, rootBand, new HashMap<>())); assertNotNull(data); data.forEach(b-> { assertNotNull(b); assertTrue(StringUtils.isNotEmpty(b.getName())); }); rootBand.addChildren(data); rootBand.getFirstLevelBandDefinitionNames().add(definition.getName()); } DefaultFormatterFactory defaultFormatterFactory = new DefaultFormatterFactory(); ReportFormatter formatter = defaultFormatterFactory.createFormatter( new FormatterFactoryInput("xlsx", rootBand, new ReportTemplateImpl("", "./modules/core/test/integration/test-crosstab-feature.xlsx", "./modules/core/test/integration/test-crosstab-feature.xlsx", ReportOutputType.xlsx), outputStream)); formatter.renderDocument(); IOUtils.closeQuietly(outputStream); compareFiles("./result/integration/result-crosstab-feature.xlsx", "./modules/core/test/integration/etalon-crosstab-feature.xlsx"); }
root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Header"); root.getFirstLevelBandDefinitionNames().add("DateHeader");
root.addChild(band4_2); root.setFirstLevelBandDefinitionNames(new HashSet<String>()); root.getFirstLevelBandDefinitionNames().add("Band1"); root.getFirstLevelBandDefinitionNames().add("Band2");