package com.dgex.offspring.trader.charts;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.List;
import nxt.Asset;
import nxt.Constants;
import nxt.Trade;
import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.experimental.chart.swt.ChartComposite;
public class AEChartComposite extends Composite {
private static Logger logger = Logger.getLogger(AEChartComposite.class);
private JFreeChart chart;
private final ChartComposite chartComposite;
private Asset asset;
public AEChartComposite(Composite parent, int style) {
super(parent, style);
setLayout(new FillLayout());
chartComposite = new ChartComposite(this, SWT.BORDER, null, true);
chartComposite.setDisplayToolTips(true);
chartComposite.setHorizontalAxisTrace(true);
chartComposite.setVerticalAxisTrace(true);
}
public JFreeChart getChart() {
return chart;
}
public void refresh(Asset asset) {
this.asset = asset;
String title = asset.getName() + " / NXT";
chart = createChart(asset, title);
chartComposite.setChart(chart);
chart.fireChartChanged();
}
private JFreeChart createChart(Asset asset, String title) {
XYDataset priceDataset = createPriceDataset();
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title, // title
"Date", // x title
"Price", // y title
priceDataset, // dataset
false, // legend
true, // tooltips
false);
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
NumberAxis numberaxis = (NumberAxis) xyplot.getRangeAxis();
numberaxis.setLowerMargin(0.40000000000000002D);
DecimalFormat decimalformat = new DecimalFormat("#.##");
numberaxis.setNumberFormatOverride(decimalformat);
return jfreechart;
}
private XYDataset createPriceDataset() {
TimeSeries series = new TimeSeries("Price");
List<Trade> trades = Trade.getTrades(asset.getId());
for (Trade trade : trades) {
Date date = new Date(((trade.getTimestamp()) * 1000l)
+ (Constants.EPOCH_BEGINNING - 500L));
series.addOrUpdate(new Minute(date),
Double.valueOf(trade.getPrice()) / 100);
}
TimeSeriesCollection dataset = new TimeSeriesCollection(series);
dataset.setDomainIsPointsInTime(true);
return dataset;
}
}