View Javadoc
1   /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5   package org.kuali.student.enrollment.class2.courseoffering.service.impl;
6   
7   import org.kuali.rice.core.api.criteria.QueryByCriteria;
8   import org.kuali.student.common.collection.KSCollectionUtils;
9   import org.kuali.student.common.mock.MockService;
10  import org.kuali.student.common.util.UUIDHelper;
11  import org.kuali.student.r1.common.dictionary.dto.ObjectStructureDefinition;
12  import org.kuali.student.r1.core.statement.dto.StatementTreeViewInfo;
13  import org.kuali.student.r2.common.dto.ContextInfo;
14  import org.kuali.student.r2.common.dto.StatusInfo;
15  import org.kuali.student.r2.common.dto.ValidationResultInfo;
16  import org.kuali.student.r2.common.exceptions.*;
17  import org.kuali.student.r2.core.class1.type.dto.TypeInfo;
18  import org.kuali.student.r2.core.search.dto.SearchParamInfo;
19  import org.kuali.student.r2.core.search.dto.SearchRequestInfo;
20  import org.kuali.student.r2.core.search.dto.SearchResultCellInfo;
21  import org.kuali.student.r2.core.search.dto.SearchResultInfo;
22  import org.kuali.student.r2.core.search.dto.SearchResultRowInfo;
23  import org.kuali.student.r2.core.search.service.SearchService;
24  import org.kuali.student.r2.core.versionmanagement.dto.VersionDisplayInfo;
25  import org.kuali.student.r2.core.versionmanagement.dto.VersionInfo;
26  import org.kuali.student.r2.lum.course.dto.ActivityInfo;
27  import org.kuali.student.r2.lum.course.dto.CourseInfo;
28  import org.kuali.student.r2.lum.course.dto.FormatInfo;
29  import org.kuali.student.r2.lum.course.dto.LoDisplayInfo;
30  import org.kuali.student.r2.lum.course.service.CourseService;
31  import org.kuali.student.r2.lum.util.constants.CluServiceConstants;
32  
33  import javax.jws.WebParam;
34  
35  import java.util.ArrayList;
36  import java.util.Arrays;
37  import java.util.Date;
38  import java.util.LinkedHashMap;
39  import java.util.List;
40  import java.util.Map;
41  
42  /**
43   *
44   * @author nwright
45   */
46  public class CourseServiceR1MockImpl implements CourseService, MockService, SearchService {
47  
48      private Map<String, CourseInfo> courses = new LinkedHashMap<String, CourseInfo>();
49  
50      @Override
51      public void clear() {
52          this.courses.clear();
53      }
54  
55      @Override
56      public CourseInfo createCourse(CourseInfo courseInfo, ContextInfo contextInfo)
57              throws DataValidationErrorException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException {
58          
59          if (courseInfo.getId() == null) {
60              courseInfo.setId(UUIDHelper.genStringUUID());
61          }
62          
63         
64          for (FormatInfo format :  courseInfo.getFormats()) {
65              
66              if (format.getId() == null) {
67                  format.setId(UUIDHelper.genStringUUID());
68              }
69              
70              format.getActivities();
71              
72              for (ActivityInfo activity : format.getActivities()) {
73                  
74                  if (activity.getId() == null) {
75                      activity.setId(UUIDHelper.genStringUUID());
76                  }
77              }
78          }
79          
80          VersionInfo version = new VersionInfo ();
81          version.setCurrentVersionStart(new Date ());
82          version.setCurrentVersionEnd(null);
83          version.setSequenceNumber(0l);
84          version.setVersionComment("initial version");
85          version.setVersionIndId(courseInfo.getId() + "ind");
86          version.setVersionedFromId(courseInfo.getId());
87          courseInfo.setVersion(version);
88          courses.put(courseInfo.getId(), courseInfo);
89          return courseInfo;
90      }
91  
92      @Override
93      public StatementTreeViewInfo createCourseStatement(String courseId, StatementTreeViewInfo statementTreeViewInfo, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, DataValidationErrorException {
94          throw new UnsupportedOperationException("Not supported yet.");
95      }
96  
97      @Override
98      public CourseInfo createNewCourseVersion(String courseId, String versionComment, ContextInfo contextInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException {
99          throw new UnsupportedOperationException("Not supported yet.");
100     }
101 
102     @Override
103     public StatusInfo deleteCourse(String courseId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException, DataValidationErrorException, AlreadyExistsException, CircularRelationshipException, DependentObjectsExistException, UnsupportedActionException, UnsupportedOperationException, CircularReferenceException {
104         if (!courses.containsKey(courseId)) {
105             throw new DoesNotExistException(courseId);
106         }
107         courses.remove(courseId);
108         StatusInfo status = new StatusInfo();
109         status.setSuccess(Boolean.TRUE);
110         return status;
111     }
112 
113     @Override
114     public StatusInfo deleteCourseStatement(String courseId, StatementTreeViewInfo statementTreeViewInfo, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
115         throw new UnsupportedOperationException("Not supported yet.");
116     }
117 
118     @Override
119     public CourseInfo getCourse(String courseId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
120         if (!courses.containsKey(courseId)) {
121             throw new DoesNotExistException(courseId);
122         }
123         return courses.get(courseId);
124     }
125 
126     @Override
127     public List<ActivityInfo> getCourseActivitiesByCourseFormat(String formatId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
128         List<ActivityInfo> list = new ArrayList<ActivityInfo>();
129         for (CourseInfo course : this.courses.values()) {
130             for (FormatInfo format : course.getFormats()) {
131                 if (format.getId().equals(formatId)) {
132                     for (ActivityInfo activity : format.getActivities()) {
133                         list.add(activity);
134                     }
135                 }
136             }
137         }
138         return list;
139     }
140 
141     @Override
142     public List<FormatInfo> getCourseFormatsByCourse(String courseId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
143         List<FormatInfo> list = new ArrayList<FormatInfo>();
144         CourseInfo course = this.getCourse(courseId, null);
145         for (FormatInfo format : course.getFormats()) {
146             list.add(format);
147         }
148         return list;
149     }
150 
151     @Override
152     public List<LoDisplayInfo> getCourseLearningObjectivesByCourse(String courseId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
153         throw new UnsupportedOperationException("Not supported yet.");
154     }
155 
156     @Override
157     public List<StatementTreeViewInfo> getCourseStatements(String courseId, String nlUsageTypeKey, String language, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
158         throw new UnsupportedOperationException("Not supported yet.");
159     }
160 
161     @Override
162     public StatusInfo setCurrentCourseVersion(String courseVersionId, Date currentVersionStart, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, IllegalVersionSequencingException, OperationFailedException, PermissionDeniedException {
163         throw new UnsupportedOperationException("Not supported yet.");
164     }
165 
166     @Override
167     public CourseInfo updateCourse(String courseId, CourseInfo courseInfo, ContextInfo contextInfo) throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, VersionMismatchException, OperationFailedException, PermissionDeniedException, UnsupportedActionException, DependentObjectsExistException, AlreadyExistsException, CircularRelationshipException, CircularReferenceException, ReadOnlyException {
168         if (!courses.containsKey(courseInfo.getId())) {
169             throw new DoesNotExistException(courseInfo.getId());
170         }
171         this.courses.put(courseInfo.getId(), courseInfo);
172         return courseInfo;
173     }
174 
175     @Override
176     public StatementTreeViewInfo updateCourseStatement(String courseId, String statementId, StatementTreeViewInfo statementTreeViewInfo, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, DataValidationErrorException, VersionMismatchException {
177         throw new UnsupportedOperationException("Not supported yet.");
178     }
179 
180     @Override
181     public List<ValidationResultInfo> validateCourse(String validationType, CourseInfo courseInfo, ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException {
182         throw new UnsupportedOperationException("Not supported yet.");
183     }
184 
185     @Override
186     public List<ValidationResultInfo> validateCourseStatement(String courseId, StatementTreeViewInfo statementTreeViewInfo, ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException {
187         throw new UnsupportedOperationException("Not supported yet.");
188     }
189 
190     @Override
191     public ObjectStructureDefinition getObjectStructure(String objectTypeKey) {
192         throw new UnsupportedOperationException("Not supported yet.");
193     }
194 
195     @Override
196     public List<String> getObjectTypes() {
197         throw new UnsupportedOperationException("Not supported yet.");
198     }
199 
200     @Override
201     public VersionDisplayInfo getCurrentVersion(String refObjectTypeURI, String refObjectId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
202         throw new UnsupportedOperationException("Not supported yet.");
203     }
204 
205 
206     @Override
207     public List<CourseInfo> getCoursesByIds(List<String> courseIds, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
208         throw new UnsupportedOperationException("Not supported yet.");
209     }
210 
211     @Override
212     public List<String> searchForCourseIds(QueryByCriteria criteria, ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
213         throw new UnsupportedOperationException("Not supported yet.");
214     }
215 
216     @Override
217     public List<CourseInfo> searchForCourses(QueryByCriteria criteria, ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
218         throw new UnsupportedOperationException("Not supported yet.");
219     }
220 
221     public List<VersionDisplayInfo> getVersions(String refObjectTypeURI, String refObjectId, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
222 
223         // Note: the refObjectTypeURI should only be clus because that is the only object that is versioned
224         List<VersionDisplayInfo> list = new ArrayList<VersionDisplayInfo> ();
225         for (CourseInfo info : this.courses.values()) {
226             // the refObjectid is the VERSION INDEPENDENT ID See LuDaoImpl from CM
227             if (refObjectId.equals(info.getVersion().getVersionIndId())) {
228                 VersionInfo vi = info.getVersion();
229                 VersionDisplayInfo vd = new VersionDisplayInfo ();
230                 vd.setId(info.getId());
231                 vd.setRefObjectUri(CluServiceConstants.CLU_NAMESPACE_URI);
232                 vd.setVersionedFromId(vi.getVersionedFromId());
233                 vd.setCurrentVersionStart(vi.getCurrentVersionStart());
234                 vd.setCurrentVersionEnd(vi.getCurrentVersionEnd());
235                 vd.setSequenceNumber(vi.getSequenceNumber());
236                 vd.setVersionComment(vi.getVersionComment());
237                 vd.setVersionIndId(vi.getVersionIndId());
238                 list.add (vd);
239             }
240         }
241         return list;
242     }
243 
244     static TypeInfo typeInfo;
245     static {
246         typeInfo = new TypeInfo();
247         typeInfo.setKey("lu.search.relatedTypes");
248     }
249 
250     @Override
251     public List<TypeInfo> getSearchTypes(@WebParam(name = "contextInfo") ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException {
252         return Arrays.asList(typeInfo);
253     }
254 
255     @Override
256     public TypeInfo getSearchType(@WebParam(name = "searchTypeKey") String searchTypeKey, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException {
257         if(typeInfo.getKey().equals(searchTypeKey)){
258             return typeInfo;
259         }
260         throw new DoesNotExistException("Search Not Defined");
261     }
262 
263     @Override
264     public SearchResultInfo search(SearchRequestInfo searchRequestInfo, @WebParam(name = "contextInfo") ContextInfo contextInfo) throws MissingParameterException, InvalidParameterException, OperationFailedException, PermissionDeniedException {
265 
266         if("lu.search.relatedTypes".equals(searchRequestInfo.getSearchKey())){
267             String formatId = null;
268             for(SearchParamInfo searchParam:searchRequestInfo.getParams()){
269                 if("lu.queryParam.cluId".equals(searchParam.getKey())){
270                     formatId = KSCollectionUtils.getRequiredZeroElement(searchParam.getValues());
271                     break;
272                 }
273             }
274             if(formatId !=null){
275                 for(CourseInfo course:this.courses.values()){
276                     for(FormatInfo format:course.getFormats()){
277                         if(format.getId().equals(formatId)){
278                             SearchResultInfo searchResultInfo = new SearchResultInfo();
279                             for(ActivityInfo activity:format.getActivities()){
280                                 SearchResultRowInfo row = new SearchResultRowInfo();
281                                 row.addCell("lu.resultColumn.cluType", activity.getTypeKey());
282                                 searchResultInfo.getRows().add(row);
283                             }
284                             return searchResultInfo;
285                         }
286                     }
287                 }
288             }
289         }
290         return null;
291     }
292 }