@Override
  public HybridRecommendationModel buildRecommendationModel(
      DatasetLoader<? extends Rating> datasetLoader)
      throws CannotLoadRatingsDataset, CannotLoadContentDataset, CannotLoadUsersDataset {
    ContentBasedRecommender<Object, Object> contentBasedAlgorithm =
        (ContentBasedRecommender<Object, Object>) getParameterValue(CONTENT_BASED_TECHNIQUE);

    RecommendationModelBuildingProgressListener contentBasedListener =
        (String actualJob, int percent, long remainingSeconds) -> {
          ContentWeightCollaborative.this.fireBuildingProgressChangedEvent(
              actualJob, percent / 2, -1);
        };
    contentBasedAlgorithm.addRecommendationModelBuildingProgressListener(contentBasedListener);
    Object contentBasedModel = contentBasedAlgorithm.buildRecommendationModel(datasetLoader);

    CollaborativeRecommender collaborativeFilteringTechnique =
        (CollaborativeRecommender) getParameterValue(COLLABORATIVE_TECHNIQUE);
    RecommendationModelBuildingProgressListener collaborativeListener =
        (String actualJob, int percent, long remainingSeconds) -> {
          ContentWeightCollaborative.this.fireBuildingProgressChangedEvent(
              actualJob, percent / 2 + 50, -1);
        };
    collaborativeFilteringTechnique.addRecommendationModelBuildingProgressListener(
        collaborativeListener);
    Object collaborativeModel =
        collaborativeFilteringTechnique.buildRecommendationModel(datasetLoader);

    return new HybridRecommendationModel(contentBasedModel, collaborativeModel);
  }