public ConsumerCreation getOrCreateConsumer(final RowProcessingPublisher publisher, final ComponentJob componentJob, final InputColumn<?>[] inputColumns) { RowProcessingConsumer consumer = _consumers.get(componentJob); final boolean create = consumer == null; if (create) { final Component component = (Component) componentJob.getDescriptor().newInstance(); if (componentJob instanceof AnalyzerJob) { final AnalyzerJob analyzerJob = (AnalyzerJob) componentJob; final Analyzer<?> analyzer = (Analyzer<?>) component; consumer = new AnalyzerConsumer(analyzer, analyzerJob, inputColumns, publisher); } else if (componentJob instanceof TransformerJob) { final TransformerJob transformerJob = (TransformerJob) componentJob; final Transformer transformer = (Transformer) component; consumer = new TransformerConsumer(transformer, transformerJob, inputColumns, publisher); } else if (componentJob instanceof FilterJob) { final FilterJob filterJob = (FilterJob) componentJob; final Filter<?> filter = (Filter<?>) component; consumer = new FilterConsumer(filter, filterJob, inputColumns, publisher); } else { throw new UnsupportedOperationException("Unsupported component job type: " + componentJob); } _consumers.put(componentJob, consumer); } consumer.registerPublisher(publisher); return new ConsumerCreation(consumer, create); }