package net.methodyne.demo; import net.methodyne.bellvue.core.Sdata; import java.util.*; import java.io.Serializable; import java.io.IOException; import org.jfree.data.time.*; import org.jfree.data.XYDataset; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.StandardXYItemRenderer; import org.jfree.chart.renderer.XYItemRenderer; import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartRenderingInfo; public class Account implements Serializable{ //private static final long serialVersionUID = 1L; public long id = -1l; public String title = "my Account"; public String type = "type"; public Date plot_start = new Date(); public Date plot_end = new Date(); public String plot_period = "m"; public Vector cashFlows = new Vector(); public Vector referenceCashFlows = new Vector(); public String dispPlot_start(Sdata sd){ return "yyyy.MM.dd"; } public String dispPlot_end(Sdata sd){ return "yyyy.MM.dd"; } public String getTitle() { return title; } public String dispPlot_period(Sdata sd){ return "SELECT,m,y"; } public String setPlot_period(String val, Sdata sd){ String ret = null; if( " m y".indexOf(val) <= 0 ){ return "Enter: m for monthly, y for yearly period."; } else{ plot_period = val; } return ret; } public String typeCashFlows(){ return "net.methodyne.demo.CashFlow"; } public float getBalance(Date v) { float bal = 0; Calendar c = Calendar.getInstance(); CashFlow cf; Iterator e = cashFlows.iterator(); while (e.hasNext() ) { cf = (CashFlow) e.next(); String p = cf.periodic; c.set(cf.first.getYear() + 1900, cf.first.getMonth(), cf.first.getDay()); while ((c.getTime().getTime() <= v.getTime()) && (c.getTime().getTime() <= cf.last.getTime())) { bal += (cf.amount); if (p.length() == 1) { if (p.compareTo("y") == 0) c.add(Calendar.YEAR, 1); if (p.compareTo("q") == 0) c.add(Calendar.MONTH, 3); if (p.compareTo("m") == 0) c.add(Calendar.MONTH, 1); if (p.compareTo("w") == 0) c.add(Calendar.WEEK_OF_YEAR, 1); } else { break; } } } return bal; } public String aboutPlotChart(Sdata sd){ return "on"; } public void actionPlotChart(Sdata sd) { String filename = accountPlot("Account line", sd ); String graphURL = sd.req.getContextPath() + "/DisplayChart?filename=" + filename; net.methodyne.bellvue.core.ResultObject r = new net.methodyne.bellvue.core.ResultObject(); r.result = "<img src=\""+ graphURL + "\" width=500 height=300 border=0>"; r.title = "Account balance time plot"; sd.view.add(r); } public String accountPlot(String title, Sdata sd) { String filename = ""; String chartTitle = "Account balance over time:"; XYDataset dataset = createDataset(); JFreeChart chart = ChartFactory.createTimeSeriesChart(chartTitle, "Date", "Balance", dataset, true, true, true); chart.setBackgroundPaint(java.awt.Color.white); XYPlot plot = chart.getXYPlot(); XYItemRenderer renderer = plot.getRenderer(); if (renderer instanceof StandardXYItemRenderer) { StandardXYItemRenderer r = (StandardXYItemRenderer) renderer; r.setPlotShapes(true); r.setDefaultShapeFilled(true); //r.setDefaultShapeScale(5.0); } // Write the chart image to the temporary directory ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); try { filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, sd.req.getSession() ); } catch (IOException e) { e.printStackTrace(); } return filename; } public XYDataset createDataset() { String p = plot_period; TimeSeries s1 = null; if ((p.compareTo("y") == 0) || (p.compareTo("m") == 0)) { if (p.compareTo("y") == 0) { s1 = new TimeSeries(getTitle(), Year.class); Date x = new Date(); x.setTime(plot_start.getTime()); while (x.getTime() <= plot_end.getTime()) { s1.add(new Year(1900 + x.getYear()), getBalance(x)); x.setYear(x.getYear() + 1); } } else if (p.compareTo("m") == 0) { s1 = new TimeSeries(getTitle(), Month.class); Date x = new Date(); x.setTime(plot_start.getTime() ); while (x.getTime() <= plot_end.getTime()) { //System.out.println("mon: " + x.dateValue().getMonth() ); //System.out.println( x.toString() + " balance:" + getBalance(x) ); s1.add(new Month(1 + x.getMonth(), 1900 + x.getYear()), getBalance(x)); x.setMonth( x.getMonth() + 1 ); } } } TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(s1); // dataset.addSeries(s2); return dataset; } }