Hi,
after see this Vaadin Charts Demo
SplineUpdatingEachSecond
I implemented my custom chart with DataSeriesItem taken from my DB.
See code below. It seems to work fine but the line drawn after add a new DataSeriesItem is incorrect as shown in the attached screenshoot. It seems that a new series is drawn…help me please!!!
public class SingleSpeedSiteChart extends Chart {
private static final long serialVersionUID = 7050234660637973663L;
private MisurazioniService service = new MisurazioniService();
Date intervalDate = DateUtilities.dateAdd(new Date(), -2);
public SingleSpeedSiteChart(final MisurazioneSito sito) {
super(ChartType.SPLINE);
getConfiguration().setTitle("");
getConfiguration().getChart().setType(ChartType.SPLINE);
getConfiguration().getChart().setZoomType(ZoomType.X);
Axis xAxis = getConfiguration().getxAxis();
xAxis.setType(AxisType.DATETIME);
YAxis yAxis = getConfiguration().getyAxis();
yAxis.setTitle("");
Labels labels = new Labels();
labels.setFormatter("this.value +'sec'");
yAxis.setLabels(labels);
yAxis.setMin(0);
Tooltip tooltip = new Tooltip();
tooltip.setShared(true);
tooltip.setEnabled(true);
tooltip.setCrosshairs(true);
tooltip.setxDateFormat("%d.%m.%Y %H:%M");
getConfiguration().setTooltip(tooltip);
getConfiguration().getLegend().setEnabled(false);
final DataSeries series = new DataSeries();
series.setName(sito.getNote());
JPAContainer<Misuration> dati = /* call get method that search data into db*/
for (Iterator iterator = dati.getItemIds().iterator(); iterator.hasNext();) {
Date date = (Date)iterator.next();
Misurationmis = (Misuration) dati.getItem(new MisurationPK(sito.getId(), date)).getEntity();
DataSeriesItem item;
item = new DataSeriesItem(mis.getDate(), mis.getSpeedInSecond());
series.add(item);
}
Thread randomDataGenerator = new Thread() {
@Override
public void run() {
while (true) {
try {
sleep(30000);
if (isConnectorEnabled()) {
getSession().lock();
try {
Date data = DateUtilities.dateAddSec(new Date(), -30);
if(series.size() > 0){
DataSeriesItem itemlast = series.get(series.size()-1);
long timestamp = (Long) itemlast.getX();
data = new Date(timestamp);
}
JPAContainer<Misuration> dati = /* call get method that search new data into db*/
for (Iterator iterator = dati.getItemIds().iterator(); iterator.hasNext();) {
Date date = (Date)iterator.next();
Misuration mis = (Misuration) dati.getItem(new MisurationPK(sito.getId(), date)).getEntity();
DataSeriesItem item;
item = new DataSeriesItem(mis.getDate(), mis.getSpeedInSecond());
item.setMarker(new Marker(false));
series.add(item, true, true);
}
} finally {
getSession().unlock();
}
} else {
break;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
randomDataGenerator.start();
getConfiguration().addSeries(series);
drawChart(getConfiguration());
}
}