Update of /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv645/src/java/net/sf/tail/report/xls Modified Files: SliceXlsGenerator.java ReportXlsGenerator.java CompleteXlsGenerator.java CellStylist.java Added Files: TimeSeriesXlsGenerator.java XLSReportGenerator.java Removed Files: ReportGenerator.java Log Message: Finalização das classes de geração de xls, refatoração e teste --- NEW FILE: XLSReportGenerator.java --- package net.sf.tail.report.xls; import java.io.IOException; import java.util.List; import net.sf.tail.AnalysisCriterion; import net.sf.tail.report.Report; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.joda.time.Period; public interface XLSReportGenerator { List<HSSFSheet> generate(Report report, List<AnalysisCriterion> criteria, Period period) throws IOException; List<HSSFSheet> generate(Report report, Period period) throws IOException; } Index: CellStylist.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/CellStylist.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CellStylist.java 24 Sep 2007 18:40:21 -0000 1.2 --- CellStylist.java 25 Sep 2007 00:04:22 -0000 1.3 *************** *** 16,27 **** public class CellStylist { - protected static final int INDEX_FIRST_COLUMN = 1; - - protected static final int INDEX_FIRST_ROW = 18; - - protected static final String FM_REPORT_DIR = "reports/"; - - protected static final String FM_CHART_DIR = "PNGCharts/"; - public CellStylist(HSSFWorkbook workbook) { this.workbook = workbook; --- 16,19 ---- *************** *** 57,61 **** } ! protected HSSFCellStyle createHeaderCellStyle(HSSFWorkbook workbook) { HSSFCellStyle style = workbook.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); --- 49,53 ---- } ! protected HSSFCellStyle createHeaderCellStyle() { HSSFCellStyle style = workbook.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); *************** *** 72,77 **** } ! protected HSSFCellStyle createFirstCellStyle(HSSFWorkbook wb) { ! HSSFCellStyle style = wb.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); --- 64,69 ---- } ! protected HSSFCellStyle createFirstCellStyle() { ! HSSFCellStyle style = workbook.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); *************** *** 79,83 **** style.setFillBackgroundColor(HSSFColor.AQUA.index); ! HSSFFont font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 12); --- 71,75 ---- style.setFillBackgroundColor(HSSFColor.AQUA.index); ! HSSFFont font = workbook.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 12); *************** *** 86,96 **** } ! protected HSSFCellStyle createInternalCellStyle(HSSFWorkbook wb) { ! HSSFCellStyle style = wb.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); ! HSSFFont font = wb.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 12); --- 78,88 ---- } ! protected HSSFCellStyle createInternalCellStyle() { ! HSSFCellStyle style = workbook.createCellStyle(); style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); ! HSSFFont font = workbook.createFont(); font.setFontName("Arial"); font.setFontHeightInPoints((short) 12); *************** *** 99,104 **** } ! protected HSSFCellStyle createSummaryCellStyle(HSSFWorkbook wb) { ! HSSFCellStyle style = wb.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); --- 91,96 ---- } ! protected HSSFCellStyle createSummaryCellStyle() { ! HSSFCellStyle style = workbook.createCellStyle(); style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); *************** *** 109,113 **** style.setFillBackgroundColor(HSSFColor.AQUA.index); ! HSSFFont font = wb.createFont(); font.setFontName("Courier New"); font.setFontHeightInPoints((short) 15); --- 101,105 ---- style.setFillBackgroundColor(HSSFColor.AQUA.index); ! HSSFFont font = workbook.createFont(); font.setFontName("Courier New"); font.setFontHeightInPoints((short) 15); *************** *** 126,128 **** --- 118,136 ---- } + public HSSFCellStyle createLastCellStyle() { + HSSFCellStyle style = workbook.createCellStyle(); + + style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM); + style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM); + style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM); + style.setAlignment(HSSFCellStyle.ALIGN_CENTER); + style.setFillBackgroundColor(HSSFColor.AQUA.index); + + HSSFFont font = workbook.createFont(); + font.setFontName("Arial"); + font.setFontHeightInPoints((short) 12); + style.setFont(font); + return style; + } + } \ No newline at end of file --- ReportGenerator.java DELETED --- Index: SliceXlsGenerator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/SliceXlsGenerator.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SliceXlsGenerator.java 24 Sep 2007 18:40:21 -0000 1.3 --- SliceXlsGenerator.java 25 Sep 2007 00:04:22 -0000 1.4 *************** *** 3,21 **** import java.io.File; import java.io.IOException; - import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import net.sf.tail.AnalysisCriterion; - import net.sf.tail.Indicator; - import net.sf.tail.TimeSeries; import net.sf.tail.Trade; import net.sf.tail.analysis.criteria.NumberOfTicksCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.Decision; - import net.sf.tail.graphics.SeriesChart; - import net.sf.tail.graphics.SeriesDataset; - import net.sf.tail.indicator.simple.ClosePriceIndicator; import net.sf.tail.report.Report; import org.apache.poi.hssf.usermodel.HSSFCell; --- 3,16 ---- import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; import net.sf.tail.AnalysisCriterion; import net.sf.tail.Trade; import net.sf.tail.analysis.criteria.NumberOfTicksCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.Decision; import net.sf.tail.report.Report; + import net.sf.tail.report.ReportImage; import org.apache.poi.hssf.usermodel.HSSFCell; *************** *** 25,33 **** import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; - import org.jfree.chart.ChartUtilities; - import org.jfree.chart.JFreeChart; import org.joda.time.Period; ! public class SliceXlsGenerator implements ReportGenerator { protected static final int INDEX_FIRST_COLUMN = 1; --- 20,26 ---- import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.joda.time.Period; ! public class SliceXlsGenerator implements XLSReportGenerator { protected static final int INDEX_FIRST_COLUMN = 1; *************** *** 42,51 **** private CellStylist stylist; ! public SliceXlsGenerator(HSSFWorkbook workbook) { this.workbook = workbook; this.stylist = new CellStylist(workbook); } ! public List<HSSFSheet> generate(Report report, Period period) throws IOException { List<AnalysisCriterion> criteria = new LinkedList<AnalysisCriterion>(); --- 35,44 ---- private CellStylist stylist; ! public SliceXlsGenerator(HSSFWorkbook workbook) { this.workbook = workbook; this.stylist = new CellStylist(workbook); } ! public List<HSSFSheet> generate(Report report, Period period) throws IOException { List<AnalysisCriterion> criteria = new LinkedList<AnalysisCriterion>(); *************** *** 60,78 **** throws IOException { int row = INDEX_FIRST_ROW; List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFSheet sheet = workbook.createSheet(decision.getFileName()); ! HSSFCellStyle style = stylist.createHeaderCellStyle(workbook); row = generateHeader(row, workbook, sheet, criteria, style); ! style = stylist.createInternalCellStyle(workbook); row = generateInternalRow(row, workbook, sheet, decision, criteria, style); ! style = stylist.createSummaryCellStyle(workbook); generateSummaryRow(row, workbook, sheet, decision, criteria, style); ! // File reportPNG = generatePNGFile(decision); ! // stylist.drawImage(reportPNG , sheet); stylist.rearrangeSheet(sheet, 10); --- 53,72 ---- throws IOException { int row = INDEX_FIRST_ROW; + ReportImage image = new ReportImage(); List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFSheet sheet = workbook.createSheet(decision.getFileName()); ! HSSFCellStyle style = stylist.createHeaderCellStyle(); row = generateHeader(row, workbook, sheet, criteria, style); ! style = stylist.createInternalCellStyle(); row = generateInternalRow(row, workbook, sheet, decision, criteria, style); ! style = stylist.createSummaryCellStyle(); generateSummaryRow(row, workbook, sheet, decision, criteria, style); ! File reportPNG = image.generateImage(decision); ! stylist.drawImage(reportPNG, sheet); stylist.rearrangeSheet(sheet, 10); *************** *** 115,126 **** HSSFRow rowDecision = sheet.createRow((short) firtRow++); createCell(rowDecision, index++, (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getEntry().getIndex()).getDateName(), (short) indexcolumn++, ! style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getEntry().getIndex()) ! .getClosePrice(), (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getExit().getIndex()).getDateName(), (short) indexcolumn++, ! style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getExit().getIndex()) ! .getClosePrice(), (short) indexcolumn++, style); for (AnalysisCriterion criterium : criteria) { calculate = criterium.calculate(decision.getSeries(), decision.getTrades().get(index - 2)); --- 109,120 ---- HSSFRow rowDecision = sheet.createRow((short) firtRow++); createCell(rowDecision, index++, (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getEntry().getIndex()).getDateName(), ! (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getEntry().getIndex()).getClosePrice(), ! (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getExit().getIndex()).getDateName(), ! (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(trade.getExit().getIndex()).getClosePrice(), ! (short) indexcolumn++, style); for (AnalysisCriterion criterium : criteria) { calculate = criterium.calculate(decision.getSeries(), decision.getTrades().get(index - 2)); *************** *** 159,164 **** cell.setCellStyle(cellStyle); } ! ! private static void createCell(HSSFRow row, double value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); --- 153,157 ---- cell.setCellStyle(cellStyle); } ! private static void createCell(HSSFRow row, double value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); *************** *** 167,186 **** } - private static File generatePNGFile(Decision decision) throws IOException { - TimeSeries timeSeries = decision.getSeries(); - List<Indicator<? extends Number>> indicators; - String imagePath = FM_REPORT_DIR + FM_CHART_DIR + decision.getFileName() + ".png"; - - Indicator<Double> close = new ClosePriceIndicator(timeSeries); - indicators = new ArrayList<Indicator<? extends Number>>(); - indicators.add(close); - - SeriesDataset seriesData = new SeriesDataset(timeSeries, indicators, decision.getTrades()); - SeriesChart seriesChart = new SeriesChart(seriesData); - JFreeChart jfreechart = seriesChart.createChart(""); - File reportPNG = new File(imagePath); - ChartUtilities.saveChartAsPNG(reportPNG, jfreechart, 800, 300); - return reportPNG; - } - } --- 160,162 ---- Index: CompleteXlsGenerator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/CompleteXlsGenerator.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CompleteXlsGenerator.java 24 Sep 2007 16:52:23 -0000 1.6 --- CompleteXlsGenerator.java 25 Sep 2007 00:04:22 -0000 1.7 *************** *** 15,19 **** import org.joda.time.Period; ! public class CompleteXlsGenerator implements ReportGenerator { public List<HSSFSheet> generate(Report report, Period period) throws IOException { --- 15,19 ---- import org.joda.time.Period; ! public class CompleteXlsGenerator implements XLSReportGenerator { public List<HSSFSheet> generate(Report report, Period period) throws IOException { *************** *** 22,41 **** criteria.add(new TotalProfitCriterion()); return generate(report, criteria, period); } - /* - * (non-Javadoc) - * - * @see net.sf.tail.report.xls.ReportGenerator#generate() - */ public List<HSSFSheet> generate(Report report, List<AnalysisCriterion> criteria, Period period) throws IOException { List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFWorkbook workbook = new HSSFWorkbook(); ! ReportGenerator reportXls = new ReportXlsGenerator(workbook); ! ReportGenerator slicerXls = new SliceXlsGenerator(workbook); ! sheets.addAll(reportXls.generate(report, criteria, period)); sheets.addAll(slicerXls.generate(report, criteria, period)); FileOutputStream fileOut = new FileOutputStream("report.xls"); --- 22,40 ---- criteria.add(new TotalProfitCriterion()); return generate(report, criteria, period); + } public List<HSSFSheet> generate(Report report, List<AnalysisCriterion> criteria, Period period) throws IOException { List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFWorkbook workbook = new HSSFWorkbook(); ! XLSReportGenerator reportXls = new ReportXlsGenerator(workbook); ! XLSReportGenerator slicerXls = new SliceXlsGenerator(workbook); ! TimeSeriesXlsGenerator seriesXls = new TimeSeriesXlsGenerator(workbook); ! sheets.add(seriesXls.generate(report.getSlicer().getSeries())); ! sheets.addAll(reportXls.generate(report, criteria, period)); sheets.addAll(slicerXls.generate(report, criteria, period)); + FileOutputStream fileOut = new FileOutputStream("report.xls"); --- NEW FILE: TimeSeriesXlsGenerator.java --- package net.sf.tail.report.xls; import java.io.IOException; import net.sf.tail.Tick; import net.sf.tail.TimeSeries; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class TimeSeriesXlsGenerator { protected static final int INDEX_FIRST_COLUMN = 1; protected static final int INDEX_FIRST_ROW = 1; private HSSFSheet sheet; private CellStylist stylist; public TimeSeriesXlsGenerator(HSSFWorkbook workbook) { this.sheet = workbook.createSheet("Time Series"); stylist = new CellStylist(workbook); } public HSSFSheet generate(TimeSeries series) throws IOException { int row = INDEX_FIRST_ROW; HSSFCellStyle style = stylist.createHeaderCellStyle(); row = generateHeader(row, style); style = stylist.createInternalCellStyle(); generateInternalRow(row, series, style); stylist.rearrangeSheet(sheet, 10); return this.sheet; } private int generateHeader(int firtRow, HSSFCellStyle style) { HSSFRow rowHeader = sheet.createRow((short) firtRow++); int columnIndex = INDEX_FIRST_COLUMN; createCell(rowHeader, "Data e Hora", (short) columnIndex++, style); createCell(rowHeader, "Abertura", (short) columnIndex++, style); createCell(rowHeader, "Fechamento", (short) columnIndex++, style); createCell(rowHeader, "Máximo", (short) columnIndex++, style); createCell(rowHeader, "Variação", (short) columnIndex++, style); createCell(rowHeader, "Anterior", (short) columnIndex++, style); createCell(rowHeader, "Montante", (short) columnIndex++, style); createCell(rowHeader, "Vol($)", (short) columnIndex++, style); createCell(rowHeader, "Quantidade", (short) columnIndex++, style); return firtRow; } private void generateInternalRow(int firtRow, TimeSeries series, HSSFCellStyle style) { int i; for (i = 0; i < series.getSize() - 1; i++) { Tick tick = series.getTick(i); int indexcolumn = INDEX_FIRST_COLUMN; HSSFRow row = sheet.createRow((short) firtRow++); createCell(row, tick.getDate().toString("hh:mm dd/MM/yyyy"), (short) indexcolumn++, style); createCell(row, tick.getOpenPrice(), (short) indexcolumn++, style); createCell(row, tick.getClosePrice(), (short) indexcolumn++, style); createCell(row, tick.getMaxPrice(), (short) indexcolumn++, style); createCell(row, tick.getVariation(), (short) indexcolumn++, style); createCell(row, tick.getPreviousPrice(), (short) indexcolumn++, style); createCell(row, tick.getAmount(), (short) indexcolumn++, style); createCell(row, tick.getVolume(), (short) indexcolumn++, style); createCell(row, tick.getTrades(), (short) indexcolumn++, style); } style = stylist.createLastCellStyle(); Tick tick = series.getTick(i); int indexcolumn = INDEX_FIRST_COLUMN; HSSFRow row = sheet.createRow((short) firtRow++); createCell(row, tick.getDate().toString("hh:mm dd/MM/yyyy"), (short) indexcolumn++, style); createCell(row, tick.getOpenPrice(), (short) indexcolumn++, style); createCell(row, tick.getClosePrice(), (short) indexcolumn++, style); createCell(row, tick.getMaxPrice(), (short) indexcolumn++, style); createCell(row, tick.getVariation(), (short) indexcolumn++, style); createCell(row, tick.getPreviousPrice(), (short) indexcolumn++, style); createCell(row, tick.getAmount(), (short) indexcolumn++, style); createCell(row, tick.getVolume(), (short) indexcolumn++, style); createCell(row, tick.getTrades(), (short) indexcolumn++, style); } private static void createCell(HSSFRow row, String value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); HSSFRichTextString hssfString = new HSSFRichTextString(value); cellStyle.setDataFormat((short) 0); cell.setCellType(HSSFCell.CELL_TYPE_STRING); cell.setCellValue(hssfString); cell.setCellStyle(cellStyle); } private static void createCell(HSSFRow row, double value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); cell.setCellValue(value); cell.setCellStyle(cellStyle); } } Index: ReportXlsGenerator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/ReportXlsGenerator.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ReportXlsGenerator.java 24 Sep 2007 18:40:21 -0000 1.3 --- ReportXlsGenerator.java 25 Sep 2007 00:04:22 -0000 1.4 *************** *** 3,45 **** import java.io.File; import java.io.IOException; - import java.util.Date; import java.util.LinkedList; import java.util.List; import net.sf.tail.AnalysisCriterion; - import net.sf.tail.Indicator; - import net.sf.tail.TimeSeries; import net.sf.tail.analysis.criteria.NumberOfTicksCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.Decision; - import net.sf.tail.flow.CashFlow; - import net.sf.tail.graphics.StockAndCashFlowChart; - import net.sf.tail.graphics.StockAndCashFlowDataset; - import net.sf.tail.indicator.simple.ClosePriceIndicator; import net.sf.tail.report.Report; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; - import org.apache.poi.hssf.usermodel.HSSFDataFormat; - import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; - import org.apache.poi.hssf.util.HSSFColor; - import org.jfree.chart.ChartUtilities; - import org.jfree.chart.JFreeChart; - import org.joda.time.DateTime; import org.joda.time.Period; ! public class ReportXlsGenerator implements ReportGenerator { ! ! protected static final int INDEX_FIRST_COLUMN = 1; ! ! protected static final int INDEX_FIRST_ROW = 18; ! protected static final String FM_REPORT_DIR = "reports/"; ! protected static final String FM_CHART_DIR = "PNGCharts/"; private HSSFWorkbook workbook; --- 3,29 ---- import java.io.File; import java.io.IOException; import java.util.LinkedList; import java.util.List; import net.sf.tail.AnalysisCriterion; import net.sf.tail.analysis.criteria.NumberOfTicksCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.Decision; import net.sf.tail.report.Report; + import net.sf.tail.report.ReportImage; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.joda.time.Period; ! public class ReportXlsGenerator implements XLSReportGenerator { ! private static final int INDEX_FIRST_COLUMN = 1; ! private static final int INDEX_FIRST_ROW = 18; private HSSFWorkbook workbook; *************** *** 60,86 **** return generate(report, criteria, period); } ! public List<HSSFSheet> generate(Report report, List<AnalysisCriterion> criteria, Period period) throws IOException { int row = INDEX_FIRST_ROW; List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFSheet sheet = workbook.createSheet("Complete Report"); ! HSSFCellStyle style = stylist.createHeaderCellStyle(workbook); ! row = generateHeader(row, workbook, sheet, report, criteria, style); ! style = stylist.createFirstCellStyle(workbook); ! row = generateFirstRow(row, workbook, sheet, report, criteria, style); ! style = stylist.createInternalCellStyle(workbook); ! row = generateInternalRow(row, workbook, sheet, report, criteria, style); ! style = stylist.createSummaryCellStyle(workbook); ! generateSummaryRow(row, workbook, sheet, report, criteria, style); ! // File reportPNG = generatePNGFile(report, period); ! // stylist.drawImage(reportPNG, sheet); ! stylist.rearrangeSheet(sheet, 5); sheets.add(sheet); --- 44,71 ---- return generate(report, criteria, period); } ! public List<HSSFSheet> generate(Report report, List<AnalysisCriterion> criteria, Period period) throws IOException { int row = INDEX_FIRST_ROW; + ReportImage image = new ReportImage(); List<HSSFSheet> sheets = new LinkedList<HSSFSheet>(); HSSFSheet sheet = workbook.createSheet("Complete Report"); ! HSSFCellStyle style = stylist.createHeaderCellStyle(); ! row = generateHeader(row, sheet, report, criteria, style); ! style = stylist.createFirstCellStyle(); ! row = generateFirstRow(row, sheet, report, criteria, style); ! style = stylist.createInternalCellStyle(); ! row = generateInternalRow(row, sheet, report, criteria, style); ! style = stylist.createSummaryCellStyle(); ! generateSummaryRow(row, sheet, report, criteria, style); ! File reportPNG = image.generateImage(report, period); ! stylist.drawImage(reportPNG, sheet); ! stylist.rearrangeSheet(sheet, 10); sheets.add(sheet); *************** *** 88,93 **** } ! private int generateHeader(int firtRow, HSSFWorkbook workbook, HSSFSheet sheet, Report report, ! List<AnalysisCriterion> criteria, HSSFCellStyle style) { HSSFRow rowHeader = sheet.createRow((short) firtRow++); int columnIndex = INDEX_FIRST_COLUMN; --- 73,78 ---- } ! private int generateHeader(int firtRow, HSSFSheet sheet, Report report, List<AnalysisCriterion> criteria, ! HSSFCellStyle style) { HSSFRow rowHeader = sheet.createRow((short) firtRow++); int columnIndex = INDEX_FIRST_COLUMN; *************** *** 98,103 **** createCell(rowHeader, "Strategy", (short) columnIndex++, style); createCell(rowHeader, "Time Frame", (short) columnIndex++, style); ! createCell(rowHeader, report.getApplyedCriterion().getClass().getSimpleName().split("Criterion")[0], (short) columnIndex++, ! style); for (AnalysisCriterion criterium : criteria) { createCell(rowHeader, criterium.getClass().getSimpleName(), (short) columnIndex++, style); --- 83,88 ---- createCell(rowHeader, "Strategy", (short) columnIndex++, style); createCell(rowHeader, "Time Frame", (short) columnIndex++, style); ! createCell(rowHeader, report.getApplyedCriterion().getClass().getSimpleName().split("Criterion")[0], ! (short) columnIndex++, style); for (AnalysisCriterion criterium : criteria) { createCell(rowHeader, criterium.getClass().getSimpleName(), (short) columnIndex++, style); *************** *** 106,111 **** } ! private int generateFirstRow(int firtRow, HSSFWorkbook wb, HSSFSheet sheet, Report report, ! List<AnalysisCriterion> criteria, HSSFCellStyle style) { int indexcolumn; HSSFRow rowFirst = sheet.createRow((short) firtRow++); --- 91,96 ---- } ! private int generateFirstRow(int firtRow, HSSFSheet sheet, Report report, List<AnalysisCriterion> criteria, ! HSSFCellStyle style) { int indexcolumn; HSSFRow rowFirst = sheet.createRow((short) firtRow++); *************** *** 127,132 **** } ! private int generateInternalRow(int firtRow, HSSFWorkbook wb, HSSFSheet sheet, Report report, ! List<AnalysisCriterion> criteria, HSSFCellStyle style) { double calculate; --- 112,117 ---- } ! private int generateInternalRow(int firtRow, HSSFSheet sheet, Report report, List<AnalysisCriterion> criteria, ! HSSFCellStyle style) { double calculate; *************** *** 134,145 **** String[] strategyTimeFrame; for (Decision decision : report.getDecisions()) { ! int indexcolumn = 1; HSSFRow rowDecision = sheet.createRow((short) firtRow++); strategyTimeFrame = decision.getStrategy().getName().split(":"); createCell(rowDecision, index++, (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(decision.getSeries().getBegin()).getDateName(), (short) indexcolumn++, ! style); ! createCell(rowDecision, decision.getSeries().getTick(decision.getSeries().getEnd()).getDateName(), (short) indexcolumn++, ! style); createCell(rowDecision, strategyTimeFrame[0], (short) indexcolumn++, style); createCell(rowDecision, Integer.parseInt(strategyTimeFrame[1].trim()), (short) indexcolumn++, style); --- 119,130 ---- String[] strategyTimeFrame; for (Decision decision : report.getDecisions()) { ! int indexcolumn = 1; HSSFRow rowDecision = sheet.createRow((short) firtRow++); strategyTimeFrame = decision.getStrategy().getName().split(":"); createCell(rowDecision, index++, (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(decision.getSeries().getBegin()).getDateName(), ! (short) indexcolumn++, style); ! createCell(rowDecision, decision.getSeries().getTick(decision.getSeries().getEnd()).getDateName(), ! (short) indexcolumn++, style); createCell(rowDecision, strategyTimeFrame[0], (short) indexcolumn++, style); createCell(rowDecision, Integer.parseInt(strategyTimeFrame[1].trim()), (short) indexcolumn++, style); *************** *** 150,160 **** createCell(rowDecision, calculate, (short) indexcolumn++, style); } ! } return firtRow; } ! private void generateSummaryRow(int firtRow, HSSFWorkbook wb, HSSFSheet sheet, Report report, ! List<AnalysisCriterion> criteria, HSSFCellStyle style) { int indexcolumn; double calculate; --- 135,145 ---- createCell(rowDecision, calculate, (short) indexcolumn++, style); } ! } return firtRow; } ! private void generateSummaryRow(int firtRow, HSSFSheet sheet, Report report, List<AnalysisCriterion> criteria, ! HSSFCellStyle style) { int indexcolumn; double calculate; *************** *** 185,190 **** cell.setCellStyle(cellStyle); } ! ! private static void createCell(HSSFRow row, double value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); --- 170,174 ---- cell.setCellStyle(cellStyle); } ! private static void createCell(HSSFRow row, double value, short column, HSSFCellStyle cellStyle) { HSSFCell cell = row.createCell(column); *************** *** 192,207 **** cell.setCellStyle(cellStyle); } - - private static File generatePNGFile(Report report, Period period) throws IOException { - TimeSeries timeSeries = report.getSlicer().getSeries(); - Indicator<Double> close = new ClosePriceIndicator(timeSeries); - CashFlow cashflow = new CashFlow(timeSeries, report.getAllTrades()); - String imagePath = FM_REPORT_DIR + FM_CHART_DIR + report.getFileName() + ".png"; - StockAndCashFlowDataset stockData = new StockAndCashFlowDataset(timeSeries, close, cashflow, period); - StockAndCashFlowChart stockChart = new StockAndCashFlowChart(stockData, false); - JFreeChart jfreechart = stockChart.createChart(""); - File reportPNG = new File(imagePath); - ChartUtilities.saveChartAsPNG(reportPNG, jfreechart, 800, 300); - return reportPNG; - } } \ No newline at end of file --- 176,178 ---- |