Package beans.report.selectors

Source Code of beans.report.selectors.ReportTableFactory

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

package beans.report.selectors;

import beans.directory.lpu.entity.Lpu;
import beans.report.selectors.baseSelectors.BaseReportLine;
import beans.report.selectors.baseSelectors.TableOfTable;
import beans.report.selectors.baseSelectors.AbstractReportTable;
import beans.report.selectors.data.*;
import beans.report.DiseaseReportMaps;
import beans.report.SelectorIndefiner;
import beans.report.selectors.disease.DiseaseTable;
import beans.report.selectors.baseSelectors.AbstractTablesSelector;
import beans.report.selectors.data.DateRange;
import beans.report.selectors.data.lowLevel.StringQuotedConverter;
import beans.report.selectors.baseSelectors.TableOfTableSelector;
import beans.report.selectors.disease.CombinedDiseaseTable;
import beans.report.selectors.disease.CombinedDiseaseTableSelector;
import beans.report.selectors.disease.DiseaseLine;
import beans.report.selectors.disease.DiseaseTableSellector;
import beans.report.selectors.disease.sicklist.SickListReportTable;
import beans.report.selectors.disease.diagnosis.DiagnosisReportTable;
import beans.report.selectors.disease.filters.FilterOnlyExDispanserAndExtendedMedExam;
import beans.report.selectors.disease.followUp.FollowUpReportTable;
import beans.report.selectors.filters.FilterOnlyCountrySide;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.JDomReader;
import com.thoughtworks.xstream.io.xml.JDomWriter;
import framework.utils.Converter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import org.jdom.Element;

/**
*
* @author finder
*/
public class ReportTableFactory {
  private static final String              ATTRIBUTE_NAME_ID = "type_id";
  private static final String              REPORT_TABLE_ELEMENT_NAME = "table";

  public ReportTableFactory() {
  }
 
  private static XStream          reportXStream;
     
  public static XStream initXStream(){
    synchronized (ReportTableFactory.class){
      if (reportXStream == null){
        reportXStream = new XStream();
        reportXStream.processAnnotations(new Class[] {
                  // tables
                  DiseaseTable.class,
                  DiagnosisReportTable.class,
                  SickListReportTable.class,
                  FollowUpReportTable.class,
                  TableOfTable.class,
                  CombinedDiseaseTable.class,

                  // lines
                  BaseReportLine.class,
                  DiseaseLine.class,
                  // filters
                 
                  FilterOnlyExDispanserAndExtendedMedExam.class,
                  FilterOnlyCountrySide.class,
              });
        reportXStream.registerConverter((com.thoughtworks.xstream.converters.Converter)new StringQuotedConverter());
      }
    }
    return reportXStream;
  }
 
  public ArrayList<AbstractReportTable<?>> parseXml(Element el){
    ArrayList<AbstractReportTable<?>>    target = new ArrayList<AbstractReportTable<?>>();
    if (el == null) {
      return target;
    }
    @SuppressWarnings("unchecked")
    List<Element> els = el.getChildren(REPORT_TABLE_ELEMENT_NAME);
    for (Element element : els) {
      target.add(fromXml(element));
    }
    return target;
  }
 
  AbstractReportTable fromXml(Element el){
    XStream          xs = ReportTableFactory.initXStream();
    JDomReader        reader = new JDomReader(el);
    AbstractReportTable    target = (AbstractReportTable)xs.unmarshal(reader);
    target.afterLoad();
    return target;
  }
 
  public void toXml(Collection<AbstractReportTable<?>> list, Element target){
    for (AbstractReportTable table : list) {
      Element        cur = toXml(table);
      target.addContent(cur);
    }
  }

  Element toXml(AbstractReportTable table){
    XStream          xs = ReportTableFactory.initXStream();
    JDomWriter        writer = new JDomWriter();
    xs.marshal(table, writer);
    Element      target = (Element) writer.getTopLevelNodes().get(0);
    target = Converter.asXStreamSubElement( target, REPORT_TABLE_ELEMENT_NAME, table.getClass());
    target.setAttribute(ATTRIBUTE_NAME_ID, String.valueOf(table.getType().getId()));
    return target;
  }
 
  public AbstractReportTable createByID(int id){
    return createBySelectorIndefiner(DiseaseReportMaps.getSellectorByID(id));
  }
 
  public AbstractReportTable createBySelectorIndefiner(SelectorIndefiner indefiner){
    switch (indefiner.getId()){
      case DiseaseReportMaps.SELECTOR_ID_DISEATED_REPORT:
        return new DiagnosisReportTable(indefiner.getId());
      case DiseaseReportMaps.SELECTOR_ID_SICKLIST_REPORT:
        return new SickListReportTable();
      case DiseaseReportMaps.SELECTOR_ID_FOLLUP_REPORT:
        return new FollowUpReportTable();
      case DiseaseReportMaps.SELECTOR_ID_COMBINED_DISEASE_TABLE:
        return new CombinedDiseaseTable();
      case DiseaseReportMaps.SELECTOR_ID_TABLE_WITH_SUBTABLE:
        return new TableOfTable();
      default:
        throw new RuntimeException("Неизвестный тип выборщика: " + indefiner.getId());
    }
  }

  public AbstractTablesSelector<?> createTableSelector(EntityManager manager, Lpu lpu, AbstractReportTable table, int tableId, DateRange range){
    AbstractTablesSelector      selector;
    if (table instanceof DiseaseTable){
      switch (table.getType().getId()){
        case DiseaseReportMaps.SELECTOR_ID_DISEATED_REPORT:
        case DiseaseReportMaps.SELECTOR_ID_SICKLIST_REPORT:
        case DiseaseReportMaps.SELECTOR_ID_FOLLUP_REPORT:
        case DiseaseReportMaps.SELECTOR_ID_FORM_8_TABLE_1001:
          selector = new DiseaseTableSellector((DiseaseTable) table, manager, tableId);
          break;
        case DiseaseReportMaps.SELECTOR_ID_COMBINED_DISEASE_TABLE:
          selector = new CombinedDiseaseTableSelector((CombinedDiseaseTable) table, manager, tableId);
          break;
        default:
          throw new RuntimeException("Неизвестный тип таблицы");
      }
    }
    else if (table instanceof TableOfTable){
      selector = new TableOfTableSelector((TableOfTable)table, manager, tableId);
    }
    else{
      throw new RuntimeException("Неизвестный тип таблицы");
    }
    selector.setRange(range);
    selector.setLpu(lpu);
    return selector;
  }
}
TOP

Related Classes of beans.report.selectors.ReportTableFactory

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.