public WorkoutPageData fetchWorkoutPageData( final User currentUser, final Long workoutId, final int similarPage, final int workoutStartIndex, final int messagesStartIndex, final int privateMessagesPageIndex) throws WorkoutNotFoundException { final Workout workout = workoutStore.fetchWorkout(workoutId); final PaginatedCollection<PrivateMessage> emptyPage = emptyPage(); final PaginatedCollection<PrivateMessage> privateConversation = currentUser == null ? emptyPage : fetchPrivateConversation( currentUser, workout.getUser().getId(), privateMessagesPageIndex); return new WorkoutPageData( workout, fetchPublicMessages(Topic.Kind.WORKOUT, workoutId, 5, messagesStartIndex), getSimilarWorkouts(workout, similarPage), workoutStore.getWorkouts(workout.getUser(), EMPTY_STRING_LIST, workoutStartIndex, 10), privateConversation); }