package fi.otavanopisto.pyramus.json.students;
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.base.PersonDAO;
import fi.otavanopisto.pyramus.dao.base.StudyProgrammeDAO;
import fi.otavanopisto.pyramus.dao.students.StudentGroupDAO;
import fi.otavanopisto.pyramus.domainmodel.base.Person;
import fi.otavanopisto.pyramus.domainmodel.base.StudyProgramme;
import fi.otavanopisto.pyramus.domainmodel.students.Student;
import fi.otavanopisto.pyramus.domainmodel.students.StudentGroup;
import fi.otavanopisto.pyramus.framework.JSONRequestController;
import fi.otavanopisto.pyramus.framework.UserRole;
import fi.otavanopisto.pyramus.persistence.search.PersonFilter;
import fi.otavanopisto.pyramus.persistence.search.SearchResult;
/**
* Request handler for searching students.
*
* @author antti.viljakainen
*/
public class SearchStudentsDialogJSONRequestContoller extends JSONRequestController {
public void process(JSONRequestContext jsonRequestContext) {
StudentGroupDAO studentGroupDAO = DAOFactory.getInstance().getStudentGroupDAO();
PersonDAO personDAO = DAOFactory.getInstance().getPersonDAO();
StudyProgrammeDAO studyProgrammeDAO = DAOFactory.getInstance().getStudyProgrammeDAO();
Integer resultsPerPage = NumberUtils.createInteger(jsonRequestContext.getRequest().getParameter("maxResults"));
if (resultsPerPage == null) {
resultsPerPage = 10;
}
Integer page = NumberUtils.createInteger(jsonRequestContext.getRequest().getParameter("page"));
if (page == null) {
page = 0;
}
SearchResult<Person> searchResult;
String query = jsonRequestContext.getRequest().getParameter("query");
PersonFilter personFilter = (PersonFilter) jsonRequestContext.getEnum("studentFilter", PersonFilter.class);
StudyProgramme studyProgramme = null;
StudentGroup studentGroup = null;
Long studyProgrammeId = jsonRequestContext.getLong("studyProgrammeId");
Long studentGroupId = jsonRequestContext.getLong("studentGroupId");
if (studyProgrammeId.intValue() != -1)
studyProgramme = studyProgrammeDAO.findById(studyProgrammeId);
if (studentGroupId.intValue() != -1)
studentGroup = studentGroupDAO.findById(studentGroupId);
searchResult = personDAO.searchPersonsBasic(resultsPerPage, page, query, personFilter, studyProgramme, studentGroup);
List<Map<String, Object>> results = new ArrayList<>();
List<Person> persons = searchResult.getResults();
for (Person person : persons) {
Student student = person.getLatestStudent();
if (student != null) {
Map<String, Object> info = new HashMap<>();
info.put("personId", person.getId());
info.put("id", student.getId());
info.put("firstName", student.getFirstName());
info.put("lastName", student.getLastName());
info.put("archived", student.getArchived());
info.put("lodging", Boolean.toString(student.getLodging()));
results.add(info);
}
}
String statusMessage;
Locale locale = jsonRequestContext.getRequest().getLocale();
if (searchResult.getTotalHitCount() > 0) {
statusMessage = Messages.getInstance().getText(
locale,
"students.searchStudents.searchStatus",
new Object[] { searchResult.getFirstResult() + 1, searchResult.getLastResult() + 1,
searchResult.getTotalHitCount() });
}
else {
statusMessage = Messages.getInstance().getText(locale, "students.searchStudents.searchStatusNoMatches");
}
jsonRequestContext.addResponseParameter("results", results);
jsonRequestContext.addResponseParameter("statusMessage", statusMessage);
jsonRequestContext.addResponseParameter("pages", searchResult.getPages());
jsonRequestContext.addResponseParameter("page", searchResult.getPage());
}
public UserRole[] getAllowedRoles() {
return new UserRole[] { UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR };
}
}