Package beans.report.selectors.baseSelectors

Source Code of beans.report.selectors.baseSelectors.AbstractTablesSelector

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

package beans.report.selectors.baseSelectors;

import beans.report.SelectorIndefiner;
import framework.beans.report.ReportBaseConstant;
import framework.generic.ClipsServerException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRMapCollectionDataSource;

/**
*
* @param <SELECTOR>
* @author finder
*/
public abstract class AbstractTablesSelector<SELECTOR extends AbstractDataSelector<?>> extends AbstractDataSelector<Map<String, Object>> {
  private int                  tableid;

  ArrayList<SELECTOR>              selectorCache = new ArrayList<SELECTOR>();

  public AbstractTablesSelector(EntityManager manager, int tableid) {
    super(manager);
    this.tableid = tableid;
  }

  public int getTableid() {
    return tableid;
  }

  @Override
  public void initDataSet() throws ClipsServerException {
    // nothing to do
  }


  public SELECTOR createDataSellector(SelectorIndefiner dataSelectorID, int part) throws ClipsServerException{
    switch (dataSelectorID.getId()){
      default:
        throw new IllegalArgumentException("Неизвестный тип выборщика данных");
    }
  }

  public SELECTOR createDataSellector(int part) throws ClipsServerException{
    if (selectorCache.size() > part && selectorCache.get(part) != null) {
      return selectorCache.get(part);
    }
    SELECTOR          sel = createDataSellector(getSelectorIndefiner(part), part);
    if (isCacheEnabled()){
      while (selectorCache.size() <= part) {
        selectorCache.add(null);
      }
      selectorCache.set(part, sel);
    }
    if (sel != null) {
      AbstractReportTable<?>      table = getSelectorTable(part);
      if (table != null && sel instanceof AbstractSQLSelector<?>) {
        ((AbstractSQLSelector<?>)sel).setFilterList(table.getFiltersList());
      }
      sel.setLpu(getLpu());
      sel.setRange(getRange());
      sel.initDataSet();
    }
    return sel;
  }

  abstract public AbstractReportTable<?> getSelectorTable(int part);

  public SelectorIndefiner getSelectorIndefiner(int part) {
    return getSelectorTable(part).getType();
  }

  @Override
  protected void putTableParams(HashMap<String, Object> map, int part) throws ClipsServerException{
    map.put(ReportBaseConstant.SUBREPORT_TABLE_ID, tableid);
    map.put(ReportBaseConstant.SUBREPORT_PART_ID, part + 1);
    map.put(ReportBaseConstant.SUBREPORT_TABLE_TYPE_ID, getSelectorIndefiner(part).getId());
  }


  protected ArrayList<Map<String, Object>> addSelectorDataSet(int part, String name, AbstractDataSelector<?> selector, HashMap<String, Object> subreportParams, ArrayList<Map<String, Object>> lines) throws ClipsServerException{
    ArrayList<?>          data = selector.getDataList(part);
    if (lines == null){
      lines = new ArrayList<Map<String, Object>>(data.size());
      for (int i = 0; i < data.size(); i++){
        lines.add(new HashMap<String, Object>(8));
      }
    }
    if (data.size() != lines.size()){
      throw new ClipsServerException("Ошибка алгоритма");
    }
    for (int i = 0; i < lines.size(); i++) {
      Map<String, Object> map = lines.get(i);
      map.put(name, data.get(i));
    }
    selector.putTableParams(subreportParams, part);
    return lines;
  }

  protected ArrayList<Map<String, Object>> addSubreportDataSet(int part, HashMap<String, Object> subreportParams) throws ClipsServerException{
    AbstractDataSelector<?>      selector = createDataSellector(part);
    ArrayList<Map<String, Object>>  lines = addSelectorDataSet(part, "dt1", selector, subreportParams, null);
    return lines;
  }

  protected HashMap<String, Object> getDataPart(int part) throws ClipsServerException{
    HashMap<String, Object>      subParams = new HashMap<String, Object>();
    ArrayList<Map<String, Object>>  lines = addSubreportDataSet(part, subParams);
    JRDataSource          sourse = new JRMapCollectionDataSource(lines);
    HashMap<String, Object>      target = new HashMap<String, Object>();
    target.put(ReportBaseConstant.SUBREPORT_DATA_ARRAY_NAME, lines);
    target.put(ReportBaseConstant.SUBREPORT_DATASOURCE_NAME, sourse);
    target.put(ReportBaseConstant.SUBREPORT_PARAMETER_NAME, subParams);
    putTableParams(target, part);
    return target;
  }

  @Override
  public ArrayList<Map<String, Object>> getDataList(int part) throws ClipsServerException {
    ArrayList<Map<String, Object>>  mainData = new ArrayList<Map<String, Object>>();
    for (int i = 0; i < getTableCount(); i++){
      Map<String, Object>          newItem = getDataPart(i);
      if (newItem == null) {
        break;
      }
      mainData.add(newItem);
    }
    return mainData;
  }

  public void dispose(){
    selectorCache.clear();
  }
 
 
  boolean isCacheEnabled(){
    return true;
  }

  abstract public int getTableCount();
}
TOP

Related Classes of beans.report.selectors.baseSelectors.AbstractTablesSelector

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.