public void generateSplit(int testPercent, String filename) {
    // Run the precycle to load the case base
    LogFactory.getLog(this.getClass()).info("Running precycle()");
    CBRCaseBase caseBase = null;
    try {
      caseBase = app.preCycle();
    } catch (ExecutionException e) {
      org.apache.commons.logging.LogFactory.getLog(this.getClass()).error(e);
    }

    if (!(caseBase instanceof jcolibri.casebase.CachedLinealCaseBase))
      LogFactory.getLog(this.getClass())
          .warn("Evaluation should be executed using a cached case base");

    ArrayList originalCases = new ArrayList(caseBase.getCases());

    ArrayList querySet = new ArrayList();
    ArrayList caseBaseSet = new ArrayList();

    // Split the case base
    splitCaseBase(originalCases, querySet, caseBaseSet, testPercent);

    save(querySet, filename);
  }
  public void HoldOutfromFile(String file) {
    try {
      // Obtain the time
      long t = (new Date()).getTime();
      int numberOfCycles = 0;

      // Run the precycle to load the case base
      LogFactory.getLog(this.getClass()).info("Running precycle()");
      CBRCaseBase caseBase = app.preCycle();

      if (!(caseBase instanceof jcolibri.casebase.CachedLinealCaseBase))
        LogFactory.getLog(this.getClass())
            .warn("Evaluation should be executed using a cached case base");

      ArrayList originalCases = new ArrayList(caseBase.getCases());
      ArrayList querySet = new ArrayList();
      ArrayList caseBaseSet = new ArrayList();

      // Split the case base
      splitCaseBaseFromFile(originalCases, querySet, caseBaseSet, file);

      int totalSteps = querySet.size();
      jcolibri.util.ProgressController.init(
          getClass(), "Same Split - Hold Out Evaluation", totalSteps);

      // Clear the caseBase
      caseBase.forgetCases(originalCases);

      // Set the cases that acts as case base in this repetition
      caseBase.learnCases(caseBaseSet);

      // Run cycle for each case in querySet
      for (Object o : querySet) {
        CBRCase c = (CBRCase) o;
        // Run the cycle
        LogFactory.getLog(this.getClass()).info("Running cycle() " + numberOfCycles);
        app.cycle(c);

        jcolibri.util.ProgressController.step(getClass());
        numberOfCycles++;
      }

      jcolibri.util.ProgressController.finish(getClass());

      // Revert case base to original state
      caseBase.forgetCases(originalCases);
      caseBase.learnCases(originalCases);

      // Run the poscycle to finish the application
      LogFactory.getLog(this.getClass()).info("Running postcycle()");
      app.postCycle();

      t = (new Date()).getTime() - t;

      // Obtain and complete the evaluation result
      report.setTotalTime(t);
      report.setNumberOfCycles(numberOfCycles);

    } catch (Exception e) {
      LogFactory.getLog(this.getClass()).error(e);
    }
  }