use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class SpreadsheetExportJob method performExport.
/**
* {@inheritDoc}
*/
@Override
protected void performExport(final IProgressMonitor monitor, final PrintStream out) throws Exception {
// Item header
for (ModelItem item : model.getItems()) printItemInfo(out, item);
out.println();
// Spreadsheet Header
out.print("# " + Messages.TimeColumn);
for (ModelItem item : model.getItems()) out.print(Messages.Export_Delimiter + item.getName() + " " + formatter.getHeader());
out.println();
// Create speadsheet interpolation
final List<ValueIterator> iters = new ArrayList<>();
for (ModelItem item : model.getItems()) {
monitor.subTask(NLS.bind("Fetching data for {0}", item.getName()));
iters.add(createValueIterator(item));
}
final SpreadsheetIterator sheet = new SpreadsheetIterator(iters.toArray(new ValueIterator[iters.size()]));
// Dump the spreadsheet lines
long line_count = 0;
while (sheet.hasNext() && !monitor.isCanceled()) {
final Instant time = sheet.getTime();
final VType[] line = sheet.next();
out.print(TimestampHelper.format(time));
for (int i = 0; i < line.length; ++i) out.print(Messages.Export_Delimiter + formatter.format(line[i]));
out.println();
++line_count;
if ((line_count % PROGRESS_UPDATE_LINES) == 0)
monitor.subTask(NLS.bind("Wrote {0} samples", line_count));
if (monitor.isCanceled())
break;
}
}
use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class PVItem method doScan.
/**
* Scan, i.e. add 'current' value to live samples
*/
private void doScan() {
final VType value = current_value;
Activator.getLogger().log(Level.FINE, "PV {0} scans {1}", new Object[] { getName(), value });
if (value == null)
logDisconnected();
else
// Transform value to have 'now' as time stamp
samples.addLiveSample(VTypeHelper.transformTimestampToNow(value));
}
use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class FormulaInput method next.
/**
* Iterate over the samples of the input's ModelItem
* @return Next value or <code>null</code>
* @throws Exception
*/
public VType next() throws Exception {
if (index < 0)
return null;
final VType result;
final PlotSamples samples = item.getSamples();
if (!samples.getLock().tryLock(10, TimeUnit.SECONDS))
throw new TimeoutException("Cannot lock " + samples);
try {
if (index < samples.size())
result = samples.get(index++).getVType();
else {
result = null;
index = -1;
}
} finally {
samples.getLock().unlock();
}
return result;
}
use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class PVFactoryTest method testPVFactory.
@Test
public void testPVFactory() throws Exception {
final RuntimePV pv = PVFactory.getPV("loc://test(3.14)");
try {
// vtype.pv uses the base name, without initializer
assertThat(pv.getName(), equalTo("loc://test"));
final CountDownLatch updates = new CountDownLatch(1);
final AtomicReference<Number> number = new AtomicReference<>();
RuntimePVListener listener = new RuntimePVListener() {
@Override
public void valueChanged(RuntimePV pv, VType value) {
System.out.println(pv.getName() + " = " + value);
number.set(VTypeUtil.getValueNumber(value));
updates.countDown();
}
};
pv.addListener(listener);
updates.await();
assertThat(number.get(), equalTo(3.14));
} finally {
PVFactory.releasePV(pv);
}
}
use of org.diirt.vtype.VType in project org.csstudio.display.builder by kasemir.
the class ArrayPVDispatcher method updateArrayFromElements.
/**
* Update the array PV with the current value of all element PVs
*/
private void updateArrayFromElements() throws Exception {
final List<RuntimePV> pvs = element_pvs.get();
final int N = pvs.size();
if (N == 1) {
// Is 'array' really a scalar?
final VType array = array_pv.read();
if (array instanceof VNumber || array instanceof VString) {
array_pv.write(pvs.get(0).read());
return;
}
}
if (is_string) {
final String[] value = new String[N];
for (int i = 0; i < N; ++i) value[i] = VTypeUtil.getValueString(pvs.get(i).read(), false);
array_pv.write(value);
} else {
final double[] value = new double[N];
for (int i = 0; i < N; ++i) value[i] = VTypeUtil.getValueNumber(pvs.get(i).read()).doubleValue();
array_pv.write(value);
}
}
Aggregations