/** {@inheritDoc} */ @SuppressWarnings("nls") @Override public void pvChanged(final PVReaderEvent<List<VType>> event) { final PVReader<List<VType>> pv = event.getPvReader(); // Check for error final Exception error = pv.lastException(); if (error != null) Activator.getLogger().log(Level.FINE, "PV " + pv.getName() + " error", error); final List<VType> values = pv.getValue(); if (values == null) { // No current value current_value = null; // In 'monitor' mode, mark in live sample buffer if (period <= 0) logDisconnected(); return; } else { boolean added = false; for (VType value : values) { // Cache most recent for 'scanned' operation current_value = value; // In 'monitor' mode, add to live sample buffer if (period <= 0) { Activator.getLogger() .log(Level.FINE, "PV {0} received {1}", new Object[] {getName(), value}); samples.addLiveSample(value); added = true; } } if (automaticRefresh && added && samples.isHistoryRefreshNeeded(model.getStartTime(), model.getEndTime())) { model.fireItemRefreshRequested(this); } } }
/** Add one(!) 'disconnected' sample */ private void logDisconnected() { synchronized (samples) { final int size = samples.getSize(); if (size > 0) { final String last = VTypeHelper.getMessage(samples.getSample(size - 1).getValue()); // Does last sample already have 'disconnected' status? if (Messages.Model_Disconnected.equals(last)) return; } samples.addLiveSample(new PlotSample(Messages.LiveData, Messages.Model_Disconnected)); } }
/** @param value Value to log with 'now' as time stamp */ private void logValueAsNow(final VType value) { if (value == null) logDisconnected(); else // Transform value to have 'now' as time stamp samples.addLiveSample(VTypeHelper.transformTimestampToNow(value)); }