package fi.otavanopisto.pyramus.json.settings; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import fi.internetix.smvc.controllers.JSONRequestContext; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.grading.GradeDAO; import fi.otavanopisto.pyramus.dao.grading.GradingScaleDAO; import fi.otavanopisto.pyramus.domainmodel.grading.Grade; import fi.otavanopisto.pyramus.domainmodel.grading.GradingScale; import fi.otavanopisto.pyramus.framework.JSONRequestController; import fi.otavanopisto.pyramus.framework.UserRole; public class EditGradingScaleJSONRequestController extends JSONRequestController { public void process(JSONRequestContext jsonRequestContext) { GradeDAO gradeDAO = DAOFactory.getInstance().getGradeDAO(); GradingScaleDAO gradingScaleDAO = DAOFactory.getInstance().getGradingScaleDAO(); Long gradingScaleId = NumberUtils.createLong(jsonRequestContext.getRequest().getParameter("gradingScaleId")); String name = jsonRequestContext.getRequest().getParameter("name"); String description = jsonRequestContext.getRequest().getParameter("description"); GradingScale gradingScale = gradingScaleDAO.findById(gradingScaleId); gradingScaleDAO.update(gradingScale, name, description); Set<Long> existingGrades = new HashSet<>(); int rowCount = NumberUtils.createInteger(jsonRequestContext.getRequest().getParameter("gradesTable.rowCount")).intValue(); for (int i = 0; i < rowCount; i++) { String colPrefix = "gradesTable." + i; String gradeIdParam = jsonRequestContext.getRequest().getParameter(colPrefix + ".gradeId"); Long gradeId = StringUtils.isBlank(gradeIdParam) ? null : NumberUtils.createLong(gradeIdParam); String gradeName = jsonRequestContext.getRequest().getParameter(colPrefix + ".name"); String gradeQualification = jsonRequestContext.getRequest().getParameter(colPrefix + ".qualification"); String gradeGPAParam = jsonRequestContext.getRequest().getParameter(colPrefix + ".GPA"); String gradeDescription = jsonRequestContext.getRequest().getParameter(colPrefix + ".description"); Boolean passingGrade = "1".equals(jsonRequestContext.getRequest().getParameter(colPrefix + ".passingGrade")); Double gradeGPA = StringUtils.isBlank(gradeGPAParam) ? null : NumberUtils.createDouble(gradeGPAParam); if (gradeId != null) { Grade grade = gradeDAO.findById(gradeId); gradeDAO.update(grade, gradeName, gradeDescription, passingGrade, gradeGPA, gradeQualification); existingGrades.add(grade.getId()); } else { Grade grade = gradeDAO.create(gradingScale, gradeName, gradeDescription, passingGrade, gradeGPA, gradeQualification); existingGrades.add(grade.getId()); } } List<Grade> grades = gradingScale.getGrades(); for (int i = grades.size() - 1; i >= 0; i--) { Grade grade = grades.get(i); if (!existingGrades.contains(grade.getId())) gradingScale.removeGrade(grade); } jsonRequestContext.setRedirectURL(jsonRequestContext.getReferer(true)); } public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.MANAGER, UserRole.STUDY_PROGRAMME_LEADER, UserRole.ADMINISTRATOR }; } }