public double getActivityTotalScore() {
   double score = 0.0;
   for (ActivityScoring scoringFunction : activityScoringFunctions) {
     double contribution = scoringFunction.getScore();
     //			if (log.isTraceEnabled()) {
     //				log.trace("Contribution of activity scoring function: " +
     // scoringFunction.getClass().getName() + " is: " + contribution);
     //			}
     score += contribution;
   }
   return score;
 }
 @Override
 public final void handleActivity(Activity activity) {
   double startTime = activity.getStartTime();
   double endTime = activity.getEndTime();
   if (startTime == Time.UNDEFINED_TIME && endTime != Time.UNDEFINED_TIME) {
     for (ActivityScoring activityScoringFunction : activityScoringFunctions) {
       activityScoringFunction.handleFirstActivity(activity);
     }
   } else if (startTime != Time.UNDEFINED_TIME && endTime != Time.UNDEFINED_TIME) {
     for (ActivityScoring activityScoringFunction : activityScoringFunctions) {
       activityScoringFunction.handleActivity(activity);
     }
   } else if (startTime != Time.UNDEFINED_TIME && endTime == Time.UNDEFINED_TIME) {
     for (ActivityScoring activityScoringFunction : activityScoringFunctions) {
       activityScoringFunction.handleLastActivity(activity);
     }
   } else {
     throw new RuntimeException(
         "Trying to score an activity without start or end time. Should not happen.");
   }
 }