Changeset 569


Ignore:
Timestamp:
03/21/11 19:43:12 (2 years ago)
Author:
philsmart
Message:
 
Location:
raptor-web/trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • raptor-web/trunk/pom.xml

    r568 r569  
    617617                        <version>3.5.3</version> 
    618618                </dependency> 
     619                <dependency> 
     620                        <groupId>ar.com.fdvs</groupId> 
     621                        <artifactId>DynamicJasper</artifactId> 
     622                        <version>3.0.13</version> 
     623                </dependency> 
    619624        </dependencies> 
    620625        <properties> 
  • raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/engine/reports/GraphAndChartPDFReportGenerator.java

    r568 r569  
    11package uk.ac.cardiff.raptorweb.engine.reports; 
    22 
     3import java.awt.Color; 
    34import java.awt.Graphics2D; 
    45import java.awt.geom.Rectangle2D; 
     
    910import java.text.SimpleDateFormat; 
    1011import java.util.ArrayList; 
     12import java.util.Arrays; 
    1113import java.util.HashMap; 
     14import java.util.Iterator; 
    1215import java.util.List; 
    1316import java.util.Map; 
    1417 
     18import net.sf.jasperreports.engine.JRDataSource; 
    1519import net.sf.jasperreports.engine.JRException; 
    1620import net.sf.jasperreports.engine.JasperCompileManager; 
     
    2125import net.sf.jasperreports.engine.JasperReport; 
    2226import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
     27import net.sf.jasperreports.engine.data.JRTableModelDataSource; 
    2328import net.sf.jasperreports.engine.design.JasperDesign; 
    2429import net.sf.jasperreports.engine.xml.JRXmlLoader; 
     
    2833import org.slf4j.LoggerFactory; 
    2934 
     35import ar.com.fdvs.dj.core.DynamicJasperHelper; 
     36import ar.com.fdvs.dj.core.layout.ClassicLayoutManager; 
     37import ar.com.fdvs.dj.domain.DynamicReport; 
     38import ar.com.fdvs.dj.domain.Style; 
     39import ar.com.fdvs.dj.domain.builders.ColumnBuilder; 
     40import ar.com.fdvs.dj.domain.builders.ColumnBuilderException; 
     41import ar.com.fdvs.dj.domain.builders.DynamicReportBuilder; 
     42import ar.com.fdvs.dj.domain.builders.FastReportBuilder; 
     43import ar.com.fdvs.dj.domain.constants.Border; 
     44import ar.com.fdvs.dj.domain.constants.Font; 
     45import ar.com.fdvs.dj.domain.constants.HorizontalAlign; 
     46import ar.com.fdvs.dj.domain.constants.Transparency; 
     47import ar.com.fdvs.dj.domain.entities.columns.AbstractColumn; 
     48 
    3049import uk.ac.cardiff.raptorweb.engine.ChartProcessor; 
     50import uk.ac.cardiff.raptorweb.engine.reports.beans.DynamicTableModel; 
    3151import uk.ac.cardiff.raptorweb.engine.reports.beans.GenericReportBean; 
     52import uk.ac.cardiff.raptorweb.model.ManyRow; 
     53import uk.ac.cardiff.raptorweb.model.RaptorTableChartModel; 
     54import uk.ac.cardiff.raptorweb.model.TableSeries; 
    3255import uk.ac.cardiff.raptorweb.model.WebSession; 
     56import uk.ac.cardiff.raptorweb.model.records.Row; 
    3357 
    3458public class GraphAndChartPDFReportGenerator extends ReportConstructor { 
     
    4367        log.info("Generating PDF report for both graph and chart, for {}", session.getGraphmodel().getSelectedStatisticalUnit()); 
    4468 
    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          
    5369        try { 
    5470            File baseGraphDirectory = saveDirectory.getFile(); 
     
    6682            dir = new File(dir.getAbsoluteFile() + "/" + session.getGraphmodel().getSelectedStatisticalUnit().getStatisticalUnitInformation().getStatisticParameters().getUnitName().replaceAll(" ", "") + "-" + dateFormat.format(date) + ".pdf"); 
    6783 
    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 
    8190            String relativePath = dir.getAbsolutePath().replace(baseDirectory.getFile().getParentFile().getAbsolutePath(), ""); 
    8291            session.getReportmodel().addReportForDownload(dir, relativePath); 
    8392            log.info("Successfully created PDF...{}", session.getGraphmodel().getSelectedStatisticalUnit()); 
    84                  
    85              
     93 
    8694        } catch (JRException e) { 
    87             log.error("Error Creating JasperReport",e); 
     95            log.error("Error Creating JasperReport", e); 
    8896        } 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    } 
    95218 
    96219    @Override 
  • raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/engine/reports/beans/GenericReportBean.java

    r568 r569  
    22 
    33import java.awt.image.BufferedImage; 
     4import java.util.List; 
    45 
    56public class GenericReportBean { 
     
    78    private java.awt.image.BufferedImage image; 
    89    private String description; 
     10    private List state; 
    911 
    1012    public String getDescription() { 
     
    2426    } 
    2527 
     28    public void setState(List state) { 
     29        this.state = state; 
     30    } 
     31 
     32    public List getState() { 
     33        return state; 
     34    } 
     35 
     36 
     37 
    2638} 
  • raptor-web/trunk/src/main/java/uk/ac/cardiff/raptorweb/model/records/Row.java

    r518 r569  
    2121                return value; 
    2222        } 
     23        public String getStringValue(){ 
     24            return value.toString(); 
     25        } 
    2326        public void setGroup(String group) { 
    2427            this.group = group; 
  • raptor-web/trunk/src/main/webapp/report-templates/generic-report.xml

    r568 r569  
    3232                                <reportElement x="0" y="30" width="500" height="500"/> 
    3333                                <imageExpression class="java.awt.Image"><![CDATA[$F{image}]]></imageExpression> 
    34                         </image>                         
     34                        </image> 
    3535                </band> 
    3636        </detail> 
    37          
     37 
    3838        <pageFooter> 
    3939    <band height="15"> 
    4040      <staticText> 
    4141        <reportElement x="0" y="0" width="40" height="15"/> 
    42         <textElement/> 
     42        <textElement> 
     43            <font fontName="DejaVu Sans" size="8"/> 
     44        </textElement> 
    4345        <text><![CDATA[Page:]]></text> 
    4446      </staticText> 
Note: See TracChangeset for help on using the changeset viewer.