code: @Override
      @SuppressWarnings("unchecked")
      public TemporalDataModelIF<Long, Long> run(final RUN_OPTIONS opts) throws RecommenderException {
          if (isAlreadyRecommended()) {
              return null;
          }
  
          File trainingFile = new File(getProperties().getProperty(RecommendationRunner.TRAINING_SET));
          File testFile = new File(getProperties().getProperty(RecommendationRunner.TEST_SET));
  //        EventDAO base = new TextEventDAO(trainingFile, Formats.delimitedRatings("\t"));
          TextEntitySource tesTraining = new TextEntitySource();
          tesTraining.setFile(trainingFile.toPath());
          tesTraining.setFormat(org.lenskit.data.dao.file.Formats.delimitedRatings("\t"));
          StaticDataSource sourceTraining = new StaticDataSource("training");
          sourceTraining.addSource(tesTraining);
          DataAccessObject base = sourceTraining.get();
  //        EventDAO test = new TextEventDAO(testFile, Formats.delimitedRatings("\t"));
          TextEntitySource tesTest = new TextEntitySource();
          tesTest.setFile(testFile.toPath());
          tesTest.setFormat(org.lenskit.data.dao.file.Formats.delimitedRatings("\t"));
          StaticDataSource sourceTest = new StaticDataSource("test");
          sourceTest.addSource(tesTest);
          DataAccessObject test = sourceTest.get();
          return runLenskitRecommender(opts, base, test);
      }
docs: Runs the recommender.
  
  @param opts see
  {@link net.recommenders.rival.recommend.frameworks.AbstractRunner.RUN_OPTIONS}
  @return see
  {@link #run(net.recommenders.rival.recommend.frameworks.AbstractRunner.RUN_OPTIONS, net.recommenders.rival.core.TemporalDataModelIF, net.recommenders.rival.core.TemporalDataModelIF)}
  @throws RecommenderException when the recommender is instantiated
  incorrectly or breaks otherwise.