net.sf.dynamicreports.test.jasper.tableofcontents.TableOfContents2Test.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.dynamicreports.test.jasper.tableofcontents.TableOfContents2Test.java

Source

/**
 * DynamicReports - Free Java reporting library for creating reports dynamically
 *
 * Copyright (C) 2010 - 2014 Ricardo Mariaca
 * http://www.dynamicreports.org
 *
 * This file is part of DynamicReports.
 *
 * DynamicReports is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * DynamicReports is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with DynamicReports. If not, see <http://www.gnu.org/licenses/>.
 */

package net.sf.dynamicreports.test.jasper.tableofcontents;

import static net.sf.dynamicreports.report.builder.DynamicReports.*;
import junit.framework.Assert;
import net.sf.dynamicreports.jasper.builder.JasperReportBuilder;
import net.sf.dynamicreports.report.builder.column.TextColumnBuilder;
import net.sf.dynamicreports.report.builder.component.TextFieldBuilder;
import net.sf.dynamicreports.report.datasource.DRDataSource;
import net.sf.dynamicreports.report.definition.expression.DRIExpression;
import net.sf.dynamicreports.test.jasper.AbstractJasperValueTest;
import net.sf.jasperreports.engine.DefaultJasperReportsContext;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRPrintText;
import net.sf.jasperreports.engine.util.JRStyledTextUtil;

import org.apache.commons.lang3.StringUtils;

/**
 * @author Ricardo Mariaca (r.mariaca@dynamicreports.org)
 */
public class TableOfContents2Test extends AbstractJasperValueTest {
    private TextColumnBuilder<String> column1;
    private DRIExpression<String> labelExpression1;
    private DRIExpression<String> labelExpression2;
    private DRIExpression<String> labelExpression3;
    private DRIExpression<String> labelExpression4;
    private DRIExpression<String> labelExpression5;
    private DRIExpression<String> labelExpression6;

    @Override
    protected void configureReport(JasperReportBuilder rb) {
        labelExpression1 = exp.text("title");
        labelExpression2 = exp.text("summary");
        TextFieldBuilder<String> textField = cmp.text("text2");
        labelExpression3 = textField.getComponent().getValueExpression();
        TextFieldBuilder<String> textField3 = cmp.text("text3");
        labelExpression6 = textField3.getComponent().getValueExpression();

        rb.tableOfContents()
                .title(cmp.text("text")
                        .setTableOfContentsHeading(tableOfContentsHeading().setLabel(labelExpression1)))
                .columns(column1 = col.column("Column1", "field1", type.stringType())).summary(
                        cmp.text("text")
                                .setTableOfContentsHeading(tableOfContentsHeading().setLabel(labelExpression2)),
                        textField.setTableOfContentsHeading(tableOfContentsHeading()),
                        cmp.line().setTableOfContentsHeading(tableOfContentsHeading()),
                        cmp.subreport(createSubreport1()),
                        textField3.setTableOfContentsHeading(tableOfContentsHeading())
                                .setAnchorName("Custom anchor text"));
    }

    private JasperReportBuilder createSubreport1() {
        TextFieldBuilder<String> textField = cmp.text("text3");
        labelExpression4 = textField.getComponent().getValueExpression();

        JasperReportBuilder report = report();
        report.title(textField.setTableOfContentsHeading(tableOfContentsHeading()));
        report.title(cmp.subreport(createSubreport2()));
        return report;
    }

    private JasperReportBuilder createSubreport2() {
        TextFieldBuilder<String> textField = cmp.text("text4");
        labelExpression5 = textField.getComponent().getValueExpression();

        JasperReportBuilder report = report();
        report.title(textField.setTableOfContentsHeading(tableOfContentsHeading()));
        return report;
    }

