@Override public void processNext(final InputRow row, final int distinctCount, final FilterOutcomes outcomes) { final int nextIndex = _consumerIndex + 1; if (nextIndex >= _consumers.size()) { // finished! _resultRecords.add(row); _resultOutcomes.add(outcomes); return; } final ConsumeRowHandlerDelegate subDelegate = new ConsumeRowHandlerDelegate(_consumers, row, nextIndex, outcomes, _resultRecords, _resultOutcomes); subDelegate.consume(); }
public ConsumeRowResult consume() { final RowProcessingConsumer consumer = _consumers.get(_consumerIndex); final boolean process = consumer.satisfiedForConsume(_outcomes, _row); if (process) { if (consumer.isConcurrent()) { consumer.consume(_row, 1, _outcomes, this); } else { synchronized (consumer) { consumer.consume(_row, 1, _outcomes, this); } } } else { // jump to the next step processNext(_row, 1, _outcomes); } return new ConsumeRowResult(_resultRecords, _resultOutcomes); }
/** * Consumes a {@link InputRow} by applying all transformations etc. to it, * returning a result of transformed rows and their {@link FilterOutcomes}s. * * @param row * @return */ public ConsumeRowResult consumeRow(final InputRow row) { final FilterOutcomes outcomes = new FilterOutcomesImpl(_alwaysSatisfiedOutcomes); final ConsumeRowHandlerDelegate delegate = new ConsumeRowHandlerDelegate(_consumers, row, 0, outcomes); return delegate.consume(); }