Re: Graph and data storage in the same singleton, it is an error ??
The class View was an example, the real implementation is the
following singleton class :
Any Idea about where's my mistake ??
Antonio
package it.imt.edusat.telemetry;
import it.imt.edusat.telemetry.enumeration.GenericTelemetryType;
import it.imt.edusat.telemetry.enumeration.ObcTelemetryType;
import it.imt.edusat.telemetry.enumeration.TelemetryGroup;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.EventListener;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
public class TelemetryStorageAndGraph extends JPanel{
private static TelemetryStorageAndGraph istanza;
private static ArrayList<BitSetAndTime> telemetryStorage;
private TimeSeries series;
private ChartPanel chartPanel = null;
TelemetryGroup telemetryGroup;
GenericTelemetryType genericTelemetryType;
private String title = "";
private TelemetryStorageAndGraph() {
}
public static TelemetryStorageAndGraph getInstance()
{
if (istanza == null)
{
istanza = new TelemetryStorageAndGraph();
telemetryStorage = new ArrayList<BitSetAndTime>();
}
return istanza;
}
public ArrayList<BitSetAndTime> getTelemetryStorage() {
return telemetryStorage;
}
public JPanel createTelemetryGraph(Telemetry telemetry){
// creazione del grafico
this.title= telemetry.getTelemetryName();
this.telemetryGroup = telemetry.getTLM_GROUP();
this.genericTelemetryType = telemetry.getSelectedTelemetryType();
this.series = new TimeSeries(genericTelemetryType.toString() ,
Millisecond.class);
final TimeSeriesCollection dataset = new TimeSeriesCollection
(this.series);
final JFreeChart chart = createChart(dataset);
chartPanel = new ChartPanel(chart);
BorderLayout borderLayout = new BorderLayout();
this.setLayout(borderLayout);
this.add(chartPanel);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
return this;
}
public void setTelemetry(BitSet bitSet){
BitSetAndTime bitSetAndTime = new BitSetAndTime(bitSet, new
Millisecond());
telemetryStorage.add(bitSetAndTime);
Object oResult = TelemetryExtractor.getTelemetryValue(bitSet,
this.telemetryGroup, this.genericTelemetryType);
if (oResult instanceof Integer) {
series.addOrUpdate(bitSetAndTime.getMS(), ((Integer)
oResult).intValue());
} else if (oResult instanceof Double){
series.addOrUpdate(bitSetAndTime.getMS(), ((Double)
oResult).doubleValue());
}
}
private JFreeChart createChart(final XYDataset dataset) {
final JFreeChart result = ChartFactory.createTimeSeriesChart(
this.title,
"Time",
"Value",
dataset,
true,
true,
false
);
final XYPlot plot = result.getXYPlot();
ValueAxis axis = plot.getDomainAxis();
axis.setAutoRange(true);
axis.setFixedAutoRange(60000.0); // 60 seconds
axis = plot.getRangeAxis();
axis.setRange(0.0, 200.0);
return result;
}
}