    @Override
    public void test() {
        super.test();

        numberOfPagesTest(2);

        elementValueTest("title.textField1", "Table of contents");

        elementCountTest("detail.textField1", 7);

        String anchorName = labelExpression1.getName() + "_0";
        elementValueTest("detail.textField1", 0, "title");
        JRPrintText text = (JRPrintText) getElementAt("detail.textField1", 0);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        JRPrintText dots = (JRPrintText) getElementAt("detail.textField2", 0);
        String value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance())
                .getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        JRPrintText pageIndex = (JRPrintText) getElementAt("detail.textField3", 0);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        anchorName = labelExpression2.getName() + "_8";
        elementValueTest("detail.textField1", 1, "summary");
        text = (JRPrintText) getElementAt("detail.textField1", 1);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        dots = (JRPrintText) getElementAt("detail.textField2", 1);
        value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance()).getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        pageIndex = (JRPrintText) getElementAt("detail.textField3", 1);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        anchorName = labelExpression3.getName() + "_8";
        elementValueTest("detail.textField1", 2, "text2");
        text = (JRPrintText) getElementAt("detail.textField1", 2);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        dots = (JRPrintText) getElementAt("detail.textField2", 2);
        value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance()).getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        pageIndex = (JRPrintText) getElementAt("detail.textField3", 2);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        anchorName = labelExpression4.getName() + "_0";
        elementValueTest("detail.textField1", 4, "text3");
        text = (JRPrintText) getElementAt("detail.textField1", 4);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        dots = (JRPrintText) getElementAt("detail.textField2", 4);
        value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance()).getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        pageIndex = (JRPrintText) getElementAt("detail.textField3", 4);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        anchorName = labelExpression5.getName() + "_0";
        elementValueTest("detail.textField1", 5, "text4");
        text = (JRPrintText) getElementAt("detail.textField1", 5);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        dots = (JRPrintText) getElementAt("detail.textField2", 5);
        value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance()).getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        pageIndex = (JRPrintText) getElementAt("detail.textField3", 5);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        anchorName = "Custom anchor text";
        elementValueTest("detail.textField1", 6, "text3");
        text = (JRPrintText) getElementAt("detail.textField1", 6);
        Assert.assertEquals("text anchor", anchorName, text.getHyperlinkAnchor());
        dots = (JRPrintText) getElementAt("detail.textField2", 6);
        value = JRStyledTextUtil.getInstance(DefaultJasperReportsContext.getInstance()).getTruncatedText(dots);
        Assert.assertTrue("dots", StringUtils.containsOnly(value, "."));
        Assert.assertEquals("dots anchor", anchorName, dots.getHyperlinkAnchor());
        pageIndex = (JRPrintText) getElementAt("detail.textField3", 6);
        Assert.assertEquals("pageIndex anchor", anchorName, pageIndex.getHyperlinkAnchor());

        elementValueTest("detail.textField3", "1", "1", "1", "1", "1", "1", "1");

        String name1 = labelExpression1.getName() + ".tocReference";
        String name2 = "title.textField1";
        elementCountTest(name1, 1);
        anchorName = labelExpression1.getName() + "_0";
        elementValueTest(name1, 0, "");
        JRPrintText reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 1, "text");
        reference = (JRPrintText) getElementAt(name2, 1);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        name1 = labelExpression2.getName() + ".tocReference";
        name2 = "summary.textField1";
        elementCountTest(name1, 1);
        anchorName = labelExpression2.getName() + "_8";
        elementValueTest(name1, 0, "");
        reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 0, "text");
        reference = (JRPrintText) getElementAt(name2, 0);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        name1 = labelExpression3.getName() + ".tocReference";
        name2 = "summary.textField2";
        elementCountTest(name1, 1);
        anchorName = labelExpression3.getName() + "_8";
        elementValueTest(name1, 0, "");
        reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 0, "text2");
        reference = (JRPrintText) getElementAt(name2, 0);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        name1 = labelExpression4.getName() + ".tocReference";
        name2 = "title.textField1";
        elementCountTest(name1, 1);
        anchorName = labelExpression4.getName() + "_0";
        elementValueTest(name1, 0, "");
        reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 2, "text3");
        reference = (JRPrintText) getElementAt(name2, 2);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        name1 = labelExpression5.getName() + ".tocReference";
        name2 = "title.textField1";
        elementCountTest(name1, 1);
        anchorName = labelExpression5.getName() + "_0";
        elementValueTest(name1, 0, "");
        reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 3, "text4");
        reference = (JRPrintText) getElementAt(name2, 3);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        name1 = labelExpression6.getName() + ".tocReference";
        name2 = "summary.textField3";
        elementCountTest(name1, 1);
        anchorName = "Custom anchor text";
        elementValueTest(name1, 0, "");
        reference = (JRPrintText) getElementAt(name1, 0);
        Assert.assertEquals("reference anchorName " + name1, anchorName, reference.getAnchorName());
        elementValueTest(name2, 0, "text3");
        reference = (JRPrintText) getElementAt(name2, 0);
        Assert.assertEquals("reference anchorName " + name2, anchorName, reference.getAnchorName());

        columnTitleCountTest(column1, 1);
        columnTitleValueTest(column1, "Column1");
        columnDetailCountTest(column1, 8);
        columnDetailValueTest(column1, 7, "text");
    }

    @Override
    protected JRDataSource createDataSource() {
        DRDataSource dataSource = new DRDataSource("field1");
        for (int i = 0; i < 8; i++) {
            dataSource.add("text");
        }
        return dataSource;
    }
}