/**
   * Evaluates this flow assembly
   *
   * @param evaluationContext the evaluation context, stratum, iteration, rule number
   * @return true if new inferences were stored, false otherwise
   */
  public boolean evaluate(EvaluationContext evaluationContext) {
    this.distributedFileSystemManager = new DistributedFileSystemManager(mConfiguration);

    String flowIdentificator =
        "_"
            + evaluationContext.getStratumNumber()
            + "_"
            + evaluationContext.getIterationNumber()
            + "_"
            + evaluationContext.getRuleNumber();
    String resultName =
        mConfiguration.resultsName != null ? mConfiguration.resultsName : "inference";
    if (ruleStreams.getHeadStream().getPredicate() != null || !mConfiguration.doPredicateIndexing) {
      path =
          distributedFileSystemManager.getInferencesPath(
              ruleStreams.getHeadStream(), resultName, flowIdentificator);
    } else {
      path = distributedFileSystemManager.getTempInferencesPath(resultName, flowIdentificator);
    }

    try {
      return processFlow(resultName, flowIdentificator, path);
    } catch (IOException e) {
      logger.error("io exception creating flow", e);
      throw new RuntimeException("io exception creating flow", e);
    }
  }