Skip to content
Snippets Groups Projects
Commit 1dbc65da authored by uyth's avatar uyth
Browse files

Updated validation for checking hours for programs

parent 2732ee12
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,11 @@
*/
package tdt4250_assignment.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.util.Diagnostic;
......@@ -216,24 +221,74 @@ public class Tdt4250_assignmentValidator extends EObjectValidator {
* Validates the validateHours constraint of '<em>Course Instance</em>'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @generated NOT
*/
public boolean validateCourseInstance_validateHours(CourseInstance courseInstance, DiagnosticChain diagnostics,
public boolean validateCourseInstance_validateHours(
CourseInstance instance,
DiagnosticChain diagnostics,
Map<Object, Object> context) {
// TODO implement the constraint
// -> specify the condition that violates the constraint
// -> verify the diagnostic details, including severity, code, and message
// Ensure that you remove @generated or mark it @generated NOT
if (false) {
// set required hours for schedule types
int requiredLab = instance.getLabHours();
int requiredLecture = instance.getLectureHours();
Collection<StudyProgramCode> studyProgramCodes =
instance.getStudyPrograms();
// initialize map to counters
Map<StudyProgramCode, Map<ScheduleSlotType, Integer>> programToCounterMap;
programToCounterMap = new HashMap<>();
for (StudyProgramCode program : studyProgramCodes) {
programToCounterMap.put(program, new HashMap<>());
programToCounterMap.get(program).put(ScheduleSlotType.LAB, 0);
programToCounterMap.get(program).put(ScheduleSlotType.LECTURE, 0);
}
TimeTable timeTable = instance.getTimeTable();
// add hours to counters
for (ScheduleSlot slot : timeTable.getSchedule()) {
int hours = slot.getTo() - slot.getFrom();
for (StudyProgramCode studyProgram : slot.getStudyPrograms()) {
if (studyProgramCodes.contains(studyProgram)) {
ScheduleSlotType type = slot.getType();
Map<ScheduleSlotType, Integer> counter =
programToCounterMap.get(studyProgram);
int hoursForProgram = counter.get(type);
counter.put(type, hoursForProgram + hours);
programToCounterMap.put(studyProgram, counter);
}
}
}
// validate hours
List<StudyProgramCode> invalidPrograms;
invalidPrograms = new ArrayList<StudyProgramCode>();
for (StudyProgramCode program : programToCounterMap.keySet()) {
int actualLab = programToCounterMap
.get(program).get(ScheduleSlotType.LECTURE);
int actualLecture = programToCounterMap
.get(program).get(ScheduleSlotType.EXERCISE);
if (actualLab < requiredLab || actualLecture < requiredLecture) {
invalidPrograms.add(program);
}
}
if (!invalidPrograms.isEmpty()) {
if (diagnostics != null) {
diagnostics.add(
createDiagnostic(Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0, "_UI_GenericConstraint_diagnostic",
new Object[] { "validateHours", getObjectLabel(courseInstance, context) },
new Object[] { courseInstance }, context));
for (StudyProgramCode studyProgram : invalidPrograms) {
diagnostics.add(createDiagnostic(
Diagnostic.ERROR, DIAGNOSTIC_SOURCE, 0,
"Too few hours per week for " + studyProgram + ".",
new Object[] {"validateHours", getObjectLabel(
instance, context) }, new Object[] { instance },
context));
}
}
return false;
}
return true;
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment