/** * Accepts root element. * Goes down one level because root must not have elements. * * @param root of the tree */ public JRBandDataDataSource(BandData root) { this.root = root; currentIterator = root.getChildrenList().iterator(); visitedBands.put(root, currentIterator); currentBand = root; }
/** * Accepts root element. * Goes down one level because root must not have elements. * * @param root of the tree */ public JRBandDataDataSource(BandData root) { this.root = root; currentIterator = root.getChildrenList().iterator(); visitedBands.put(root, currentIterator); currentBand = root; }
@Override public String toString() { StringBuilder sbf = new StringBuilder(); sbf.append(name).append(":").append(data.toString()).append("\n"); for (BandData band : getChildrenList()) { for (int i = 0; i < level; i++) sbf.append("\t"); sbf.append(band.toString()); } return sbf.toString(); }
@Override public String toString() { StringBuilder sbf = new StringBuilder(); sbf.append(name).append(":").append(data.toString()).append("\n"); for (BandData band : getChildrenList()) { for (int i = 0; i < level; i++) sbf.append("\t"); sbf.append(band.toString()); } return sbf.toString(); }
public boolean visit(BandVisitor bandVisitor) { if (bandVisitor.visit(this)) { return true; } for (BandData child : getChildrenList()) { if (child.visit(bandVisitor)) { return true; } } return false; }
/** * Search for first level children band with specified name * and return new datasource with this band as root element. */ public JRBandDataDataSource subDataSource(String bandName) { if (containsVisitedBand(bandName)) return null; BandData newParentBand = createNewBand(bandName); currentBand = root; currentIterator = root.getChildrenList().iterator(); visitedBands.put(root, currentIterator); return new JRBandDataDataSource(newParentBand); }
public boolean visit(BandVisitor bandVisitor) { if (bandVisitor.visit(this)) { return true; } for (BandData child : getChildrenList()) { if (child.visit(bandVisitor)) { return true; } } return false; }
/** * Search for first level children band with specified name * and return new datasource with this band as root element. */ public JRBandDataDataSource subDataSource(String bandName) { if (containsVisitedBand(bandName)) return null; BandData newParentBand = createNewBand(bandName); currentBand = root; currentIterator = root.getChildrenList().iterator(); visitedBands.put(root, currentIterator); return new JRBandDataDataSource(newParentBand); }
protected BandData createNewBand(String bandName) { BandData newParentBand = new BandData(bandName); List<BandData> childrenList = root.getChildrenByName(bandName); root.getChildrenBands().remove(bandName); newParentBand.addChildren(childrenList); childrenList.forEach(childBand -> childBand.setParentBand(newParentBand)); visitedBands.put(newParentBand, newParentBand.getChildrenList().iterator()); return newParentBand; }
/** * Maintains visitedBands to continue bypass on the same * level after return from deeper level of hierarchy. * Creates iterator for each level. */ @Override public boolean next() throws JRException { List<BandData> children = currentBand.getChildrenList(); if (children != null && !children.isEmpty() && !visitedBands.containsKey(currentBand)) { currentIterator = children.iterator(); visitedBands.put(currentBand, currentIterator); } else if (currentIterator == null) { currentIterator = Collections.singletonList(currentBand).iterator(); } if (currentIterator.hasNext()) { currentBand = currentIterator.next(); if (readBands.contains(currentBand) || currentBand.getData().isEmpty()) return next(); return true; } else { BandData parentBand = currentBand.getParentBand(); currentBand = parentBand; currentIterator = visitedBands.get(parentBand); if (parentBand == null || parentBand.equals(root)) return false; return next(); } }
protected BandData createNewBand(String bandName) { BandData newParentBand = new BandData(bandName); List<BandData> childrenList = root.getChildrenByName(bandName); root.getChildrenBands().remove(bandName); newParentBand.addChildren(childrenList); childrenList.forEach(childBand -> childBand.setParentBand(newParentBand)); visitedBands.put(newParentBand, newParentBand.getChildrenList().iterator()); return newParentBand; }
protected void processDocument() { for (BandData childBand : rootBand.getChildrenList()) { checkThreadInterrupted(); writeBand(childBand); } updateFormulas(); copyPictures(); }
protected void processDocument() { for (BandData childBand : rootBand.getChildrenList()) { checkThreadInterrupted(); writeBand(childBand); } updateFormulas(); copyPictures(); }
public static void checkHeader(Collection<BandData> bandDataCollection, int expected, String... headerFields) { Assert.assertNotNull(bandDataCollection); Assert.assertEquals(1, bandDataCollection.size()); BandData bandData = bandDataCollection.iterator().next(); Assert.assertTrue(CollectionUtils.isNotEmpty(bandData.getChildrenList())); Assert.assertEquals(expected, bandData.getChildrenList().size()); bandData.getChildrenList().forEach(childData-> { Assert.assertNotNull(childData); Assert.assertNotNull(childData.getData()); Stream.of(headerFields).forEach(key-> Assert.assertTrue(childData.getData().containsKey(key))); }); }
@Test public void testSelectingEmptyBands() throws Exception { DefaultLoaderFactory loaderFactory = initLoaderFactory(); DataExtractorImpl dataExtractor = new DataExtractorImpl(loaderFactory) { { emptyMap = EMPTY_MAP; } }; dataExtractor.setPutEmptyRowIfNoDataSelected(true); Report report = createReport(); BandData rootBand = rootBand(); dataExtractor.extractData(report, new HashMap<>(), rootBand); System.out.println(rootBand); Assert.assertEquals(1, rootBand.getChildrenList().size()); BandData band1 = rootBand.getChildrenList().get(0); Assert.assertEquals(emptyMap, band1.getData()); Assert.assertEquals(1, band1.getChildrenList().size()); Assert.assertEquals(emptyMap, band1.getChildrenList().get(0).getData()); dataExtractor.setPutEmptyRowIfNoDataSelected(false); rootBand = rootBand(); dataExtractor.extractData(report, new HashMap<>(), rootBand); System.out.println(rootBand); Assert.assertEquals(0, rootBand.getChildrenList().size()); }
@Test public void returnImmutableMapShouldNotThrowException() throws Exception { DefaultLoaderFactory loaderFactory = initLoaderFactory(); DataExtractorImpl dataExtractor = new DataExtractorImpl(loaderFactory); Report report = createReportReturnImmutableMapAsQuery(); BandData rootBand = rootBand(); Map<String, Object> dummyParams = new HashMap<>(); dummyParams.put("param1", "val1"); dummyParams.put("param2", "val2"); dataExtractor.extractData(report, dummyParams, rootBand); Assert.assertEquals(1, rootBand.getChildrenList().size()); }
protected void writeHBand(BandData band) { Range templateRange = getBandRange(band); if (templateRange != null) { Worksheet resultSheet = result.getSheetByName(templateRange.getSheet()); List<Row> resultSheetRows = resultSheet.getSheetData().getRow(); Row firstRow = findNextRowForHBand(band, templateRange, resultSheetRows); firstRow = ensureNecessaryRowsCreated(templateRange, resultSheet, firstRow); List<Cell> resultCells = copyCells(band, templateRange, resultSheetRows, firstRow, resultSheet); updateRangeMappings(band, templateRange, resultCells); //render children if (resultCells != null && !resultCells.isEmpty()) { for (BandData child : band.getChildrenList()) { writeBand(child); } } } }
protected void writeHBand(BandData band) { Range templateRange = getBandRange(band); if (templateRange != null) { Worksheet resultSheet = result.getSheetByName(templateRange.getSheet()); List<Row> resultSheetRows = resultSheet.getSheetData().getRow(); Row firstRow = findNextRowForHBand(band, templateRange, resultSheetRows); firstRow = ensureNecessaryRowsCreated(templateRange, resultSheet, firstRow); List<Cell> resultCells = copyCells(band, templateRange, resultSheetRows, firstRow, resultSheet); updateRangeMappings(band, templateRange, resultCells); //render children if (resultCells != null && !resultCells.isEmpty()) { for (BandData child : band.getChildrenList()) { writeBand(child); } } } }
@Override public void renderDocument() { init(); validateTemplateContainsNamedRange(); hintProcessor.init(template, result); findVerticalDependencies(); result.clearWorkbook(); for (BandData childBand : rootBand.getChildrenList()) { checkThreadInterrupted(); writeBand(childBand); } updateOutlines(); updateMergeRegions(); updateCharts(); updateFormulas(); updatePivotTables(); updateConditionalFormatting(); updateHeaderAndFooter(); updateSheetNames(); hintProcessor.apply(); saveAndClose(); }
@Override public void renderDocument() { init(); validateTemplateContainsNamedRange(); hintProcessor.init(template, result); findVerticalDependencies(); result.clearWorkbook(); for (BandData childBand : rootBand.getChildrenList()) { checkThreadInterrupted(); writeBand(childBand); } updateOutlines(); updateMergeRegions(); updateCharts(); updateFormulas(); updatePivotTables(); updateConditionalFormatting(); updateHeaderAndFooter(); updateSheetNames(); hintProcessor.apply(); saveAndClose(); }