Package cli_fmw.report.implemenatation

Source Code of cli_fmw.report.implemenatation.JasperCombinedReport

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

package cli_fmw.report.implemenatation;

import cli_fmw.main.ClipsException;
import cli_fmw.report.CombinedReportCreator;
import cli_fmw.report.CombinedReportOptions;
import cli_fmw.report.FormReportCreator;
import cli_fmw.report.PageOptions;
import cli_fmw.report.ReporterFactory;
import cli_fmw.report.SegmentedTableReporter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;


/**
*
* @author finder
*/
public class JasperCombinedReport extends JasperReporter<CombinedReportOptions> implements CombinedReportCreator, JasperSubReportContener {
  ArrayList<JasperSubReport>        reports = new ArrayList<JasperSubReport>();
 
 
  public JasperCombinedReport(Class formClass, int reportType, String reportName) {
    super(formClass, reportType, reportName);
  }
 
  @Override
  public void setUpReport(){
    setUpReport(null);
  }
 
  @Override
  public void setUpReport(Map<String, Object> extraFields) {
    setUpReport(null, null, extraFields == null? null: extraFields.entrySet());
  }

  @Override
  public void setUpReport(String title, CombinedReportOptions options, Collection<Entry<String, Object>> topExtraFields) {
    setUpReport(title, options, topExtraFields, null);
  }

  @Override
  public void setUpReport(String title, CombinedReportOptions options, Collection<Entry<String, Object>> topExtraFields, Collection<Entry<String, Object>> bottomExtraFields) {
    setInit();
    this.title = title;
    setOptions(options);
    this.topExtraFields = topExtraFields;
    this.bottomExtraFields = bottomExtraFields;
  }
 
  private void setUpAsSubReporter(Object creator){
    if (creator == null) {
      throw new IllegalArgumentException("Не удалось создать отчет переданного типа!");
    }
    if (!(creator instanceof JasperSubReport)) {
      throw new IllegalArgumentException("Не поддерживаемый тип подотчета, поддерживается только JasperReporter, получен: " + creator.getClass().getName());
    }
    JasperSubReport        jasperCreator = (JasperSubReport) creator;
    jasperCreator.setAsSubreport(this);
  }
 
  @Override
  public FormReportCreator createFormReporter(Class clazz, int type) {
    isInit();
    FormReportCreator        creator = ReporterFactory.createFormReporter(clazz, type);
    setUpAsSubReporter(creator);
    return creator;
  }
 
  @Override
  public CombinedReportCreator createCombinedReporter(Class clazz, int type) {
    isInit();
    CombinedReportCreator        creator = ReporterFactory.createCombinedReporter(clazz, type);
    setUpAsSubReporter(creator);
    return creator;
  }

  @Override
  public SegmentedTableReporter createAnalyseReporter(Class clazz) {
    isInit();
    SegmentedTableReporter            creator = ReporterFactory.createAnalyseReporter(clazz);
    setUpAsSubReporter(creator);
    return creator;
  }
 
  @Override
  public JasperReport getTemplateImp() throws ClipsException, JRException {
    isInit();
    JasperReport    report = getLoader().loadReport();
    if (report == null){
      JasperSubreportBuilder    subRepBuilder = new JasperSubreportBuilder(getOptions());
      JasperReportBuilder      reportBuilder = new JasperReportBuilder(title, getOptions(), topExtraFields, bottomExtraFields, subRepBuilder);
      report = reportBuilder.buildReport();
    }
    return report;
  }

  private void putFormatParams(ArrayList<Map<String, Object>> params){
    for (int i = 0; i < params.size(); i++) {
      Map<String, Object> map = params.get(i);
      if (getOptions().subReportNewPageType == CombinedReportOptions.NewPageType.beginNotFirst && i == 0){
        map.put(JasperSubreportBuilder.SUBREPORT_NEW_PAGE_FLAG, false);
      }
      else if (getOptions().subReportNewPageType == CombinedReportOptions.NewPageType.endNotLast && i == params.size() - 1){
        map.put(JasperSubreportBuilder.SUBREPORT_NEW_PAGE_FLAG, false);
      }
      else{
        map.put(JasperSubreportBuilder.SUBREPORT_NEW_PAGE_FLAG, true);
      }
    }
  }
 
  @Override
  public Map<String, ?> getParameters() throws ClipsException, JRException {
    isInit();
    HashMap<String, Object>        params = new HashMap<String, Object>();
    params.put(JRParameter.REPORT_LOCALE, RUS_LOCALE);
    initFieldParams(params, isAutoGenerated());
   
    ArrayList<Map<String, Object>>      data = new ArrayList<Map<String, Object>>();
    for (JasperSubReport curReporter : reports) {
      Map<String, Object>        item = new HashMap<String, Object>();
      item.put(JasperSubreportBuilder.SUBREPORT_DATA_NAME, curReporter.getTemplate());
      Map<String, ?>          subParam = curReporter.getParameters();
      item.put(JasperSubreportBuilder.SUBREPORT_PARAMETER_NAME, subParam);
      item.put(JasperSubreportBuilder.SUBREPORT_DATASOURCE_NAME, subParam.get(JRParameter.REPORT_DATA_SOURCE));
      data.add(item);
    }
    putFormatParams(data);
    params.put(JRParameter.REPORT_DATA_SOURCE, new JRMapCollectionDataSource(data));
    return params;
  }

  @Override
  public void addSubReport(JasperSubReport report) {
    reports.add(report);
  }

  @Override
  public CombinedReportOptions getOptions() {
    CombinedReportOptions        opt = super.getOptions();
    if (opt == null) {
      opt = new CombinedReportOptions();
      setOptions(opt);
    }
    return opt;
  }
 
  @Override
  public void correctReportPageSize(PageOptions options) {
    int        curVisibleArea = getOptions().reportWidht - getOptions().leftMargin - getOptions().rightMargin;
    int        newVisibleArea = options.reportWidht - options.leftMargin - options.rightMargin;
    if (curVisibleArea >= newVisibleArea){
      options.reportWidht = curVisibleArea;
      int        dif = curVisibleArea - newVisibleArea;
      options.leftMargin = dif >> 1;
      options.rightMargin = dif >> 1 | dif & 1;
    }
    else{
      options.reportWidht = curVisibleArea - options.leftMargin - options.rightMargin;
    }
  }

}
TOP

Related Classes of cli_fmw.report.implemenatation.JasperCombinedReport

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.