// in MainApp.java Compute compute = new Compute(); compute.setMainApp(this);
@Override public Row<Measurement> next() { if (!hasNext()) throw new NoSuchElementException(); Row<Measurement> row = m_input.next(); for (Calculation calc : m_resultDescriptor.getCalculations().values()) { double v = calc.getCalculationFunction().apply(getValues(row, calc.getArgs())); row.addElement(new Measurement(row.getTimestamp(), row.getResource(), calc.getLabel(), v)); } return row; }
public Results<Measurement> process(Iterator<Row<Sample>> samples) { checkNotNull(samples, "samples argument"); // Build chain of iterators to process results as a stream Rate rate = new Rate(samples, m_resultDescriptor.getSourceNames()); PrimaryData primaryData = new PrimaryData(m_resource, m_start.minus(m_resolution), m_end, m_resultDescriptor, rate); Aggregation aggregation = new Aggregation(m_resource, m_start, m_end, m_resultDescriptor, m_resolution, primaryData); Compute compute = new Compute(m_resultDescriptor, aggregation); Export exports = new Export(m_resultDescriptor.getExports(), compute); Results<Measurement> measurements = new Results<>(); for (Row<Measurement> row : exports) { measurements.addRow(row); } return measurements; }
private double[] getValues(Row<Measurement> row, String[] names) { double[] values = new double[names.length]; for (int i = 0; i < names.length; i++) { String name = names[i]; Optional<Double> d = parseDouble(name); values[i] = d.isPresent() ? d.get() : checkNotNull(row.getElement(name), "Missing measurement; Upstream iterator is bugged").getValue(); } return values; }