1 package com.germinus.merlin.manager;
2
3 import java.text.DateFormat;
4 import java.util.ArrayList;
5 import java.util.Collections;
6 import java.util.Date;
7 import java.util.HashMap;
8 import java.util.Iterator;
9 import java.util.List;
10 import java.util.Locale;
11 import java.util.Map;
12 import java.util.ResourceBundle;
13 import java.util.Set;
14
15 import javax.portlet.ActionRequest;
16 import javax.portlet.ActionResponse;
17 import javax.portlet.PortletURL;
18 import javax.portlet.RenderRequest;
19 import javax.portlet.RenderResponse;
20 import javax.servlet.ServletContext;
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletResponse;
23
24 import com.germinus.liferay.util.ILiferayUtil;
25 import com.germinus.liferay.util.IUserUtil;
26 import com.germinus.liferay.util.UserUtil;
27 import com.germinus.merlin.model.Course;
28 import com.germinus.merlin.model.Student;
29 import com.germinus.merlin.model.Teacher;
30 import com.germinus.merlin.model.TeachersId;
31 import com.germinus.merlin.model.assignment.Assignment;
32 import com.germinus.merlin.model.assignment.AssignmentResult;
33 import com.germinus.merlin.util.IMerlinUtil;
34 import com.germinus.merlin.util.comparator.NameAssignmentResultComparator;
35 import com.liferay.portal.PortalException;
36 import com.liferay.portal.SystemException;
37 import com.liferay.portal.kernel.dao.search.ResultRow;
38 import com.liferay.portal.kernel.dao.search.SearchContainer;
39
40
41
42
43
44 public class AssignmentResultManager {
45
46 private AssignmentManager assignmentManager;
47 private CourseManager courseManager;
48 private List<String> headerNames;
49 private ILiferayUtil liferayUtil;
50 private IMerlinUtil merlinUtil;
51 private SearchContainer searchContainer;
52 private IUserUtil userUtil;
53
54
55
56
57
58
59
60
61 public void addAssignmentResult(ActionRequest request, ActionResponse response, Course course) {
62
63 String username = userUtil.getUserName(request, response);
64 Long iduser = Long.parseLong(username);
65 AssignmentResult result = new AssignmentResult();
66
67
68 Long assignmentId = new Long(request.getParameter("assignmentId"));
69
70 Set<Assignment> assignmentSet = course.getAssignments();
71
72 Set<Student> studentsSet = course.getStudents();
73
74
75 Assignment assignment = assignmentManager.searchAssignment(assignmentSet, assignmentId);
76
77 Student student = assignmentManager.getAssignmentStudent(studentsSet, iduser);
78
79 result.setAssignments(assignment);
80 result.setData(request.getParameter("content"));
81 result.setStudents(student);
82 result.setGrade("");
83 Date d1 = new Date();
84 result.setSubmissionDate(d1);
85
86 assignment.getResults().add(result);
87 course.getAssignments().add(assignment);
88
89 }
90
91
92
93
94
95
96 private ArrayList<String> createTableResultsListHeaderNames(RenderRequest request) {
97 ArrayList<String> headerList= new ArrayList<String>();
98 Locale locale = request.getLocale();
99 ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",locale);
100 headerList.add(resourceBundle.getString("table.header.results.user"));
101 headerList.add(resourceBundle.getString("table.header.results.submissionDate"));
102 headerList.add(resourceBundle.getString("table.header.results.grade"));
103 headerList.add(resourceBundle.getString("table.header.results.comments"));
104 headerList.add(resourceBundle.getString("table.header.results.gradeDate"));
105 headerList.add("");
106 return headerList;
107 }
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141 private AssignmentResult findLastUserAssignmentResultSubmited(ArrayList<AssignmentResult> userAssignmentResultsList) {
142
143 AssignmentResult assignmentResult= userAssignmentResultsList.get(0);
144
145 for (int i=1;i<userAssignmentResultsList.size();i++){
146
147 if (assignmentResult.getSubmissionDate().before(userAssignmentResultsList.get(i).getSubmissionDate())){
148 assignmentResult = userAssignmentResultsList.get(i);
149 }
150 }
151 return assignmentResult;
152 }
153
154
155
156
157
158
159
160
161
162
163
164
165 private void generateAssignmentResultsRows(List<AssignmentResult> assignmentResultList,RenderRequest request,RenderResponse response,String usertype,
166 ServletContext merlinContext,HttpServletRequest httpReq,HttpServletResponse httpRes,
167 List<ResultRow> resultRows){
168 Locale locale = request.getLocale();
169 if (assignmentResultList.size()==0){
170 searchContainer.setEmptyResultsMessage(ResourceBundle.getBundle("messages",locale).getString("table.results.empty"));
171 } else {
172 for (int i = 0; i < assignmentResultList.size(); i++) {
173 AssignmentResult assignmentResult = assignmentResultList.get(i);
174 ResultRow row = new ResultRow(assignmentResult, assignmentResult.getStudents().getClass().getName(), i);
175 IUserUtil userUtil = new UserUtil();
176 row.addText(userUtil.getUserName(assignmentResult.getStudents().getId().getUserid()));
177
178 Date date =assignmentResult.getSubmissionDate();
179 row.addText(DateFormat.getDateInstance().format(date));
180
181 row.addText(assignmentResult.getGrade().toString());
182 row.addText(assignmentResult.getComments());
183
184
185 if (assignmentResult.getDate()!=null){
186 date =assignmentResult.getDate();
187 row.addText(DateFormat.getInstance().format(date));
188 }
189 else {
190 PortletURL rowURL = response.createRenderURL();
191 rowURL.setParameter("action", "resultGrade");
192 rowURL.setParameter("result", String.valueOf(assignmentResult.getResultid()));
193 rowURL.setParameter("assignmentId", String.valueOf(assignmentResult.getAssignments().getAssignmentid()));
194 row.addText(ResourceBundle.getBundle("messages",locale).getString("table.results.notGraded"),rowURL);
195 }
196 row.addJSP("/WEB-INF/jsp/assignments/results/resultsaction.jsp",merlinContext,httpReq,httpRes);
197 resultRows.add(row);
198 }
199 }
200 }
201
202
203
204 public AssignmentManager getAssignmentManager() {
205 return assignmentManager;
206 }
207 public CourseManager getCourseManager() {
208 return courseManager;
209 }
210 public ILiferayUtil getLiferayUtil() {
211 return liferayUtil;
212 }
213 public IMerlinUtil getMerlinUtil() {
214 return merlinUtil;
215 }
216
217
218
219 public IUserUtil getUserUtil() {
220 return userUtil;
221 }
222
223 public Course gradeAssignmentResult(ActionRequest request, ActionResponse response) {
224 long courseId = liferayUtil.getComunityGroupId(request, response);
225 Course course = courseManager.getCourse(courseId);
226 gradeAssignmentResult(request,response,course);
227 return course;
228 }
229
230
231
232
233
234
235
236
237 public void gradeAssignmentResult(ActionRequest request, ActionResponse response, Course course) {
238
239 Long resultId= new Long(request.getParameter("resultId"));
240 Long assignmentId = new Long(request.getParameter("assignmentId"));
241 AssignmentResult assignmentResult;
242
243 Assignment assignment;
244
245
246 Set<Assignment> assignmentsSet= course.getAssignments();
247
248
249 assignment = assignmentManager.searchAssignment(assignmentsSet, assignmentId);
250 Set<AssignmentResult> assignmentResultsSet = assignment.getResults();
251
252
253 assignmentResult = searchAssignmentResult(assignmentResultsSet, resultId);
254
255 if (assignmentResult==null) assignmentResult = new AssignmentResult();
256
257 Date d1 = new Date();
258
259 assignmentResult.setResultid(resultId);
260 assignmentResult.setDate(d1);
261 assignmentResult.setData(assignmentResult.getData());
262 assignmentResult.setComments(request.getParameter("content"));
263 assignmentResult.setGrade(request.getParameter("grade"));
264 assignmentResult.setStudents(assignmentResult.getStudents());
265
266 String username = userUtil.getUserName(request, response);
267 Long idUser = Long.parseLong(username);
268 assignmentResult.setTeachers(new Teacher(new TeachersId(idUser,course.getGroupId()),course));
269
270 assignmentResult.setAssignments(assignmentResult.getAssignments());
271
272 assignment.getResults().add(assignmentResult);
273
274 course.getAssignments().add(assignment);
275
276 }
277
278
279
280
281
282
283
284
285
286
287
288 @SuppressWarnings("unchecked")
289 private Map<String, SearchContainer> listAssignmentResults(RenderRequest request,RenderResponse response,
290 Course course, List<AssignmentResult> assignmentResultsList,String usertype ) throws PortalException, SystemException{
291
292 ServletContext merlinContext = merlinUtil.getServletContext(request,response);
293 HttpServletRequest httpReq = merlinUtil.getHttpServletRequest(request,response);
294 HttpServletResponse httpRes = merlinUtil.getHttpServletResponse(request,response);
295
296
297 headerNames = createTableResultsListHeaderNames(request);
298
299 PortletURL portletURL = response.createRenderURL();
300
301 searchContainer = new SearchContainer(request, null, null, SearchContainer.DEFAULT_CUR_PARAM,
302 SearchContainer.DEFAULT_DELTA, portletURL,headerNames, null);
303
304 int assignmentResultsTotal = assignmentResultsList.size();
305 searchContainer.setTotal(assignmentResultsTotal);
306
307
308 Collections.sort(assignmentResultsList,new NameAssignmentResultComparator());
309
310 searchContainer.setResults(assignmentResultsList);
311
312 List<ResultRow> resultRows = searchContainer.getResultRows();
313
314
315 generateAssignmentResultsRows(assignmentResultsList,request,response,usertype,merlinContext,httpReq,httpRes,resultRows);
316
317 Map<String, SearchContainer> model = new HashMap<String, SearchContainer>();
318 model.put("searchContainer", searchContainer);
319
320 return model;
321 }
322
323
324
325
326
327
328
329
330
331
332
333 public Map<String, SearchContainer> listResults(RenderRequest request,RenderResponse response,
334 Assignment assignment) throws PortalException, SystemException{
335
336 long courseId = liferayUtil.getComunityGroupId(request, response);
337 Course course = courseManager.getCourse(courseId);
338 String usertype= merlinUtil.getUserType(request, response, courseId);
339
340 Set<AssignmentResult> resultsSet = assignment.getResults();
341 List<AssignmentResult> resultsList = new ArrayList<AssignmentResult>(resultsSet);
342 return listAssignmentResults(request, response, course, resultsList, usertype);
343 }
344
345
346
347
348
349
350
351 public void removeAssignmentResult(ActionRequest request,
352 ActionResponse response, Course course) {
353 Long resultId= new Long(request.getParameter("resultId"));
354 Long assignmentId = new Long(request.getParameter("assignmentId"));
355 Assignment assignment = assignmentManager.getAssignment(assignmentId, course);
356 Set<AssignmentResult> assignmentResultsSet = assignment.getResults();
357 Iterator<AssignmentResult> assignmentResultIterator = assignmentResultsSet.iterator();
358 boolean notFound=true;
359 AssignmentResult assignmentResult=null;
360 while (assignmentResultIterator.hasNext() && notFound){
361 assignmentResult = assignmentResultIterator.next();
362 if (assignmentResult.getResultid()==resultId){
363 notFound=false;
364 }
365 }
366 assignmentResultsSet.remove(assignmentResult);
367 }
368
369
370
371
372
373
374
375
376
377 public AssignmentResult removeAssignmentResult(RenderRequest request,
378 RenderResponse response, Course course) {
379 Long resultId= new Long(request.getParameter("resultId"));
380 Long assignmentId = new Long(request.getParameter("assignmentId"));
381 Assignment assignment = assignmentManager.getAssignment(assignmentId, course);
382 Set<AssignmentResult> assignmentResultsSet = assignment.getResults();
383 Iterator<AssignmentResult> assignmentResultIterator = assignmentResultsSet.iterator();
384 boolean notFound=true;
385 AssignmentResult assignmentResult=null;
386 while (assignmentResultIterator.hasNext() && notFound){
387 assignmentResult = assignmentResultIterator.next();
388 if (assignmentResult.getResultid()==resultId){
389 notFound=false;
390 }
391 }
392 assignmentResultsSet.remove(assignmentResult);
393 return assignmentResult;
394 }
395 public AssignmentResult searchAssignmentResult(RenderRequest request, RenderResponse response, Assignment assignment) {
396 String username = userUtil.getUserName(request, response);
397 Long idUser = Long.parseLong(username);
398 Set<AssignmentResult> assignmentResultsSet = assignment.getResults();
399
400 return searchAssignmentResultByUserId(assignmentResultsSet, idUser);
401 }
402
403
404
405
406
407
408
409
410 public AssignmentResult searchAssignmentResult(RenderRequest request,RenderResponse response) {
411 String username = userUtil.getUserName(request, response);
412 Long iduser = Long.parseLong(username);
413 Assignment assignment;
414
415 assignment = assignmentManager.searchAssignment(request, response);
416 Set<AssignmentResult> assignmentResultsSet= assignment.getResults();
417
418 return searchAssignmentResultByUserId(assignmentResultsSet,iduser);
419 }
420
421
422
423
424
425
426 public AssignmentResult searchAssignmentResult(Set<AssignmentResult> assignmentResultSet,
427 Long resultId){
428 AssignmentResult assignmentResult= null;
429 Iterator<AssignmentResult> i = assignmentResultSet.iterator();
430 boolean notFound=true;
431 while (i.hasNext() && notFound){
432 assignmentResult= i.next();
433 if(assignmentResult.getResultid() == resultId){
434 notFound=false;
435 }
436 }
437 return assignmentResult;
438 }
439
440
441
442
443
444
445
446
447 private AssignmentResult searchAssignmentResultByUserId(
448 Set<AssignmentResult> assignmentResultsSet, Long idUser) {
449 ArrayList<AssignmentResult> assignmentResultsList= new ArrayList<AssignmentResult>();
450 Iterator<AssignmentResult> assignmentResultsIterator = assignmentResultsSet.iterator();
451 AssignmentResult assignmentResult= null;
452 while (assignmentResultsIterator.hasNext()) {
453 assignmentResult= assignmentResultsIterator.next();
454 if(assignmentResult.getStudents().getId().getUserid() == idUser){
455 assignmentResultsList.add(assignmentResult);
456 }
457 }
458 if (assignmentResultsList.size()==0){
459 return null;
460 } else
461 if (assignmentResultsList.size()==1){
462 return assignmentResultsList.get(0);
463 }
464 else
465 return findLastUserAssignmentResultSubmited(assignmentResultsList);
466 }
467
468
469
470 public void setAssignmentManager(AssignmentManager assignmentManager) {
471 this.assignmentManager = assignmentManager;
472 }
473 public void setCourseManager(CourseManager courseManager) {
474 this.courseManager = courseManager;
475 }
476 public void setLiferayUtil(ILiferayUtil liferayUtil) {
477 this.liferayUtil = liferayUtil;
478 }
479 public void setMerlinUtil(IMerlinUtil merlinUtil) {
480 this.merlinUtil = merlinUtil;
481 }
482
483
484
485 public void setUserUtil(IUserUtil userUtil) {
486 this.userUtil = userUtil;
487 }
488 }