protected AbstractRowProcessingConsumer(final AnalysisJob analysisJob, final AnalysisListener analysisListener, final HasComponentRequirement outcomeSinkJob, final InputColumnSinkJob inputColumnSinkJob, final SourceColumnFinder sourceColumnFinder) { this(analysisJob, analysisListener, outcomeSinkJob, buildSourceJobsOfInputColumns(inputColumnSinkJob, sourceColumnFinder)); }
@Override public boolean isResultProducer() { return getComponent() instanceof HasAnalyzerResult; }
/** * Ensures that just a single outcome is satisfied */ @Override public final boolean satisfiedForConsume(final FilterOutcomes outcomes, final InputRow row) { final boolean satisfiedOutcomesForConsume = satisfiedOutcomesForConsume(_hasComponentRequirement, row, outcomes); if (!satisfiedOutcomesForConsume) { return false; } return satisfiedInputsForConsume(row, outcomes); }
@Override public final void consume(final InputRow row, final int distinctCount, final FilterOutcomes outcomes, final RowProcessingChain chain) { try { consumeInternal(row, distinctCount, outcomes, chain); } catch (final RuntimeException e) { final ComponentJob componentJob = getComponentJob(); if (_analysisListener == null) { logger.error("Error occurred in component '" + componentJob + "' and no AnalysisListener is available", e); throw e; } else { _analysisListener.errorInComponent(_analysisJob, componentJob, row, e); } } }
protected AbstractRowProcessingConsumer(final AnalysisJob analysisJob, final AnalysisListener analysisListener, final HasComponentRequirement outcomeSinkJob, final Set<HasComponentRequirement> sourceJobsOfInputColumns) { _analysisJob = analysisJob; _analysisListener = analysisListener; _hasComponentRequirement = outcomeSinkJob; _sourceJobsOfInputColumns = sourceJobsOfInputColumns; _outputDataStreams = new ArrayList<>(2); _alwaysSatisfiedForConsume = isAlwaysSatisfiedForConsume(); _publishersRegisteredCount = new AtomicInteger(0); _publishersInitializedCount = new AtomicInteger(0); _publishersClosedCount = new AtomicInteger(0); }
private boolean satisfiedInputsForConsume(final InputRow row, final FilterOutcomes outcomes) { if (_alwaysSatisfiedForConsume) { return _alwaysSatisfiedForConsume; } final ComponentRequirement componentRequirement = _hasComponentRequirement.getComponentRequirement(); if (componentRequirement == null) { for (final Object sourceJobsOfInputColumn : _sourceJobsOfInputColumns) { // if any of the source jobs is satisfied, then continue if (sourceJobsOfInputColumn instanceof HasComponentRequirement) { final HasComponentRequirement hasComponentRequirement = (HasComponentRequirement) sourceJobsOfInputColumn; final boolean satisfiedOutcomesForConsume = satisfiedOutcomesForConsume(hasComponentRequirement, row, outcomes); if (satisfiedOutcomesForConsume) { return true; } } } return false; } return true; }
/** * Ensures that ALL outcomes are available */ @Override public final boolean satisfiedForFlowOrdering(final FilterOutcomes outcomes) { if (isAlwaysSatisfiedRequirement()) { return true; } final ComponentRequirement componentRequirement = _hasComponentRequirement.getComponentRequirement(); if (componentRequirement == null) { return true; } final Collection<FilterOutcome> dependencies = componentRequirement.getProcessingDependencies(); for (final FilterOutcome filterOutcome : dependencies) { final boolean contains = outcomes.contains(filterOutcome); if (!contains) { return false; } } return componentRequirement.isSatisfied(null, outcomes); }
@Override public void registerOutputDataStream(final OutputDataStreamJob outputDataStreamJob, final RowProcessingPublisher publisherForOutputDataStream) { final HasOutputDataStreams component = (HasOutputDataStreams) getComponent(); _outputDataStreams .add(new ActiveOutputDataStream(outputDataStreamJob, publisherForOutputDataStream, component)); }