View Javadoc
1   package org.kuali.student.ap.bookmark.service.impl;
2   
3   import org.kuali.rice.krad.lookup.LookupForm;
4   import org.kuali.rice.krad.lookup.LookupableImpl;
5   import org.kuali.student.ap.academicplan.constants.AcademicPlanServiceConstants;
6   import org.kuali.student.ap.academicplan.dto.LearningPlanInfo;
7   import org.kuali.student.ap.academicplan.dto.PlanItemInfo;
8   import org.kuali.student.ap.academicplan.infc.PlanItem;
9   import org.kuali.student.ap.academicplan.service.AcademicPlanService;
10  import org.kuali.student.ap.bookmark.dto.BookmarkDetailWrapper;
11  import org.kuali.student.ap.coursesearch.dataobject.CourseDetailsWrapper;
12  import org.kuali.student.ap.coursesearch.service.impl.CourseDetailsInquiryHelperImpl2;
13  import org.kuali.student.ap.framework.config.KsapFrameworkServiceLocator;
14  import org.kuali.student.ap.framework.context.PlanConstants;
15  import org.kuali.student.ap.planner.service.PlanEventViewHelperService;
16  import org.kuali.student.ap.planner.util.PlanEventUtils;
17  import org.kuali.student.r2.common.exceptions.DoesNotExistException;
18  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
19  import org.kuali.student.r2.common.exceptions.MissingParameterException;
20  import org.kuali.student.r2.common.exceptions.OperationFailedException;
21  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
22  import org.kuali.student.r2.lum.course.infc.Course;
23  
24  import javax.json.JsonObjectBuilder;
25  import javax.servlet.ServletException;
26  import javax.servlet.http.HttpServletResponse;
27  import java.io.IOException;
28  import java.util.ArrayList;
29  import java.util.Collections;
30  import java.util.List;
31  import java.util.Map;
32  import java.util.Set;
33  import java.util.UUID;
34  
35  public class BookmarkDetailLookupableHelper extends
36          LookupableImpl implements PlanEventViewHelperService{
37      private static final long serialVersionUID = -8872944782230428634L;
38      CourseDetailsInquiryHelperImpl2 courseDetailsInquiryHelper;
39  
40      @Override
41      public List<BookmarkDetailWrapper> performSearch(
42              LookupForm lookupForm, Map<String, String> searchCriteria,
43              boolean bounded) {
44          String studentId = KsapFrameworkServiceLocator.getUserSessionHelper()
45                  .getStudentId();
46          try {
47              List<BookmarkDetailWrapper> plannedCoursesList = getPlanItemsWishList(studentId);
48              Collections.sort(plannedCoursesList);
49              return plannedCoursesList;
50          } catch (Exception e) {
51              throw new RuntimeException(e);
52          }
53      }
54      protected List<BookmarkDetailWrapper> getPlanItemsWishList(String studentId)
55              throws InvalidParameterException, MissingParameterException, DoesNotExistException,
56                     OperationFailedException, PermissionDeniedException {
57          List<BookmarkDetailWrapper> bookmarkList = new ArrayList<BookmarkDetailWrapper>();
58  
59          AcademicPlanService academicPlanService = KsapFrameworkServiceLocator.getAcademicPlanService();
60          String planTypeKey = PlanConstants.LEARNING_PLAN_TYPE_PLAN;
61  
62          List<LearningPlanInfo> learningPlanList = academicPlanService.getLearningPlansForStudentByType(studentId,
63                  planTypeKey, KsapFrameworkServiceLocator.getContext().getContextInfo());
64          Map<String, List<PlanItemInfo>> itemsByPlan = new java.util.HashMap<String, List<PlanItemInfo>>(
65                  learningPlanList.size());
66          Set<String> courseIds = new java.util.LinkedHashSet<String>();
67          for (LearningPlanInfo learningPlan : learningPlanList) {
68              String learningPlanID = learningPlan.getId();
69              List<PlanItemInfo> planItems = academicPlanService.getPlanItemsInPlanByCategory(learningPlanID,AcademicPlanServiceConstants.ItemCategory.WISHLIST,
70                      KsapFrameworkServiceLocator.getContext().getContextInfo());
71              itemsByPlan.put(learningPlanID, planItems);
72              if (planItems != null)
73                  for (PlanItemInfo planItem : planItems)
74                      if (PlanConstants.COURSE_TYPE.equals(planItem.getRefObjectType()))
75                          courseIds.add(KsapFrameworkServiceLocator.getCourseHelper().getCurrentVersionOfCourseByVersionIndependentId(planItem
76                                  .getRefObjectId()).getId());
77          }
78          KsapFrameworkServiceLocator.getCourseHelper().frontLoad(new ArrayList<String>(courseIds));
79  
80          for (Map.Entry<String, List<PlanItemInfo>> entry : itemsByPlan.entrySet()){
81              for (PlanItemInfo planItem : entry.getValue()) {
82                  BookmarkDetailWrapper bookmark = new BookmarkDetailWrapper();
83                  bookmark.setLearningPlanId(entry.getKey());
84                  bookmark.setPlanItemId(planItem.getId());
85                  bookmark.setDateAdded(planItem.getMeta().getCreateTime());
86                  bookmark.setUniqueId(UUID.randomUUID().toString());
87  
88                  Course course = KsapFrameworkServiceLocator.getCourseHelper().getCurrentVersionOfCourseByVersionIndependentId
89                          (planItem.getRefObjectId());
90                  CourseDetailsWrapper courseDetails = getCourseDetailsInquiryService().retrieveCourseSummary(course);
91                  bookmark.setCourseDetailsWrapper(courseDetails);
92                  bookmarkList.add(bookmark);
93  
94              }
95          }
96          Collections.sort(bookmarkList);
97          return bookmarkList;
98      }
99  
100     public synchronized CourseDetailsInquiryHelperImpl2 getCourseDetailsInquiryService() {
101         if (this.courseDetailsInquiryHelper == null) {
102             this.courseDetailsInquiryHelper = new CourseDetailsInquiryHelperImpl2();
103         }
104         return courseDetailsInquiryHelper;
105     }
106 
107     public JsonObjectBuilder makeAddEvent(PlanItem planItem, JsonObjectBuilder eventList) {
108         return PlanEventUtils.makeAddEvent(planItem, eventList);
109     }
110 
111     public JsonObjectBuilder makeRemoveEvent(String uniqueId, PlanItem planItem, JsonObjectBuilder eventList) {
112         return PlanEventUtils.makeRemoveEvent(uniqueId, planItem, eventList);
113     }
114 
115     public JsonObjectBuilder updatePlanItemEvent(String uniqueId, PlanItem planItem, JsonObjectBuilder eventList) {
116         return PlanEventUtils.updatePlanItemEvent(uniqueId, planItem, eventList);
117     }
118 
119     public JsonObjectBuilder updateTotalCreditsEvent(boolean newTerm, String termId, JsonObjectBuilder eventList) {
120         return PlanEventUtils.updateTotalCreditsEvent(newTerm,termId,eventList);
121     }
122 
123     public JsonObjectBuilder updateTermNoteEvent(String uniqueId, String termId, String termNote, JsonObjectBuilder eventList) {
124         return PlanEventUtils.updateTermNoteEvent(uniqueId, termId, termNote, eventList);
125     }
126 
127     public void sendJsonEvents(boolean success, String message, HttpServletResponse response,
128                                JsonObjectBuilder eventList) throws IOException, ServletException {
129         PlanEventUtils.sendJsonEvents(success,message,response,eventList);
130     }
131 
132     public JsonObjectBuilder makeAddBookmarkEvent(PlanItem planItem, JsonObjectBuilder eventList) {
133         return PlanEventUtils.makeAddBookmarkEvent(planItem, eventList);
134     }
135 
136     public JsonObjectBuilder makeUpdateBookmarkTotalEvent(PlanItem planItem, JsonObjectBuilder eventList) {
137         return PlanEventUtils.makeUpdateBookmarkTotalEvent(planItem, eventList);
138     }
139 
140     public JsonObjectBuilder makeUpdateBookmarkTotalEvent(String learningPlanId, JsonObjectBuilder eventList) {
141         return PlanEventUtils.makeUpdateBookmarkTotalEvent(learningPlanId, eventList);
142     }
143 
144     public JsonObjectBuilder makeUpdatePlanItemStatusMessage(List<PlanItem> planItems, JsonObjectBuilder eventList) {
145         return PlanEventUtils.makeUpdatePlanItemStatusMessage(planItems, eventList);
146     }
147 }