Package cli_fmw.report.implemenatation

Source Code of cli_fmw.report.implemenatation.JasperSubreportBuilder

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package cli_fmw.report.implemenatation;

import cli_fmw.report.CombinedReportOptions;
import framework.beans.report.ReportBaseConstant;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignBreak;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignSubreport;

/**
*
* @author finder
*/
public class JasperSubreportBuilder implements JasperDetailBuilder {
  public static final  String          SUBREPORT_DATA_NAME = "report_data";
  public static final  String          SUBREPORT_PARAMETER_NAME = ReportBaseConstant.SUBREPORT_PARAMETER_NAME;
  public static final  String          SUBREPORT_DATASOURCE_NAME = ReportBaseConstant.SUBREPORT_DATASOURCE_NAME;
  public static final  String          SUBREPORT_NEW_PAGE_FLAG = "new_page_flag";
 
  private CombinedReportOptions        options;
 
  private JasperBuilder            builder;
  private JRDesignBand            detalsBand;

  public JasperSubreportBuilder(CombinedReportOptions options) {
    if (options == null) {
      throw new IllegalArgumentException("options can not be null");
    }
    this.options = options;
    if (this.options.subReportNewPageType == null) {
      this.options.subReportNewPageType = CombinedReportOptions.NewPageType.none;
    }
  }

  @Override
  public void buildDetails(JasperBuilder inBuilder, JasperReportBuilderCustomizer inCustomizer) throws JRException {
    if (inBuilder == null) {
      throw new IllegalArgumentException("inBuilder can not be null");
    }
   
    this.builder = inBuilder;
   
    detalsBand = builder.getDetalsBand();
    buildDetail();
  }
 
  private JRExpression createFieldCallExpresion(String name, Class clazz) throws JRException{
    JRDesignField      field = (JRDesignField) builder.getTargetDesting().getFieldsMap().get(name);
    if (field == null){
      field = new JRDesignField();
      field.setName(name);
      field.setValueClass(clazz);
      builder.getTargetDesting().addField(field);
    }
    else if (field.getClass() != clazz) {
      throw new RuntimeException("Field exist, but has defferent class. Name " + name);
    }
    JRDesignExpression      ex = new JRDesignExpression();
    ex.setText("$F{" + field.getName() + "}");
    ex.setValueClass(clazz);
    return ex;
  }
 
  private void buildDetail() throws JRException{
    JRDesignSubreport        subreport = new JRDesignSubreport(builder.getTargetDesting());
    subreport.setExpression(createFieldCallExpresion(SUBREPORT_DATA_NAME, JasperReport.class));
    subreport.setParametersMapExpression(createFieldCallExpresion(SUBREPORT_PARAMETER_NAME, Map.class));
    subreport.setDataSourceExpression(createFieldCallExpresion(SUBREPORT_DATASOURCE_NAME, JRDataSource.class));
    subreport.setX(0);
    subreport.setHeight(1);
    if (options.subReportWidth > 0) {
      subreport.setWidth(options.subReportWidth);
    }
    else {
      subreport.setWidth(builder.getDestingWidth());
    }
    if (options.subReportNewPageType == CombinedReportOptions.NewPageType.none) {
      subreport.setY(0);
      detalsBand.setHeight(1);
    }
    else {
     
      detalsBand.setHeight(2);
      JRDesignBreak      jrBreak = new JRDesignBreak();
      jrBreak.setType(JRDesignBreak.TYPE_PAGE);
      switch (options.subReportNewPageType){
        case begin:
        case beginNotFirst:
          jrBreak.setX(0);
          subreport.setY(1);
          break;
        case end:
        case endNotLast:
          jrBreak.setX(1);
          subreport.setY(0);
          jrBreak.setPositionType(JRDesignBreak.POSITION_TYPE_FLOAT);
          break;
        default:
          throw new IllegalArgumentException("Uncnown options.subReportNewPageType paramiter");
      }
      jrBreak.setPrintWhenExpression(createFieldCallExpresion(SUBREPORT_NEW_PAGE_FLAG, Boolean.class));
      detalsBand.addElement(jrBreak);
    }
    detalsBand.addElement(subreport);
  }
}
TOP

Related Classes of cli_fmw.report.implemenatation.JasperSubreportBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.