Changeset 569
- Timestamp:
- 03/21/11 19:43:12 (2 years ago)
- Location:
- raptor-web/trunk
- Files:
-
- 1 added
- 5 edited
-
pom.xml (modified) (1 diff)
-
src/main/java/uk/ac/cardiff/raptorweb/engine/reports/GraphAndChartPDFReportGenerator.java (modified) (6 diffs)
-
src/main/java/uk/ac/cardiff/raptorweb/engine/reports/beans/DynamicTableModel.java (added)
-
src/main/java/uk/ac/cardiff/raptorweb/engine/reports/beans/GenericReportBean.java (modified) (3 diffs)
-
src/main/java/uk/ac/cardiff/raptorweb/model/records/Row.java (modified) (1 diff)
-
src/main/webapp/report-templates/generic-report.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
raptor-web/trunk/pom.xml
r568 r569 617 617 <version>3.5.3</version> 618 618 </dependency> 619 <dependency> 620 <groupId>ar.com.fdvs</groupId> 621 <artifactId>DynamicJasper</artifactId> 622 <version>3.0.13</version> 623 </dependency> 619 624 </dependencies> 620 625 <properties> -
raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/engine/reports/GraphAndChartPDFReportGenerator.java
r568 r569 1 1 package uk.ac.cardiff.raptorweb.engine.reports; 2 2 3 import java.awt.Color; 3 4 import java.awt.Graphics2D; 4 5 import java.awt.geom.Rectangle2D; … … 9 10 import java.text.SimpleDateFormat; 10 11 import java.util.ArrayList; 12 import java.util.Arrays; 11 13 import java.util.HashMap; 14 import java.util.Iterator; 12 15 import java.util.List; 13 16 import java.util.Map; 14 17 18 import net.sf.jasperreports.engine.JRDataSource; 15 19 import net.sf.jasperreports.engine.JRException; 16 20 import net.sf.jasperreports.engine.JasperCompileManager; … … 21 25 import net.sf.jasperreports.engine.JasperReport; 22 26 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 27 import net.sf.jasperreports.engine.data.JRTableModelDataSource; 23 28 import net.sf.jasperreports.engine.design.JasperDesign; 24 29 import net.sf.jasperreports.engine.xml.JRXmlLoader; … … 28 33 import org.slf4j.LoggerFactory; 29 34 35 import ar.com.fdvs.dj.core.DynamicJasperHelper; 36 import ar.com.fdvs.dj.core.layout.ClassicLayoutManager; 37 import ar.com.fdvs.dj.domain.DynamicReport; 38 import ar.com.fdvs.dj.domain.Style; 39 import ar.com.fdvs.dj.domain.builders.ColumnBuilder; 40 import ar.com.fdvs.dj.domain.builders.ColumnBuilderException; 41 import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder; 42 import ar.com.fdvs.dj.domain.builders.FastReportBuilder; 43 import ar.com.fdvs.dj.domain.constants.Border; 44 import ar.com.fdvs.dj.domain.constants.Font; 45 import ar.com.fdvs.dj.domain.constants.HorizontalAlign; 46 import ar.com.fdvs.dj.domain.constants.Transparency; 47 import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn; 48 30 49 import uk.ac.cardiff.raptorweb.engine.ChartProcessor; 50 import uk.ac.cardiff.raptorweb.engine.reports.beans.DynamicTableModel; 31 51 import uk.ac.cardiff.raptorweb.engine.reports.beans.GenericReportBean; 52 import uk.ac.cardiff.raptorweb.model.ManyRow; 53 import uk.ac.cardiff.raptorweb.model.RaptorTableChartModel; 54 import uk.ac.cardiff.raptorweb.model.TableSeries; 32 55 import uk.ac.cardiff.raptorweb.model.WebSession; 56 import uk.ac.cardiff.raptorweb.model.records.Row; 33 57 34 58 public class GraphAndChartPDFReportGenerator extends ReportConstructor { … … 43 67 log.info("Generating PDF report for both graph and chart, for {}", session.getGraphmodel().getSelectedStatisticalUnit()); 44 68 45 46 List charts = new ArrayList();47 BufferedImage image = ChartProcessor.extractBufferedImage(session.getGraphmodel().getCurrentJFreeGraph().getChart(), session.getGraphmodel().getChartOptions());48 49 reportBean.setImage(image);50 charts.add(reportBean);51 JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(charts);;52 53 69 try { 54 70 File baseGraphDirectory = saveDirectory.getFile(); … … 66 82 dir = new File(dir.getAbsoluteFile() + "/" + session.getGraphmodel().getSelectedStatisticalUnit().getStatisticalUnitInformation().getStatisticParameters().getUnitName().replaceAll(" ", "") + "-" + dateFormat.format(date) + ".pdf"); 67 83 68 69 File reportTemplateXMLFile = new File(baseDirectory.getFile().getCanonicalPath()+"/report-templates/"+reportXMLFile); 70 log.debug("Creating PDF in file {}",reportTemplateXMLFile); 71 72 //TODO no need to compile the report (which mostly will not change) each time this method is called (move it). 73 JasperDesign jasperDesign = JRXmlLoader.load(reportTemplateXMLFile); 74 75 Map parameters = new HashMap(); 76 77 JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 78 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource); 79 JasperExportManager.exportReportToPdfFile(jasperPrint,dir.getCanonicalPath()); 80 84 File reportTemplateXMLFile = new File(baseDirectory.getFile().getCanonicalPath() + "/report-templates/" + reportXMLFile); 85 log.debug("Creating PDF in file {}", reportTemplateXMLFile); 86 87 JasperPrint jp = constructReport(reportTemplateXMLFile, session); 88 JasperExportManager.exportReportToPdfFile(jp, dir.getCanonicalPath()); 89 81 90 String relativePath = dir.getAbsolutePath().replace(baseDirectory.getFile().getParentFile().getAbsolutePath(), ""); 82 91 session.getReportmodel().addReportForDownload(dir, relativePath); 83 92 log.info("Successfully created PDF...{}", session.getGraphmodel().getSelectedStatisticalUnit()); 84 85 93 86 94 } catch (JRException e) { 87 log.error("Error Creating JasperReport", e);95 log.error("Error Creating JasperReport", e); 88 96 } catch (IOException e) { 89 log.error("File expection when creating JasperReport",e); 90 } 91 92 } 93 94 97 log.error("File expection when creating JasperReport", e); 98 } catch (ColumnBuilderException e) { 99 log.error("Could not build columns in JasperReport", e); 100 } 101 102 } 103 104 private JasperPrint constructReport(File reportTemplateXMLFile, WebSession session) throws IOException, JRException, ColumnBuilderException { 105 log.info("Constructing Report Using DynamicJasper"); 106 // List source = new ArrayList(); 107 // BufferedImage image = ChartProcessor.extractBufferedImage(session.getGraphmodel().getCurrentJFreeGraph().getChart(), 108 // session.getGraphmodel().getChartOptions()); 109 // reportBean.setImage(image); 110 // ArrayList<String> values = new ArrayList(); 111 // values.add("One"); 112 // values.add("Two"); 113 // reportBean.setState(values); 114 // source.add(reportBean); 115 // 116 // DynamicReportBuilder drb = new DynamicReportBuilder(); 117 // drb.setTemplateFile(reportTemplateXMLFile.getCanonicalPath()); 118 // 119 // drb.addField("image", java.awt.image.BufferedImage.class.getName()); 120 // 121 // //session.getGraphmodel().getCurrentTableGraph().ge 122 // 123 // AbstractColumn columnState = ColumnBuilder.getNew().setColumnProperty("state",List.class.getName()).setTitle("State").setWidth(85).build(); 124 // drb.addColumn(columnState); 125 // DynamicReport dynamicReport = drb.build(); 126 // 127 // JRDataSource ds = new JRBeanCollectionDataSource(source); 128 // JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dynamicReport, new ClassicLayoutManager(), ds); 129 String[] columns = new String[session.getGraphmodel().getCurrentTableGraph().getTableSeries().size()+1]; 130 columns[0] = "Group";//always group 131 int headerCount=1; 132 for (TableSeries tseries : session.getGraphmodel().getCurrentTableGraph().getTableSeries()) { 133 columns[headerCount++] = tseries.getSeriesLabel(); 134 } 135 136 Object[][] data = new Object[maxNoRows(session.getGraphmodel().getCurrentTableGraph())][columns.length]; 137 138 139 140 int rowCount=0; 141 for (ManyRow mrow : session.getGraphmodel().getCurrentTableGraph().getRowsForView()) { 142 data[rowCount][0]=mrow.getGroupLabel(); 143 Iterator<?> it =mrow.getValues().iterator(); 144 headerCount=1; 145 while (it.hasNext()){ 146 String value = it.next().toString(); 147 data[rowCount][headerCount++] = value; 148 } 149 rowCount++; 150 } 151 log.debug("{}",Arrays.toString(data)); 152 153 DynamicTableModel model = new DynamicTableModel(); 154 model.setColumnNames(columns); 155 model.setData(data); 156 157 BufferedImage image = ChartProcessor.extractBufferedImage(session.getGraphmodel().getCurrentJFreeGraph().getChart(),session.getGraphmodel().getChartOptions()); 158 model.setImage(image); 159 160 FastReportBuilder drb = new FastReportBuilder(); 161 //drb.setTemplateFile(reportTemplateXMLFile.getCanonicalPath()); 162 //drb.addField("image", java.awt.image.BufferedImage.class.getName()); 163 Style columDetail = new Style(); 164 columDetail.setBorder(Border.THIN); 165 Style columDetailWhite = new Style(); 166 columDetailWhite.setBorder(Border.THIN); 167 columDetailWhite.setBackgroundColor(Color.WHITE); 168 Style columDetailWhiteBold = new Style(); 169 columDetailWhiteBold.setBorder(Border.THIN); 170 columDetailWhiteBold.setBackgroundColor(Color.WHITE); 171 Style titleStyle = new Style(); 172 titleStyle.setFont(new Font(18, Font._FONT_VERDANA, true)); 173 Style numberStyle = new Style(); 174 numberStyle.setHorizontalAlign(HorizontalAlign.RIGHT); 175 Style amountStyle = new Style(); 176 amountStyle.setHorizontalAlign(HorizontalAlign.RIGHT); 177 amountStyle.setBackgroundColor(Color.cyan); 178 amountStyle.setTransparency(Transparency.OPAQUE); 179 Style oddRowStyle = new Style(); 180 oddRowStyle.setBorder(Border.NO_BORDER); 181 Color veryLightGrey = new Color(230, 230, 230); 182 oddRowStyle.setBackgroundColor(veryLightGrey); 183 oddRowStyle.setTransparency(Transparency.OPAQUE); 184 185 // table name column 186 String[] headings = model.getColumnNames(); 187 for (int i = 0; i < headings.length; i++) { 188 String key = headings[i]; 189 AbstractColumn column = ColumnBuilder.getNew().setColumnProperty(key, String.class.getName()).setTitle(key).setWidth(new Integer(100)).setStyle(columDetailWhite).build(); 190 drb.addColumn(column); 191 192 } 193 drb.setTitle("Sample Report").setTitleStyle(titleStyle).setTitleHeight(new Integer(30)).setSubtitleHeight(new Integer(20)).setDetailHeight(new Integer(15)) 194 // .setLeftMargin(margin) 195 // .setRightMargin(margin) 196 // .setTopMargin(margin) 197 // .setBottomMargin(margin) 198 .setPrintBackgroundOnOddRows(true).setOddRowBackgroundStyle(oddRowStyle).setColumnsPerPage(new Integer(1)).setUseFullPageWidth(true).setColumnSpace(new Integer(5)); 199 DynamicReport dr = drb.build(); 200 201 JRDataSource ds = new JRTableModelDataSource(model); 202 JasperPrint jp = DynamicJasperHelper.generateJasperPrint(dr, new ClassicLayoutManager(), ds); 203 return jp; 204 } 205 206 /** 207 * @param currentTableGraph 208 * @return 209 */ 210 private int maxNoRows(RaptorTableChartModel currentTableGraph) { 211 int maxRows = 0; 212 for (TableSeries tseries :currentTableGraph.getTableSeries()){ 213 if (tseries.getRows().size()>maxRows) 214 maxRows=tseries.getRows().size(); 215 } 216 return maxRows; 217 } 95 218 96 219 @Override -
raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/engine/reports/beans/GenericReportBean.java
r568 r569 2 2 3 3 import java.awt.image.BufferedImage; 4 import java.util.List; 4 5 5 6 public class GenericReportBean { … … 7 8 private java.awt.image.BufferedImage image; 8 9 private String description; 10 private List state; 9 11 10 12 public String getDescription() { … … 24 26 } 25 27 28 public void setState(List state) { 29 this.state = state; 30 } 31 32 public List getState() { 33 return state; 34 } 35 36 37 26 38 } -
raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/model/records/Row.java
r518 r569 21 21 return value; 22 22 } 23 public String getStringValue(){ 24 return value.toString(); 25 } 23 26 public void setGroup(String group) { 24 27 this.group = group; -
raptor-web/trunk/src/main/webapp/report-templates/generic-report.xml
r568 r569 32 32 <reportElement x="0" y="30" width="500" height="500"/> 33 33 <imageExpression class="java.awt.Image"><![CDATA[$F{image}]]></imageExpression> 34 </image> 34 </image> 35 35 </band> 36 36 </detail> 37 37 38 38 <pageFooter> 39 39 <band height="15"> 40 40 <staticText> 41 41 <reportElement x="0" y="0" width="40" height="15"/> 42 <textElement/> 42 <textElement> 43 <font fontName="DejaVu Sans" size="8"/> 44 </textElement> 43 45 <text><![CDATA[Page:]]></text> 44 46 </staticText>
Note: See TracChangeset
for help on using the changeset viewer.
