From: Tomas M. <to...@us...> - 2011-01-14 18:24:38
|
Update of /cvsroot/unitime/UniTime/JavaSource/org/unitime/timetable/gwt/server In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv1296/JavaSource/org/unitime/timetable/gwt/server Modified Files: SectioningServer.java CourseLoader.java Log Message: Student Sectioning Solver - enforce course and configuration limits Index: SectioningServer.java =================================================================== RCS file: /cvsroot/unitime/UniTime/JavaSource/org/unitime/timetable/gwt/server/SectioningServer.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SectioningServer.java 13 Jan 2011 23:08:48 -0000 1.3 --- SectioningServer.java 14 Jan 2011 18:24:30 -0000 1.4 *************** *** 331,335 **** for (Iterator<Config> e = course.getOffering().getConfigs().iterator(); e.hasNext();) { Config config = e.next(); ! Config clonedConfig = new Config(config.getId(), config.getName(), clonedOffering); Hashtable<Subpart, Subpart> subparts = new Hashtable<Subpart, Subpart>(); Hashtable<Section, Section> sections = new Hashtable<Section, Section>(); --- 331,335 ---- for (Iterator<Config> e = course.getOffering().getConfigs().iterator(); e.hasNext();) { Config config = e.next(); ! Config clonedConfig = new Config(config.getId(), config.getLimit(), config.getName(), clonedOffering); Hashtable<Subpart, Subpart> subparts = new Hashtable<Subpart, Subpart>(); Hashtable<Section, Section> sections = new Hashtable<Section, Section>(); *************** *** 524,528 **** if (enrollment.getRequest() instanceof CourseRequest) { CourseRequest r = (CourseRequest)enrollment.getRequest(); ! Course course = enrollment.getOffering().getCourse(enrollment.getStudent()); ca.setAssigned(false); ca.setCourseId(course.getId()); --- 524,528 ---- if (enrollment.getRequest() instanceof CourseRequest) { CourseRequest r = (CourseRequest)enrollment.getRequest(); ! Course course = enrollment.getCourse(); ca.setAssigned(false); ca.setCourseId(course.getId()); *************** *** 566,570 **** } else { CourseRequest cr = (CourseRequest)q.getRequest(); ! Course o = q.getOffering().getCourse(q.getStudent()); String ov = o.getSubjectArea() + " " + o.getCourseNumber(); if (overlapingSections.get(cr).size() == 1) --- 566,570 ---- } else { CourseRequest cr = (CourseRequest)q.getRequest(); ! Course o = q.getCourse(); String ov = o.getSubjectArea() + " " + o.getCourseNumber(); if (overlapingSections.get(cr).size() == 1) *************** *** 584,588 **** if (x.getRequest().isAlternative() && x.getRequest() instanceof CourseRequest) { if (--alt == 0) { ! Course o = x.getOffering().getCourse(x.getStudent()); ca.setInstead(o.getSubjectArea() + " " +o.getCourseNumber()); break; --- 584,588 ---- if (x.getRequest().isAlternative() && x.getRequest() instanceof CourseRequest) { if (--alt == 0) { ! Course o = x.getCourse(); ca.setInstead(o.getSubjectArea() + " " +o.getCourseNumber()); break; *************** *** 611,615 **** f.getTime().getEndTimeHeader()); } else { ! Course o = x.getOffering().getCourse(x.getStudent()); Section s = (Section)a; ca.addOverlap(o.getSubjectArea() + " " + o.getCourseNumber() + " " + s.getSubpart().getName()); --- 611,615 ---- f.getTime().getEndTimeHeader()); } else { ! Course o = x.getCourse(); Section s = (Section)a; ca.addOverlap(o.getSubjectArea() + " " + o.getCourseNumber() + " " + s.getSubpart().getName()); *************** *** 635,639 **** TreeSet<Section> sections = new TreeSet<Section>(new EnrollmentSectionComparator()); sections.addAll(enrollment.getSections()); ! Course course = enrollment.getOffering().getCourse(enrollment.getStudent()); ClassAssignmentInterface.CourseAssignment ca = new ClassAssignmentInterface.CourseAssignment(); ca.setAssigned(true); --- 635,639 ---- TreeSet<Section> sections = new TreeSet<Section>(new EnrollmentSectionComparator()); sections.addAll(enrollment.getSections()); ! Course course = enrollment.getCourse(); ClassAssignmentInterface.CourseAssignment ca = new ClassAssignmentInterface.CourseAssignment(); ca.setAssigned(true); Index: CourseLoader.java =================================================================== RCS file: /cvsroot/unitime/UniTime/JavaSource/org/unitime/timetable/gwt/server/CourseLoader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CourseLoader.java 1 Dec 2010 11:10:49 -0000 1.2 --- CourseLoader.java 14 Jan 2011 18:24:30 -0000 1.3 *************** *** 208,212 **** for (Iterator<InstrOfferingConfig> i = io.getInstrOfferingConfigs().iterator(); i.hasNext(); ) { InstrOfferingConfig ioc = i.next(); ! Config config = new Config(ioc.getUniqueId(), courseName + " [" + ioc.getName() + "]", offering); TreeSet<SchedulingSubpart> subparts = new TreeSet<SchedulingSubpart>(new SchedulingSubpartComparator()); subparts.addAll(ioc.getSchedulingSubparts()); --- 208,212 ---- for (Iterator<InstrOfferingConfig> i = io.getInstrOfferingConfigs().iterator(); i.hasNext(); ) { InstrOfferingConfig ioc = i.next(); ! Config config = new Config(ioc.getUniqueId(), (ioc.isUnlimitedEnrollment() ? -1 : ioc.getLimit()), courseName + " [" + ioc.getName() + "]", offering); TreeSet<SchedulingSubpart> subparts = new TreeSet<SchedulingSubpart>(new SchedulingSubpartComparator()); subparts.addAll(ioc.getSchedulingSubparts()); *************** *** 425,429 **** sLog.error("There is a problem assigning " + cr.getName() + " to " + s.getName(DepartmentalInstructor.sNameFormatInitialLast) + " (" + s.getExternalUniqueId() + ") [" + iAcademicSession + "]"); boolean hasLimit = false, hasOverlap = false; ! sections: for (Iterator<Section> i = enrl.getSections().iterator(); i.hasNext();) { Section section = i.next(); if (section.getTime() != null) { --- 425,429 ---- sLog.error("There is a problem assigning " + cr.getName() + " to " + s.getName(DepartmentalInstructor.sNameFormatInitialLast) + " (" + s.getExternalUniqueId() + ") [" + iAcademicSession + "]"); boolean hasLimit = false, hasOverlap = false; ! for (Iterator<Section> i = enrl.getSections().iterator(); i.hasNext();) { Section section = i.next(); if (section.getTime() != null) { *************** *** 439,448 **** sectionx.getName() + " " + sectionx.getTime().getLongName()); hasOverlap = true; - continue sections; } } } } ! if (section.getLimit() >= section.getEnrollments().size()) { sLog.info(" " + section.getSubpart().getName() + " " + section.getName() + (section.getTime() == null ? "" : " " + section.getTime().getLongName()) + " has no space available (limit is "+ section.getLimit() + ")"); --- 439,447 ---- sectionx.getName() + " " + sectionx.getTime().getLongName()); hasOverlap = true; } } } } ! if (section.getLimit() >= 0 && section.getLimit() < 1 + section.getEnrollments().size()) { sLog.info(" " + section.getSubpart().getName() + " " + section.getName() + (section.getTime() == null ? "" : " " + section.getTime().getLongName()) + " has no space available (limit is "+ section.getLimit() + ")"); *************** *** 452,459 **** } hasLimit = true; - continue sections; } sLog.info(" " + section.getSubpart().getName() + " " + section.getName() + (section.getTime() == null ? "" : " " + section.getTime().getLongName())); } if (!hasLimit && !hasOverlap) { for (Iterator<Enrollment> i = r.getModel().conflictValues(r.getInitialAssignment()).iterator(); i.hasNext();) { --- 451,465 ---- } hasLimit = true; } sLog.info(" " + section.getSubpart().getName() + " " + section.getName() + (section.getTime() == null ? "" : " " + section.getTime().getLongName())); } + if (enrl.getConfig().getLimit() >= 0 && enrl.getConfig().getLimit() < 1 + enrl.getConfig().getEnrollments().size()) { + sLog.info(" config " + enrl.getConfig().getName() + " has no space available (limit is "+ enrl.getConfig().getLimit() + ")"); + if (tweakLimits) { + enrl.getConfig().setLimit(enrl.getConfig().getEnrollments().size() + 1); + sLog.info(" limit increased to "+enrl.getConfig().getLimit()); + } + hasLimit = true; + } if (!hasLimit && !hasOverlap) { for (Iterator<Enrollment> i = r.getModel().conflictValues(r.getInitialAssignment()).iterator(); i.hasNext();) { *************** *** 468,472 **** } } ! if (hasLimit && tweakLimits && r.getModel().conflictValues(r.getInitialAssignment()).isEmpty()) { r.assign(0, r.getInitialAssignment()); } --- 474,478 ---- } } ! if (hasLimit && !hasOverlap && tweakLimits && r.getModel().conflictValues(r.getInitialAssignment()).isEmpty()) { r.assign(0, r.getInitialAssignment()); } |