package fi.otavanopisto.pyramus.json.projects;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.commons.lang.math.NumberUtils;
import fi.internetix.smvc.controllers.JSONRequestContext;
import fi.otavanopisto.pyramus.I18N.Messages;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.courses.CourseDAO;
import fi.otavanopisto.pyramus.dao.courses.CourseStudentDAO;
import fi.otavanopisto.pyramus.domainmodel.courses.Course;
import fi.otavanopisto.pyramus.framework.JSONRequestController;
import fi.otavanopisto.pyramus.framework.UserRole;
import fi.otavanopisto.pyramus.persistence.search.SearchResult;
public class SearchStudentProjectCoursesJSONRequestController extends JSONRequestController {
public void process(JSONRequestContext requestContext) {
CourseDAO courseDAO = DAOFactory.getInstance().getCourseDAO();
CourseStudentDAO courseStudentDAO = DAOFactory.getInstance().getCourseStudentDAO();
Integer resultsPerPage = NumberUtils.createInteger(requestContext.getRequest().getParameter("maxResults"));
if (resultsPerPage == null) {
resultsPerPage = 10;
}
Integer page = NumberUtils.createInteger(requestContext.getRequest().getParameter("page"));
if (page == null) {
page = 0;
}
String name = requestContext.getString("name");
String tags = requestContext.getString("tags");
SearchResult<Course> searchResult = courseDAO.searchCourses(resultsPerPage, page, name, tags, null, null, null, null, null, null, null, true);
List<Map<String, Object>> results = new ArrayList<>();
List<Course> courses = searchResult.getResults();
for (Course course : courses) {
Long studentCount = courseStudentDAO.countByCourse(course);
Long maxStudentCount = course.getMaxParticipantCount();
Map<String, Object> courseInfo = new HashMap<>();
courseInfo.put("id", course.getId());
courseInfo.put("name", course.getName());
courseInfo.put("nameExtension", course.getNameExtension());
courseInfo.put("moduleId", course.getModule().getId());
if (course.getBeginDate() != null)
courseInfo.put("beginDate", course.getBeginDate().getTime());
if (course.getEndDate() != null)
courseInfo.put("endDate", course.getEndDate().getTime());
courseInfo.put("studentCount", studentCount);
courseInfo.put("maxStudentCount", maxStudentCount);
results.add(courseInfo);
}
String statusMessage;
Locale locale = requestContext.getRequest().getLocale();
if (searchResult.getTotalHitCount() > 0) {
statusMessage = Messages.getInstance().getText(
locale,
"projects.searchStudentProjectCoursesDialog.searchStatus",
new Object[] { searchResult.getFirstResult() + 1, searchResult.getLastResult() + 1,
searchResult.getTotalHitCount() });
}
else {
statusMessage = Messages.getInstance().getText(locale, "projects.searchStudentProjectCoursesDialog.searchStatusNoMatches");
}
requestContext.addResponseParameter("results", results);
requestContext.addResponseParameter("statusMessage", statusMessage);
requestContext.addResponseParameter("pages", searchResult.getPages());
requestContext.addResponseParameter("page", searchResult.getPage());
}
public UserRole[] getAllowedRoles() {
return new UserRole[] { UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR };
}
}