/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reportgen.formatter;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import reportgen.utils.ReportException;
import reportgen.formatter.extended.TableProcessor;
import reportgen.math.ResultColumn;
import reportgen.prototype.queryresults.QueryResults;
import reportgen.prototype.queryresults.ResultsRow;
import reportgen.ren.report.ReportQuery;
import reportgen.ren.report.extendedformat.table.TableFormat;
import reportgen.ren.report.extendedformat.TableFormatList;
import reportgen.ren.report.items.ResultColumnList;
/**
*
* @author axe
*/
public class ExtendedDocBuilder extends DocBuilder{
public ExtendedDocBuilder(QueryResults results, ReportQuery query, String title) {
super(results, query, title);
}
@Override
public void isAvailiable() throws ReportException {
getAvailiableFormats().size();
}
/**
* Создает документ на основе указанных режимов отображения
* и данных указанных в контрукторе
* @param modes
* @return
* @throws reportgen.exception.ReportException
*/
@Override
public void toHTML(PrintStream stream) throws ReportException {
List<TableProcessor> list = getAvailiableFormats();
List<Map> models = new LinkedList<Map>();
for(int i=0; i<results.getRowCount(); i++) {
ResultsRow row = results.getRow(i);
Map<ResultColumn, Object> model = new HashMap<ResultColumn, Object>();
ResultColumnList cols = query.getColumns();
for(int j=0; j< cols.size(); j++) {
model.put(cols.get(j).getProperties(), row.getValue(j));
}
models.add(model);
}
for(TableProcessor format: list) {
format.addRows(models);
}
stream.println(getHeader(title));
for(TableProcessor format: list) {
format.toHTML(stream);
}
stream.println(getTail());
}
private List<TableProcessor> getAvailiableFormats() throws ReportException {
TableFormatList formats = query.getTableFormats();
List<TableProcessor> list = new LinkedList<TableProcessor>();
for (int i = 0; i < formats.size(); i++) {
TableFormat format = formats.get(i);
if (format.isEnabled()) {
list.add(new TableProcessor(format));
}
}
if (list.size() == 0) {
throw new ReportException("Отчет не содержит таблиц расширенного формата");
}
return list;
}
}