code: 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, new Predicate<InputColumn<?>>() {
              @Override
              public Boolean eval(InputColumn<?> 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);
                  if (sourceComponents.contains(componentBuilder)) {
                      // exclude columns that depend
                      return false;
                  }
  
                  return true;
              }
          });
  
          return result;
      }
docs: Gets all available {@link InputColumn}s of a particular type to map to a
  particular {@link ComponentBuilder}
  
  @param componentBuilder
  @param dataType
  @return