View Javadoc
1   package com.germinus.merlin.manager;
2   
3   import java.text.DateFormat;
4   import java.text.ParseException;
5   import java.text.SimpleDateFormat;
6   import java.util.ArrayList;
7   import java.util.Collections;
8   import java.util.Date;
9   import java.util.HashMap;
10  import java.util.Iterator;
11  import java.util.List;
12  import java.util.Locale;
13  import java.util.Map;
14  import java.util.ResourceBundle;
15  import java.util.Set;
16  
17  import javax.portlet.ActionRequest;
18  import javax.portlet.ActionResponse;
19  import javax.portlet.PortletURL;
20  import javax.portlet.RenderRequest;
21  import javax.portlet.RenderResponse;
22  import javax.servlet.ServletContext;
23  import javax.servlet.http.HttpServletRequest;
24  import javax.servlet.http.HttpServletResponse;
25  
26  import com.germinus.liferay.util.ILiferayUtil;
27  import com.germinus.liferay.util.IUserUtil;
28  import com.germinus.merlin.dao.AssignmentDao;
29  import com.germinus.merlin.model.Course;
30  import com.germinus.merlin.model.ResourceContainer;
31  import com.germinus.merlin.model.Student;
32  import com.germinus.merlin.model.Teacher;
33  import com.germinus.merlin.model.assignment.Assignment;
34  import com.germinus.merlin.model.assignment.AssignmentInteractive;
35  import com.germinus.merlin.model.assignment.AssignmentOffline;
36  import com.germinus.merlin.model.assignment.AssignmentOnline;
37  import com.germinus.merlin.model.assignment.AssignmentResult;
38  import com.germinus.merlin.model.assignment.AssignmentUploadASingleFile;
39  import com.germinus.merlin.util.IMerlinUtil;
40  import com.germinus.merlin.util.MerlinWebKeys;
41  import com.germinus.merlin.util.comparator.NameAssignmentComparator;
42  import com.liferay.portal.PortalException;
43  import com.liferay.portal.SystemException;
44  import com.liferay.portal.kernel.dao.search.ResultRow;
45  import com.liferay.portal.kernel.dao.search.SearchContainer;
46  
47  /**Class that is used for assignments actions, such as, delete, get assignment,
48   * getresults and so on...
49   * @author Rui Quintas
50   * @version 1.0
51   * @since 1.0
52   * @author Jesús Rodríguez Martínez Gérminus XXI
53   * @version 2.0
54   * @since 2.0
55   */
56  public class AssignmentManager {
57  
58  	private AssignmentDao assignmentDao;
59  	private AssignmentResultManager assignmentResultManager;
60  	private CourseManager courseManager;
61  	private List<String> headerNames;
62  	private ILiferayUtil liferayUtil;
63  	private IMerlinUtil merlinUtil;
64  	private SearchContainer searchContainer;	
65  	private IUserUtil userUtil;
66      
67      /**
68  	 * @param request
69  	 * @param response
70  	 * @param course
71  	 * @author Jesús Rodríguez, Germinus XXI
72  	 * @since 1.0
73  	 */
74  	public void addAssignment(ActionRequest request, ActionResponse response, Course course) {
75  	
76  		//create a new assignment object with request parameters
77      	Assignment newAssignment = null;
78      	if (request.getParameter("type").equals("Online Activity")){
79  			 newAssignment = new AssignmentOnline();
80  		} else
81  			if (request.getParameter("type").equals("Upload a Single File")){
82  				newAssignment = new AssignmentUploadASingleFile();
83  			}
84  			else
85  				if (request.getParameter("type").equals("Offline Activity")) {
86  					newAssignment = new AssignmentOffline();
87  				}
88      	//Set common attributes
89      	newAssignment.setName(request.getParameter("name"));
90          newAssignment.setData(request.getParameter("content"));
91          newAssignment.setType(request.getParameter("type"));
92          newAssignment.setDescription(request.getParameter("description"));
93          newAssignment.setCourse(course);
94  
95          Date date = new Date();
96          String startDateString = request.getParameter("startDate");
97          String endDateString = request.getParameter("endDate");
98          SimpleDateFormat formatoDelTexto= new SimpleDateFormat("dd/MM/yyyy");
99          try {
100 			date = formatoDelTexto.parse(startDateString);
101 			newAssignment.setBegintime(date);
102 			date = formatoDelTexto.parse(endDateString);
103 			newAssignment.setEndtime(date);
104 		} catch (ParseException e) {
105 			e.printStackTrace();
106 		}
107  	    if (request.getParameter("hideDescriptionBeforeAvailable").equals("true"))
108         	newAssignment.setHideDescriptionBeforeAvailable(true);
109         else
110         	newAssignment.setHideDescriptionBeforeAvailable(false);
111 		
112         if (request.getParameter("visible").equals("true"))
113         	newAssignment.setVisible(true);
114         else
115         	newAssignment.setVisible(false);
116 
117         //Set specific attributes
118         if (request.getParameter("type").equals("Online Activity") || request.getParameter("type").equals("Upload a Single File")){
119         	if (request.getParameter("resubmit").equals("true")){
120         		((AssignmentInteractive) newAssignment).setResubmit(true);
121         	} else
122         		((AssignmentInteractive) newAssignment).setResubmit(false);
123         	if (request.getParameter("emailsToTeacher").equals("true")){
124         		((AssignmentInteractive) newAssignment).setEmailsToTeacher(true);
125         	} else
126         		((AssignmentInteractive) newAssignment).setEmailsToTeacher(false);
127         	if (request.getParameter("preventLateSubmissions").equals("true")){
128         		((AssignmentInteractive) newAssignment).setPreventLateSubmissions(true);
129         	} else
130         		((AssignmentInteractive) newAssignment).setPreventLateSubmissions(false);
131         }
132                
133         if (request.getParameter("type").equals("Upload a Single File")){
134         	((AssignmentUploadASingleFile) newAssignment).setMaxSize(request.getParameter("maxsize"));
135         	if (request.getParameter("allowNotes").equals("true")){
136             	((AssignmentUploadASingleFile) newAssignment).setAllowNotes(true);
137         	} else
138             	((AssignmentUploadASingleFile) newAssignment).setAllowNotes(false);
139         }
140         //------------------------------------------------------------------------------------
141         //Este bloque asigna un resource container al assignment:
142         List<ResourceContainer> resourceContainerList=course.getResourceContainers();
143         int i=0;
144         boolean notAssign=true;
145         while (i<resourceContainerList.size() && notAssign) {
146         	if (resourceContainerList.get(i)!=null && resourceContainerList.get(i).getCourse()!=null) {
147 		        	if (resourceContainerList.get(i).getCourse()==newAssignment.getCourse()){
148 		        		//TODO Decidir que ResourceContainer se va a asignar al assignment:
149 		        		newAssignment.setResourceContainer(course.getResourceContainers().get(i));
150 		        		notAssign=false;
151 		        	}
152         	}
153         	i++;
154         }
155         //--------------------------------------------------------------------------------------
156         //insert the assignment into the model:
157         course.getAssignments().add(newAssignment);
158         //insert the assignment into the db
159         courseManager.getCourseDao().save(course);
160 	}
161 	
162 	public void changePermissionsAssignment(RenderRequest request,
163 			RenderResponse response) {
164 		Long assignmentId =	new Long(request.getParameter("assignmentId"));
165 		//get the courseID with the groupId of the current community
166 		long courseId = liferayUtil.getComunityGroupId(request, response);
167 		//get the course 
168 		Course course = courseManager.getCourse(courseId);
169 		//get a set of assignments in the course
170 		Set<Assignment> assignmentsSet= course.getAssignments();
171 		
172 		Assignment assignment = searchAssignment(assignmentsSet, assignmentId);
173 		
174 		assignment.setVisible(!assignment.getVisible());
175 		getAssignmentDao().save(assignment);
176 		
177 	}
178 
179 	/**
180 	 *
181 	 * @param assignmentsList
182 	 * @param response
183 	 * @param usertype
184 	 * @param merlinContext
185 	 * @param httpReq
186 	 * @param httpRes
187 	 * @param resultRows
188 	 * @return
189 	 * @author Jesús Rodríguez, Germinus XXI
190 	 * @param request 
191 	 * @param searchContainer2 
192 	 * @since 1.0
193 	 */
194 	private void createAssignmentListRows(List<Assignment> assignmentsList,
195 			RenderRequest request, RenderResponse response, String usertype, ServletContext merlinContext, 
196 			HttpServletRequest httpReq, HttpServletResponse httpRes, List<ResultRow> resultRows,
197 			SearchContainer searchContainer2) {
198 		Locale locale= request.getLocale();
199 		if (assignmentsList.size()==0){ //generate a row for an empty assignmentList
200 			searchContainer.setEmptyResultsMessage(ResourceBundle.getBundle("messages",locale).getString("table.assignments.empty"));
201 		}
202 		else { //generate rows for an assignmentList
203 			generateTable(assignmentsList, request, response, usertype,
204 						merlinContext, httpReq, httpRes, resultRows, locale);
205 		}
206 	}
207 
208 	/** Fill the searchContainer processing the list of assignments.
209 	 * @param request
210 	 * @param response
211 	 * @param listAssignments
212 	 * @param userType
213 	 * @return model
214 	 * @throws SystemException 
215 	 * @throws PortalException 
216 	 * */
217 	@SuppressWarnings("unchecked")
218 	private Map<String, SearchContainer> createSearchContainer(RenderRequest request,RenderResponse response, 
219 						String usertype, List<Assignment> listAssignments) throws PortalException, SystemException {
220 
221 		Map<String, SearchContainer> model = new HashMap<String, SearchContainer>();
222 		ServletContext merlinContext = merlinUtil.getServletContext(request,response);	
223 		HttpServletRequest httpReq = merlinUtil.getHttpServletRequest(request,response);	
224 		HttpServletResponse httpRes = merlinUtil.getHttpServletResponse(request,response);
225 		
226 		//headerNames: array list that contains the header names to show in the table		
227 		headerNames=createTableAssignmentsListHeaderNames(request,usertype);
228 
229 		PortletURL portletURL = response.createRenderURL();
230 		searchContainer = new SearchContainer(request, null, null,SearchContainer.DEFAULT_CUR_PARAM,
231 										SearchContainer.DEFAULT_DELTA, portletURL, headerNames, null);
232 		
233 		searchContainer.setResults(listAssignments);
234 
235 		List<ResultRow> resultRows = searchContainer.getResultRows();
236 	
237 		//Making the information for each line in the table
238 		if (usertype!=null)
239 			createAssignmentListRows(listAssignments,request,response,usertype,merlinContext,httpReq,httpRes,resultRows,searchContainer);
240 		
241 		model.put("searchContainer", searchContainer);
242 		return model;
243 	}
244 
245 	private List<String> createTableAssignmentsListHeaderNames(RenderRequest request, String userType) {
246 		List<String> headerNames = new ArrayList<String>();
247 		Locale locale = request.getLocale();
248 		//set header table
249 		ResourceBundle resourceBundle = ResourceBundle.getBundle("messages",locale);
250 		headerNames.add(resourceBundle.getString("table.header.assignment.name"));
251 		headerNames.add(resourceBundle.getString("table.header.assignment.type"));
252 		headerNames.add(resourceBundle.getString("table.header.assignment.beginDate"));
253 		headerNames.add(resourceBundle.getString("table.header.assignment.endDate"));
254 		if (userType=="teacher"){
255 			headerNames.add(resourceBundle.getString("table.header.assignment.submissions"));
256 			headerNames.add(resourceBundle.getString("table.header.assignment.state"));
257 		}
258 		else { //usertype=="student"
259 			headerNames.add(resourceBundle.getString("table.header.assignment.submissionDate"));
260 			headerNames.add(resourceBundle.getString("table.header.assignment.grade"));
261 		}
262 		headerNames.add("");
263 		return headerNames;
264 	}
265 
266 	/**
267 	 * Delete Assignment
268 	 * @param id
269 	 * @param course
270 	 */
271 	public void deleteAssignment(long assignmentId,Course course) {
272 		//obtain the list of assignments:
273 		Set<Assignment> assignmentSet = course.getAssignments();
274 		//obtain the correct assignment
275 		Assignment assignment= searchAssignment(assignmentSet, assignmentId);
276 		//delete the assignment of the model
277 		course.getAssignments().remove(assignment);
278 		//remove the assignment from db.
279 		assignmentDao.remove(assignmentId);
280 	}
281 	
282 	/**
283 	 * Delete an assignment
284 	 * @param request
285 	 * @param response
286 	 * @param course
287 	 * @author Jesús Rodríguez, Germinus XXI
288 	 * @since 1.0
289 	 */
290 	public void deleteAssignment(RenderRequest request, RenderResponse response, Course course) {
291 		//get the assignmentId to delete
292 		long assignmentId = Long.parseLong(request.getParameter("assignmentId"));
293 		deleteAssignment(assignmentId,course);
294 		
295 	}
296 
297 	/**
298 	 * @param request
299 	 * @param response
300 	 * @param course
301 	 * @author Jesús Rodríguez, Germinus XXI
302 	 * @since 1.0
303 	 */
304 	public void editAssignment(ActionRequest request, ActionResponse response, Course course) {
305 
306 		//get id of assignment to edit
307 		long assignmentId = Long.parseLong(request.getParameter("assignment").trim());
308 		//Obtain the assignment and change its attributes
309     	Assignment newAssignment = null;
310     	newAssignment = this.searchAssignment(course.getAssignments(), assignmentId);
311     	//Common attributes
312     	newAssignment.setName(request.getParameter("name"));
313         newAssignment.setData(request.getParameter("content"));
314         newAssignment.setType(request.getParameter("type"));
315         newAssignment.setDescription(request.getParameter("description"));
316         newAssignment.setCourse(course);
317         
318         String resourceContainerId= request.getParameter("resourceContainerId");
319         ResourceContainer resourceContainer = searchResourceContainer(resourceContainerId,course);
320       
321         newAssignment.setResourceContainer(resourceContainer);
322 
323         Date date = new Date();
324         String startDateString = request.getParameter("startDate");
325         String endDateString = request.getParameter("endDate");
326         SimpleDateFormat formatoDelTexto= new SimpleDateFormat("dd/MM/yyyy");
327         try {
328 			date = formatoDelTexto.parse(startDateString);
329 			newAssignment.setBegintime(date);
330 			date = formatoDelTexto.parse(endDateString);
331 			newAssignment.setEndtime(date);
332 		} catch (ParseException e) {
333 			// TODO Auto-generated catch block
334 			e.printStackTrace();
335 		}
336  	    if (request.getParameter("hideDescriptionBeforeAvailable").equals("true"))
337         	newAssignment.setHideDescriptionBeforeAvailable(true);
338         else
339         	newAssignment.setHideDescriptionBeforeAvailable(false);
340  	    
341 		if (request.getParameter("visible").equals("true")){
342         	newAssignment.setVisible(true);
343         } else 
344         		newAssignment.setVisible(false);
345         
346         //Specific assignment attributes
347         if (request.getParameter("type").equals("Online Activity") || request.getParameter("type").equals("Upload a Single File")){
348         	if (request.getParameter("resubmit").equals("true")){
349         		((AssignmentInteractive) newAssignment).setResubmit(true);
350         	} else
351         		((AssignmentInteractive) newAssignment).setResubmit(false);
352         	if (request.getParameter("emailsToTeacher").equals("true")){
353         		((AssignmentInteractive) newAssignment).setEmailsToTeacher(true);
354         	} else
355         		((AssignmentInteractive) newAssignment).setEmailsToTeacher(false);
356         	if (request.getParameter("preventLateSubmissions").equals("true")){
357         		((AssignmentInteractive) newAssignment).setPreventLateSubmissions(true);
358         	} else
359         		((AssignmentInteractive) newAssignment).setPreventLateSubmissions(false);
360 
361         }
362         if (request.getParameter("type").equals("Upload a Single File")){
363         	((AssignmentUploadASingleFile) newAssignment).setMaxSize(request.getParameter("maxsize"));
364         	if (request.getParameter("allowNotes").equals("true")){
365             	((AssignmentUploadASingleFile) newAssignment).setAllowNotes(true);
366         	} else
367             	((AssignmentUploadASingleFile) newAssignment).setAllowNotes(false);
368         }
369 
370         //update the changes in the assignment
371         course.getAssignments().add(newAssignment);
372         getAssignmentDao().merge(newAssignment);
373 	}
374 	
375 	private void generateCommonCols(RenderResponse response, Locale locale,
376 			Assignment assignment, ResultRow row, String userType) {
377 		//create the link to show the details of the assignment 
378 		Date actualDate= new Date();
379 		if (userType==MerlinWebKeys.STUDENTS && assignment.getHideDescriptionBeforeAvailable()!=null &&
380 				assignment.getHideDescriptionBeforeAvailable() && assignment.getBegintime().after(actualDate)){
381 			row.addText(assignment.getName().toString());
382 		}
383 		else {
384 			PortletURL rowURL = response.createRenderURL();
385 			rowURL.setParameter("action", "assignmentDetails");
386 			rowURL.setParameter("assignmentId", String.valueOf(assignment.getAssignmentid()));
387 			rowURL.setParameter("type", String.valueOf(assignment.getType()));
388 			row.addText(assignment.getName().toString(),rowURL);
389 		}
390 		
391 		String assignmentType= assignment.getType().toString();
392 		if (assignmentType.equals("Online Activity")){
393 				row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.type.online"));
394 		} else
395 			if (assignmentType.equals("Offline Activity")){
396 				row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.type.offline"));
397 			} else
398 				if (assignmentType.equals("Upload a Single File")){
399 					row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.type.upfile"));
400 				}
401 		Date date =assignment.getBegintime();
402 		row.addText(DateFormat.getInstance().format(date));
403 		date =assignment.getEndtime();
404 		row.addText(DateFormat.getInstance().format(date));
405 	}
406 	
407 	private void generateStudentCols(RenderRequest request,
408 			RenderResponse response, Assignment assignment, ResultRow row) {
409 		Date date;
410 		AssignmentResult assignmentResult = assignmentResultManager.searchAssignmentResult(request,response,assignment);
411 		if (assignmentResult!=null){
412 			date =assignmentResult.getSubmissionDate();
413 			row.addText(date.toString());
414 			row.addText(assignmentResult.getGrade());
415 		} else {
416 			row.addText("");
417 			row.addText("");
418 		}
419 		row.addJSP("");
420 	}
421 	
422 	private void generateTable(List<Assignment> assignmentsList, RenderRequest request, 
423 			RenderResponse response, String usertype, ServletContext merlinContext, HttpServletRequest httpReq,
424 			HttpServletResponse httpRes, List<ResultRow> resultRows, Locale locale) {
425 		
426 		Integer numAssignments= new Integer(0);
427 		for (int i = 0; i < assignmentsList.size(); i++) {
428 			Assignment assignment = (Assignment)  assignmentsList.get(i);
429 			if(usertype.equals(MerlinWebKeys.TEACHER) || (usertype.equals(MerlinWebKeys.STUDENTS) && assignment.getVisible())) {
430 					numAssignments++;
431 					ResultRow row = new ResultRow(assignment, assignment.getName(), i);
432 					generateCommonCols(response, locale, assignment, row, usertype);
433 					if(usertype.equals(MerlinWebKeys.TEACHER)){	 
434 						generateTeacherCols(response, locale, assignment, row, merlinContext,httpReq,httpRes);
435 					} else {
436 						generateStudentCols(request, response, assignment, row);
437 						
438 					}
439 					//control to show or not show the menu for assignments (move to generateXXcols
440 					/*if(usertype.equals(MerlinWebKeys.TEACHER)){	 
441 						row.addJSP("/WEB-INF/jsp/assignments/listAssignment/assignmentaction.jsp",merlinContext,httpReq,httpRes);
442 					} else {
443 						row.addJSP("");
444 					}*/ 
445 					resultRows.add(row);
446 			}
447 		}
448 		searchContainer.setTotal(numAssignments);
449 	}
450 	
451 	private void generateTeacherCols(RenderResponse response, Locale locale,
452 			Assignment assignment, ResultRow row, ServletContext merlinContext, 
453 			HttpServletRequest httpReq, HttpServletResponse httpRes) {
454 		PortletURL rowURL;
455 		rowURL = response.createRenderURL();
456 		rowURL.setParameter("action", "resultsList");
457 		rowURL.setParameter("assignmentId", String.valueOf(assignment.getAssignmentid()));
458 		String submissions = new String(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.submissions")+": ");
459 		submissions+=String.valueOf(assignment.getResults().size());
460 		row.addText(submissions,rowURL);
461 		rowURL = response.createRenderURL();
462 		rowURL.setParameter("action", "assigmentPermissions");
463 		rowURL.setParameter("assignmentId", String.valueOf(assignment.getAssignmentid()));
464 		if (assignment.getVisible()==null){ //this option never should happen (except taken data from default-data.xml)
465 			row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.visible"),rowURL);
466 		}
467 		else
468 			if (assignment.getVisible()){
469 				row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.visible"),rowURL);
470 			}
471 			else {
472 				row.addText(ResourceBundle.getBundle("messages",locale).getString("portlet.assignments.hidden"),rowURL);
473 			}
474 		row.addJSP("/WEB-INF/jsp/assignments/listAssignment/assignmentaction.jsp",merlinContext,httpReq,httpRes);
475 	}
476 	
477 	/**
478 	 * Get Assignment and return a Assignment object
479 	 * @param assignmentId
480 	 * @param course
481 	 * @return Assignment
482 	 */
483 	public Assignment getAssignment(Long assignmentId, Course course){
484 		//get the course
485 		Assignment assignment= null;
486 		//search for the assignment
487 		Iterator<Assignment> assignmentsIterator = course.getAssignments().iterator();
488 		boolean notFound= true;
489 		while (assignmentsIterator.hasNext() && notFound){
490 			assignment = assignmentsIterator.next();
491 	    	if(assignment.getAssignmentid() == assignmentId) {
492 	    		notFound=false;
493 	    	}
494 		}
495 		return assignment;
496 	}
497 	
498 	/**
499 	 * @return the assignmentDao
500 	 */
501 	public AssignmentDao getAssignmentDao() {
502 		return assignmentDao;
503 	}
504 	
505 	public AssignmentResultManager getAssignmentResultManager() {
506 		return assignmentResultManager;
507 	}
508 	
509 	/**
510 	 * Get Assignment and return a List of Assignments objects
511 	 * @param assignmentName
512 	 * @param course
513 	 * @return List<Assignment>
514 	 */
515 	private List<Assignment> getAssignmentsByName(String assignmentName, Course course){
516 		Assignment assignment;
517 		List<Assignment> assignmentsList= new ArrayList<Assignment>() ; 
518 		//search for the assignment
519 		for (Iterator<Assignment> i = course.getAssignments().iterator(); i.hasNext();){
520 			assignment = i.next();
521 	    	if(assignment.getName().equals(assignmentName)) {//the name is equal to the param
522 	    		assignmentsList.add(assignment);
523 	    	} else {
524    		    		if(assignment.getName().contains(assignmentName)) {//the param is a part of the name
525    		    			assignmentsList.add(assignment);
526    		    		}
527 	    	  }
528 	    }
529 		return assignmentsList; 
530 	}
531 	
532 	/**
533 	 * 
534 	 * @param studentsSet
535 	 * @param studentId
536 	 * @return
537 	 */
538 	public Student getAssignmentStudent(Set<Student> studentsSet, Long studentId){
539 		Student student= null;
540 		Iterator<Student> studentsIterator = studentsSet.iterator();
541 		boolean notFound = true;
542 		while (studentsIterator.hasNext() && notFound) {
543 			student= studentsIterator.next();
544 	    	if(student.getId().getUserid() == studentId){
545 	    		 notFound=false;
546 	    	}
547 		}
548 		return student;
549 	}
550 		
551 	/**
552 	 * 
553 	 * @param teachersSet
554 	 * @param teacherId
555 	 * @return
556 	 */
557 	public Teacher getAssignmentTeacher(Set<Teacher> teachersSet, Long teacherId){
558 		Teacher teacher= null;
559 		Iterator<Teacher> teachersIterator = teachersSet.iterator();
560 		boolean notFound=true;
561 		while (teachersIterator.hasNext() && notFound){
562 			teacher= teachersIterator.next();
563 	    	if(teacher.getId().getUserid() == teacherId){
564 	    		 notFound=false;
565 	    	}
566 		}
567 		return teacher;
568 	}
569 	public CourseManager getCourseManager() {
570 		return courseManager;
571 	}
572 
573 	public ILiferayUtil getLiferayUtil() {
574 		return liferayUtil;
575 	}
576 	
577 	/**
578 	 * @return the merlinUtil
579 	 */
580 	public IMerlinUtil getMerlinUtil() {
581 		return merlinUtil;
582 	}
583 	
584 	/**
585 	 * @return the liferayUtil
586 	 */
587 	public IUserUtil getUserUtil() {
588 		return userUtil;
589 	}
590 	
591 	/**
592 	 * Process the list of assignments for fill the SearchContainer.
593 	 * @param request
594 	 * @param response
595 	 * @param course
596 	 * @param userType
597 	 * @return model
598 	 * @throws SystemException 
599 	 * @throws PortalException 
600 	 */ 
601 	public Map<String, SearchContainer> listAssignment(RenderRequest request,RenderResponse response,Course course, String usertype) 
602 				throws PortalException, SystemException{
603 		//get a set of assignments in the course
604 		Set<Assignment> assignmentsSet= course.getAssignments();
605 		List<Assignment> assignmentsList = new ArrayList<Assignment>(assignmentsSet);
606 		//sort the list of assignments:
607 		Collections.sort(assignmentsList, new NameAssignmentComparator());
608 		
609 		Map<String, SearchContainer> model;
610 		
611 		model=createSearchContainer(request, response, usertype, assignmentsList);
612 		
613 		return model;
614 	}
615 	
616 	/**
617 	 * Process the list of assignments filtered with the parameter search for fill the 
618 	 * SearchContainer.
619 	 * @param request
620 	 * @param response
621 	 * @param course
622 	 * @param userType
623 	 * @return model
624 	 * @throws SystemException 
625 	 * @throws PortalException 
626 	 */ 
627 	public Map<String, SearchContainer> listAssignmentSearch(RenderRequest request, RenderResponse response, Course course) throws PortalException, SystemException {
628 		//get a set of assignments in the course
629 		List<Assignment> assignmentsList ; 
630 		//get a list of assignments which name is equals of the search keywords
631 		assignmentsList=getAssignmentsByName(request.getParameter("search"), course);
632 		Map<String, SearchContainer> model;
633 		//get the user type: student or teacher
634 		String usertype= merlinUtil.getUserType(request, response, course.getGroupId());
635 		Collections.sort(assignmentsList, new NameAssignmentComparator());
636 		model=createSearchContainer(request, response, usertype, assignmentsList);
637 		return model;
638 	}
639 	
640 	public Assignment searchAssignment(ActionRequest request, ActionResponse response) {
641 		Long assignmentId =	new Long(request.getParameter("assignmentId"));
642 		//get the courseID with the groupId of the current community
643 		long courseId = liferayUtil.getComunityGroupId(request, response);
644 		//get the course 
645 		Course course = courseManager.getCourse(courseId);
646 		//get a set of assignments in the course
647 		Set<Assignment> assignmentsSet= course.getAssignments();
648 		return searchAssignment(assignmentsSet, assignmentId);
649 	}
650 
651 	/**
652 	 * @param request
653 	 * @param response
654 	 * @return
655 	 * @author Jesús Rodríguez, Germinus XXI
656 	 * @since 1.0
657 	 */
658 	public Assignment searchAssignment(RenderRequest request, RenderResponse response){
659 		
660 		Long assignmentId =	new Long(request.getParameter("assignmentId"));
661 		//get the courseID with the groupId of the current community
662 		long courseId = liferayUtil.getComunityGroupId(request, response);
663 		//get the course 
664 		Course course = courseManager.getCourse(courseId);
665 		//get a set of assignments in the course
666 		Set<Assignment> assignmentsSet= course.getAssignments();
667 		
668 		return searchAssignment(assignmentsSet, assignmentId);
669 	}
670 
671 	/**
672      * @param assignmentsSet
673      * @param id
674      * @return Assignment
675      */
676 	public Assignment searchAssignment(Set<Assignment> assignmentsSet, Long assignmentId){
677 		Assignment assignment=null;
678 		
679 		for (Iterator<Assignment> i = assignmentsSet.iterator(); i.hasNext();){
680 	    	assignment= i.next();
681 	    	if(assignment.getAssignmentid() == assignmentId){
682 	    			 return assignment;
683 	    	}
684 	    }
685 		return null;
686 	}
687 
688 	/**
689 	 * Search in the course the Resource container with the id resourceContainerId
690 	 * @param resourceContainerId
691 	 * @param course
692 	 * @return ResourceContainer
693 	 */
694 	private ResourceContainer searchResourceContainer(String resourceContainerId, Course course) {
695 		List<ResourceContainer> resourceContainerList = course.getResourceContainers();
696         int i=1; boolean notFound=true;
697         ResourceContainer resourceContainer=null;
698         while (i<resourceContainerList.size() && notFound){
699         	resourceContainer=resourceContainerList.get(i);
700         	notFound=(resourceContainer.getIdResourceContainer()!=Long.parseLong(resourceContainerId));
701         	i++;
702         }
703 		return resourceContainer;
704 	}
705 
706 	/**
707 	 * @param assignmentDao the assignmentDao to set
708 	 */
709 	public void setAssignmentDao(AssignmentDao assignmentDao) {
710 		this.assignmentDao = assignmentDao;
711 	}
712 
713 	public void setAssignmentResultManager(
714 			AssignmentResultManager assignmentResultManager) {
715 		this.assignmentResultManager = assignmentResultManager;
716 	}
717 	public void setCourseManager(CourseManager courseManager) {
718 		this.courseManager = courseManager;
719 	}
720 
721 	public void setLiferayUtil(ILiferayUtil liferayUtil) {
722 		this.liferayUtil = liferayUtil;
723 	}
724 
725 	/**
726 	 * @param merlinUtil the merlinUtil to set
727 	 */
728 	public void setMerlinUtil(IMerlinUtil merlinUtil) {
729 		this.merlinUtil = merlinUtil;
730 	}
731 
732 	/**
733 	 * @param liferayUtil the liferayUtil to set
734 	 */
735 	public void setUserUtil(IUserUtil userUtil) {
736 		this.userUtil = userUtil;
737 	}
738 
739 }