@Override public Table getRowProcessingTable(final ComponentJob componentJob) { final SourceColumnFinder sourceColumnFinder = new SourceColumnFinder(); sourceColumnFinder.addSources(_job); final Table[] tables = _publishers.getTables(sourceColumnFinder, componentJob); if (tables == null || tables.length == 0) { return null; } // this should always work for component, since they only pertain to a // single table return tables[0]; } }
public Table getOriginatingTable(final InputColumn<?> inputColumn) { final SourceColumnFinder finder = new SourceColumnFinder(); finder.addSources(this); return finder.findOriginatingTable(inputColumn); }
/** * Finds all source jobs/components for a particular job/component. This * method uses {@link Object} as types because input and output can be quite * polymorphic. Typically {@link InputColumnSinkJob}, * {@link InputColumnSourceJob}, {@link HasComponentRequirement} and * {@link OutcomeSourceJob} implementations are used. * * @param job * typically some {@link InputColumnSinkJob} * @return a list of jobs/components that are a source of this job. */ public Set<Object> findAllSourceJobs(final Object job) { final Set<Object> result = new HashSet<>(); findAllSourceJobs(job, result); return result; }
public TransformerComponentBuilder<?> getOriginatingTransformer(final InputColumn<?> outputColumn) { final SourceColumnFinder finder = new SourceColumnFinder(); finder.addSources(this); final InputColumnSourceJob source = finder.findInputColumnSource(outputColumn); if (source instanceof TransformerComponentBuilder) { return (TransformerComponentBuilder<?>) source; } return null; }
/** * Finds the available input columns (source or transformed) that match the * given data type specification. * * @param dataType * the data type to look for * @return a list of matching input columns */ public List<InputColumn<?>> getAvailableInputColumns(final Class<?> dataType) { final SourceColumnFinder finder = new SourceColumnFinder(); finder.addSources(this); return finder.findInputColumns(dataType); }
/** * Gets all available {@link InputColumn}s of a particular type to map to a * particular {@link ComponentBuilder} * * @param componentBuilder * @param dataType * @return */ public List<InputColumn<?>> getAvailableInputColumns(final ComponentBuilder componentBuilder, final Class<?> dataType) { List<InputColumn<?>> result = getAvailableInputColumns(dataType); final SourceColumnFinder finder = new SourceColumnFinder(); finder.addSources(this); result = CollectionUtils.filter(result, inputColumn -> { if (inputColumn.isPhysicalColumn()) { return true; } final InputColumnSourceJob origin = finder.findInputColumnSource(inputColumn); if (origin == null) { return true; } if (origin == componentBuilder) { // exclude columns from the component itself return false; } final Set<Object> sourceComponents = finder.findAllSourceJobs(origin); return !sourceComponents.contains(componentBuilder); }); return result; }
final SourceColumnFinder sourceColumnFinder = new SourceColumnFinder(); sourceColumnFinder.addSources(ajb); final Table originatingTable = sourceColumnFinder.findOriginatingTable(tjb.getOutputColumns().get(0)); tables.remove(originatingTable); for (final Table otherTable : tables) { sourceColumnFinder.findAllSourceJobs(tjb).stream().filter(o -> o instanceof HasFilterOutcomes) .findAny().isPresent();
final SourceColumnFinder sourceColumnFinder = new SourceColumnFinder(); sourceColumnFinder.addSources(this); final Set<Object> excludedSet = sourceColumnFinder.findAllSourceJobs(defaultRequirement);
final InputColumn<?>[] inputColumns = ((InputColumnSinkJob) job).getInput(); for (final InputColumn<?> inputColumn : inputColumns) { final InputColumnSourceJob source = findInputColumnSource(inputColumn); if (source != null) { final boolean added = result.add(source); if (added) { findAllSourceJobs(source, result); final HasComponentRequirement hasComponentRequirement = (HasComponentRequirement) job; final ComponentRequirement requirement = hasComponentRequirement.getComponentRequirement(); findAllSourceJobs(requirement, result); final Collection<FilterOutcome> requirements = getProcessingDependencies((ComponentRequirement) job); for (final FilterOutcome outcome : requirements) { final HasFilterOutcomes source = findOutcomeSource(outcome); if (source != null) { final boolean added = result.add(source); if (added) { findAllSourceJobs(source, result);
private void addSources(final Collection<?> sources) { addSources(sources.toArray()); }
public Table findOriginatingTable(final FilterOutcome requirement) { return findOriginatingTable(requirement, new HashSet<>()); }
logger.warn("InputColumn sink had a null-column element!"); } else { final Table table = findOriginatingTable(col, resolvedSet); if (table != null) { result.add(table); final HasComponentRequirement hasComponentRequirement = (HasComponentRequirement) source; final ComponentRequirement componentRequirement = hasComponentRequirement.getComponentRequirement(); final Collection<FilterOutcome> requirements = getProcessingDependencies(componentRequirement); for (final FilterOutcome outcome : requirements) { final Table table = findOriginatingTable(outcome, resolvedSet); if (table != null) { result.add(table);
public Set<Column> findOriginatingColumns(final FilterOutcome requirement) { final HasFilterOutcomes source = findOutcomeSource(requirement); return findOriginatingColumnsOfSource(source); }
final InputColumnSourceJob source = scf.findInputColumnSource(inputColumn); if (source != null) { addNodes(graph, scf, linkFactory, source, recurseCount); final HasFilterOutcomes source = scf.findOutcomeSource((FilterOutcome) vertex); if (source != null) { addNodes(graph, scf, linkFactory, source, recurseCount); for (final FilterOutcome filterOutcome : filterOutcomes) { final HasFilterOutcomes source = scf.findOutcomeSource(filterOutcome); if (source != null) { addNodes(graph, scf, linkFactory, source, recurseCount); final InputColumn<?> inputColumn = (InputColumn<?>) vertex; if (inputColumn.isVirtualColumn()) { final InputColumnSourceJob source = scf.findInputColumnSource(inputColumn); if (source != null) { addNodes(graph, scf, linkFactory, source, recurseCount);
private Table findOriginatingTable(final FilterOutcome requirement, final Set<Object> resolvedSet) { final HasFilterOutcomes source = findOutcomeSource(requirement); if (!resolvedSet.add(source)) { logger.debug(LOG_MESSAGE_RECURSIVE_TRAVERSAL); return null; } return findOriginatingTableOfSource(source, resolvedSet); }
private Set<Column> findOriginatingColumnsOfInputColumn(final InputColumn<?> inputColumn) { final Set<Column> cachedOriginatingColumns = originatingColumnsOfInputColumnCache.get(inputColumn); if (cachedOriginatingColumns != null) { return cachedOriginatingColumns; } final Set<Column> originatingColumns = new HashSet<>(); if (inputColumn != null) { if (inputColumn.isPhysicalColumn()) { originatingColumns.add(inputColumn.getPhysicalColumn()); } else { final InputColumnSourceJob source = findInputColumnSource(inputColumn); originatingColumns.addAll(findOriginatingColumnsOfSource(source)); } } originatingColumnsOfInputColumnCache.put(inputColumn, originatingColumns); return originatingColumns; }
private Set<Column> findOriginatingColumnsOfSource(final Object source) { final Set<Column> cachedOriginatingColumns = originatingColumnsOfSourceCache.get(source); if (cachedOriginatingColumns != null) { return cachedOriginatingColumns; } final Set<Column> originatingColumns = new HashSet<>(); if (source != null) { if (source instanceof InputColumnSinkJob) { final InputColumn<?>[] input = ((InputColumnSinkJob) source).getInput(); if (input != null) { for (final InputColumn<?> inputColumn : input) { originatingColumns.addAll(findOriginatingColumnsOfInputColumn(inputColumn)); } } } if (source instanceof HasComponentRequirement) { final HasComponentRequirement hasComponentRequirement = (HasComponentRequirement) source; final ComponentRequirement componentRequirement = hasComponentRequirement.getComponentRequirement(); final Collection<FilterOutcome> requirements = getProcessingDependencies(componentRequirement); for (final FilterOutcome outcome : requirements) { originatingColumns.addAll(findOriginatingColumnsOfOutcome(outcome)); } } } originatingColumnsOfSourceCache.put(source, originatingColumns); return originatingColumns; }
private Table findOriginatingTable(final InputColumn<?> inputColumn, final Set<Object> resolvedSet) { if (!resolvedSet.add(inputColumn)) { logger.debug(LOG_MESSAGE_RECURSIVE_TRAVERSAL); return null; } if (inputColumn == null) { logger.warn("InputColumn was null, no originating table found"); return null; } if (inputColumn.isPhysicalColumn()) { return inputColumn.getPhysicalColumn().getTable(); } final InputColumnSourceJob inputColumnSource = findInputColumnSource(inputColumn); if (!resolvedSet.add(inputColumnSource)) { logger.debug(LOG_MESSAGE_RECURSIVE_TRAVERSAL); return null; } return findOriginatingTableOfSource(inputColumnSource, resolvedSet); }
final InputColumnSourceJob originalSourceJob = sourceColumnFinder.findInputColumnSource(originalInputColumn); if (originalSourceJob == null) { throw new IllegalStateException(
private InputColumn<?>[] getLocalInputColumns(final SourceColumnFinder sourceColumnFinder, final Table table, final InputColumn<?>[] inputColumns) { if (table == null || inputColumns == null || inputColumns.length == 0) { return new InputColumn<?>[0]; } final List<InputColumn<?>> result = new ArrayList<>(); for (final InputColumn<?> inputColumn : inputColumns) { final Set<Column> sourcePhysicalColumns = sourceColumnFinder.findOriginatingColumns(inputColumn); for (final Column physicalColumn : sourcePhysicalColumns) { if (table.equals(physicalColumn.getTable())) { result.add(inputColumn); break; } } } return result.toArray(new InputColumn<?>[result.size()]); }