package de.avalax.fitbuddy.application.workout; import de.avalax.fitbuddy.domain.model.ResourceException; import de.avalax.fitbuddy.domain.model.exercise.Exercise; import de.avalax.fitbuddy.domain.model.finished_workout.FinishedWorkoutRepository; import de.avalax.fitbuddy.domain.model.set.Set; import de.avalax.fitbuddy.domain.model.workout.Workout; import de.avalax.fitbuddy.domain.model.workout.WorkoutException; import de.avalax.fitbuddy.domain.model.workout.WorkoutId; import de.avalax.fitbuddy.domain.model.workout.WorkoutRepository; public class WorkoutApplicationService { private WorkoutSession workoutSession; private WorkoutRepository workoutRepository; private FinishedWorkoutRepository finishedWorkoutRepository; public WorkoutApplicationService( WorkoutSession workoutSession, WorkoutRepository workoutRepository, FinishedWorkoutRepository finishedWorkoutRepository) { this.workoutSession = workoutSession; this.workoutRepository = workoutRepository; this.finishedWorkoutRepository = finishedWorkoutRepository; } @Deprecated public int countOfExercises() throws ResourceException { return getWorkout().getExercises().size(); } @Deprecated public Exercise requestExercise(int position) throws ResourceException { return getWorkout().getExercises().get(position); } public void switchToSet(int position, int moved) throws ResourceException { Exercise exercise = getWorkout().getExercises().get(position); exercise.getSets().setCurrentSet(exercise.getSets().indexOfCurrentSet() + moved); //TODO only saveWorkout by android lifecycle workoutSession.saveCurrentWorkout(); } public void addRepsToSet(int position, int moved) throws ResourceException { Exercise exercise = getWorkout().getExercises().get(position); int currentSetIndex = exercise.getSets().indexOfCurrentSet(); Set set = exercise.getSets().get(currentSetIndex); set.setReps(set.getReps() + moved); //TODO only saveWorkout by android lifecycle workoutSession.saveCurrentWorkout(); } public void setCurrentExercise(int index) throws ResourceException { getWorkout().getExercises().setCurrentExercise(index); //TODO only saveWorkout by android lifecycle workoutSession.saveCurrentWorkout(); } public void updateWeightOfCurrentSet(int index, double weight) throws ResourceException { Exercise exercise = requestExercise(index); int indexOfCurrentSet = exercise.getSets().indexOfCurrentSet(); exercise.getSets().get(indexOfCurrentSet).setWeight(weight); //TODO only saveWorkout by android lifecycle workoutSession.saveCurrentWorkout(); } @Deprecated public double weightOfCurrentSet(int index) throws ResourceException { Exercise exercise = requestExercise(index); int indexOfCurrentSet = exercise.getSets().indexOfCurrentSet(); Set set = exercise.getSets().get(indexOfCurrentSet); return set.getWeight(); } @Deprecated public int indexOfCurrentExercise() throws ResourceException { return getWorkout().getExercises().indexOfCurrentExercise(); } @Deprecated public WorkoutId currentWorkoutId() throws ResourceException { return workoutSession.getWorkout().getWorkoutId(); } public void finishCurrentWorkout() throws ResourceException { Workout workout = workoutSession.getWorkout(); finishedWorkoutRepository.saveWorkout(workout); Workout newWorkout = workoutRepository.load(workout.getWorkoutId()); workoutSession.switchWorkout(newWorkout); } @Deprecated public int workoutProgress(int exerciseIndex) throws ResourceException { return progressInPercent(getWorkout().getProgress(exerciseIndex)); } private int progressInPercent(double progress) { return (int) Math.round(progress * 100); } private Workout getWorkout() throws WorkoutException { if (workoutSession.hasWorkout()) { return workoutSession.getWorkout(); } else { throw new WorkoutException(); } } }