package de.cismet.cismap.commons.gui.attributetable; import ar.com.fdvs.dj.core.DynamicJasperHelper; import ar.com.fdvs.dj.core.layout.ClassicLayoutManager; import ar.com.fdvs.dj.domain.DynamicReport; import java.util.HashMap; import java.util.Map; import javax.swing.JTable; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRStyledText; import net.sf.jasperreports.swing.JRViewer; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * * @author pd */ public class AttributeTableReportBuilderTest { public AttributeTableReportBuilderTest() { } @BeforeClass public static void setUpClass() { System.setProperty(JRStyledText.PROPERTY_AWT_IGNORE_MISSING_FONT, "true"); System.setProperty("net.sf.jasperreports.default.font.name", "Lucida Sans"); System.setProperty("net.sf.jasperreports.default.pdf.font.name", "Lucida Sans"); } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Test public void test010AttributeTableReportBuilder() throws Exception { final JRDataSource tableDataSource = new AttributeTableReportBuilderTest.TableDataSource(new AttributeTableReportBuilderTest.CustomTableModel()); final Map<String, Object> generatedParams = new HashMap<String, Object>(); generatedParams.put("table_data", tableDataSource); final DynamicReport dynamicReport = new AttributeTableReportBuilder().buildReport( "Titel", new JTable(new AttributeTableReportBuilderTest.CustomTableModel())); assertNotNull(dynamicReport); final JasperReport jasperReport = DynamicJasperHelper.generateJasperReport(dynamicReport, new ClassicLayoutManager(), generatedParams); assertNotNull(jasperReport); for (final String key : generatedParams.keySet()) { final Object o = generatedParams.get(key); if (o instanceof JasperReport) { final JasperReport jr = (JasperReport) o; String reportFile = System.getProperty("user.dir") + "/target/reports/" + key + ".jrxml"; DynamicJasperHelper.generateJRXML( jr, "UTF-8", reportFile); final JasperReport restoredReport = JasperCompileManager.compileReport(reportFile); assertNotNull(restoredReport); assertEquals(jr.getColumnCount(), restoredReport.getColumnCount()); assertEquals(jr.getBottomMargin(), restoredReport.getBottomMargin()); assertEquals(jr.getName(), restoredReport.getName()); assertEquals(jr.getLanguage(), restoredReport.getLanguage()); assertEquals(jr.getMainDataset().getName(), restoredReport.getMainDataset().getName()); } } final String reportFile = System.getProperty("user.dir") + "/target/reports/table_report.jrxml"; DynamicJasperHelper.generateJRXML( jasperReport, "UTF-8", reportFile); final JasperReport restoredReport = JasperCompileManager.compileReport(reportFile); assertNotNull(restoredReport); assertEquals(jasperReport.getColumnCount(), restoredReport.getColumnCount()); assertEquals(jasperReport.getBottomMargin(), restoredReport.getBottomMargin()); assertEquals(jasperReport.getName(), restoredReport.getName()); assertEquals(jasperReport.getLanguage(), restoredReport.getLanguage()); assertEquals(jasperReport.getMainDataset().getName(), restoredReport.getMainDataset().getName()); final JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, generatedParams, tableDataSource); assertNotNull(jasperPrint); // DISABLED: java.awt.HeadlessException thown in headless mode (on ci server) //final JRViewer aViewer = new JRViewer(jasperPrint); //assertNotNull(aViewer); } private static class TableDataSource implements JRDataSource { //~ Instance fields ---------------------------------------------------- private int index = -1; private final TableModel model; //~ Constructors ------------------------------------------------------- /** * Creates a new TableDataSource object. * * @param model DOCUMENT ME! */ public TableDataSource(final TableModel model) { this.model = model; } //~ Methods ------------------------------------------------------------ @Override public boolean next() throws JRException { final boolean ret = ++index < model.getRowCount(); if (!ret) { index = -1; } return ret; } @Override public Object getFieldValue(final JRField jrField) throws JRException { int col = 0; try { col = Integer.parseInt(jrField.getName()); } catch (NumberFormatException e) { //e.printStackTrace(); } final Object result = model.getValueAt(index, col); if (result != null) { return String.valueOf(result); } else { return null; } } } /** * Only for test purposes. * * @version $Revision$, $Date$ */ private static class CustomTableModel implements TableModel { //~ Instance fields ---------------------------------------------------- String[] cols = {"ab", "cd", "ef", "gh"}; String[][] attr = { {"a", "b", "c", "d"}, {"a1", "b1", "c1", "d1"}, {"a2", "b2", "c2", "d2"}, {"a3", "b3", "c3", "d3"}, {"a4", "4b", "c4", "4d"} }; //~ Methods ------------------------------------------------------------ @Override public int getRowCount() { return 5; } @Override public int getColumnCount() { return cols.length; } @Override public String getColumnName(final int columnIndex) { return cols[columnIndex]; } @Override public Class<?> getColumnClass(final int columnIndex) { return String.class; } @Override public boolean isCellEditable(final int rowIndex, final int columnIndex) { return false; } @Override public Object getValueAt(final int rowIndex, final int columnIndex) { return attr[rowIndex][columnIndex]; } @Override public void setValueAt(final Object aValue, final int rowIndex, final int columnIndex) { throw new UnsupportedOperationException("Not supported yet."); } @Override public void addTableModelListener(final TableModelListener l) { } @Override public void removeTableModelListener(final TableModelListener l) { } } }