@Override public void dataItemsChanged(DataItemsChangeEvent e) { if (chart.isDirty()) { // full repaint required, don't need to send incremental updates return; } IncrementalUpdateType updateType = null; switch (e.getOperation()) { case ADD: updateType = IncrementalUpdateType.ADD; break; case REMOVE: updateType = IncrementalUpdateType.REMOVE; break; case UPDATE: updateType = IncrementalUpdateType.UPDATE; break; case REFRESH: dataSet.getDataProvider().removeChangeListener(this); chart.forgetChangedItems(); chart.drawChart(); break; } if (updateType != null && CollectionUtils.isNotEmpty(e.getItems())) { chart.addChangedItems(updateType, dataSet, e.getItems()); } }