1 package org.kuali.student.ap.plannerreview; 2 3 import org.kuali.student.ap.plannerreview.infc.Conversation; 4 import org.kuali.student.ap.plannerreview.infc.ConversationAdvisor; 5 import org.kuali.student.ap.plannerreview.infc.ConversationComment; 6 import org.kuali.student.ap.plannerreview.infc.LearningPlanReviewRequest; 7 import org.kuali.student.r2.common.exceptions.PermissionDeniedException; 8 import org.kuali.student.r2.common.infc.RichText; 9 10 import java.util.List; 11 12 /** 13 * Defines methods for interacting with Learning Plan Reviews 14 * @author Chris Maurer <chmaurer@iu.edu> 15 * 16 */ 17 public interface LearningPlanReviewStrategy { 18 19 /** 20 * Get all available advisors for the current student 21 * @return 22 */ 23 List<ConversationAdvisor> getAdvisors(); 24 25 /** 26 * Calls {@link #getAdvisors()} and returns true if the list is not empty. 27 * @return 28 */ 29 boolean hasAdvisors(); 30 31 /** 32 * Create a new learning plan review, based on an existing learning plan, 33 * and return the learning plan ID for the review. 34 * 35 * <p> 36 * The resulting learning plan will have a type of 37 * {@link org.kuali.student.ap.academicplan.constants.AcademicPlanServiceConstants.LEARNING_PLAN_TYPE_PLAN_REVIEW} 38 * </p> 39 * 40 * @param request 41 * The request for review. 42 * @return The ID for the newly created learning plan review. 43 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 44 * If the current user does not have access to the create a 45 * learning plan review. 46 */ 47 String createLearningPlanReview(LearningPlanReviewRequest request) throws PermissionDeniedException; 48 49 /** 50 * Create a new conversation based on a learning plan review. 51 * 52 * @param learningPlanId 53 * The ID of the learning plan review. 54 * @return The newly created conversation. 55 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 56 * If the current user does not have access to the requested 57 * learning plan. 58 */ 59 Conversation getConversation(String learningPlanId) throws PermissionDeniedException; 60 61 /** 62 * Add a comment to the conversation on a learning plan review. 63 * @param learningPlanId The ID of the learning plan review. 64 * @param byAdvisor Flag indicating if the comment is from the advisor. False means it is from the student. 65 * @param comment The comment to add 66 * @return The newly added comment 67 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 68 * If the current user does not have access to the requested 69 * learning plan. 70 */ 71 ConversationComment addCommentToConversation(String learningPlanId, boolean byAdvisor, 72 RichText comment) throws PermissionDeniedException; 73 74 /** 75 * Get all conversations for a student 76 * @return A list of Conversations 77 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 78 * If the current user does not have access to view conversations. 79 */ 80 List<Conversation> getConversations() throws PermissionDeniedException; 81 82 /** 83 * Mark a single comment as read 84 * @param conversationCommentId 85 * The ID of the comment to mark as read 86 * @return A success or failure to do the update 87 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 88 * If the current user does not have access to the requested 89 * conversation comment. 90 */ 91 boolean markCommentAsRead(String conversationCommentId) throws PermissionDeniedException; 92 93 /** 94 * Mark all comments inside a conversation as read 95 * @param learningPlanId The ID of the learning plan review 96 * @return A success or failure to do the update 97 * @throws org.kuali.student.r2.common.exceptions.PermissionDeniedException 98 * If the current user does not have access to the requested 99 * learning plan. 100 */ 101 boolean markAllConversationCommentsAsRead(String learningPlanId) throws PermissionDeniedException; 102 103 }