code: @Override
    public List<Pair<DatasetDescriptor, DatasetDescriptor>> getResolvingDatasetDescriptors(Config userConfig)
        throws IOException, SpecNotFoundException, JobTemplate.TemplateException {
      Config config = this.getResolvedFlowConfig(userConfig).resolve(ConfigResolveOptions.defaults().setAllowUnresolved(true));
  
      if (!config.hasPath(DatasetDescriptorConfigKeys.FLOW_EDGE_INPUT_DATASET_DESCRIPTOR_PREFIX)
          || !config.hasPath(DatasetDescriptorConfigKeys.FLOW_EDGE_OUTPUT_DATASET_DESCRIPTOR_PREFIX)) {
        throw new IOException("Flow template must specify at least one input/output dataset descriptor");
      }
  
      int i = 0;
      String inputPrefix = Joiner.on(".").join(DatasetDescriptorConfigKeys.FLOW_EDGE_INPUT_DATASET_DESCRIPTOR_PREFIX, Integer.toString(i));
      List<Pair<DatasetDescriptor, DatasetDescriptor>> result = Lists.newArrayList();
      while (config.hasPath(inputPrefix)) {
        try {
          Config inputDescriptorConfig = config.getConfig(inputPrefix);
          DatasetDescriptor inputDescriptor = getDatasetDescriptor(inputDescriptorConfig);
          String outputPrefix = Joiner.on(".")
              .join(DatasetDescriptorConfigKeys.FLOW_EDGE_OUTPUT_DATASET_DESCRIPTOR_PREFIX, Integer.toString(i));
          Config outputDescriptorConfig = config.getConfig(outputPrefix);
          DatasetDescriptor outputDescriptor = getDatasetDescriptor(outputDescriptorConfig);
  
          if (isResolvable(userConfig, inputDescriptor, outputDescriptor)) {
            result.add(ImmutablePair.of(inputDescriptor, outputDescriptor));
          }
        } catch (ReflectiveOperationException e) {
          //Cannot instantiate I/O dataset descriptor due to missing config; skip and try the next one.
        }
        inputPrefix = Joiner.on(".").join(DatasetDescriptorConfigKeys.FLOW_EDGE_INPUT_DATASET_DESCRIPTOR_PREFIX, Integer.toString(++i));
      }
      return result;
    }
docs: Generate the input/output dataset descriptors for the {@link FlowTemplate}.
  @param userConfig
  @return a List of Input/Output DatasetDescriptors that resolve this {@link FlowTemplate}.