package observer.pattern; import java.util.Observable; import java.util.Vector; import javax.swing.JOptionPane; import observer.CourseRecord; /** * Represents a vector of CourseRecords. */ public class CourseData extends Observable { /** * Constructs a CourseData object */ public CourseData() { this.courseData = new Vector<CourseRecord>(); } /** * Add a new CourseRecord object * * @param courseRecord * the CourseRecord to be added */ public void addCourseRecord(CourseRecord courseRecord) { boolean alreadyExists = false; for (int i = 0; i < courseData.size(); i++) { CourseRecord record = courseData.elementAt(i); if (record.getName().equals(courseRecord.getName())) { alreadyExists = true; JOptionPane .showMessageDialog( null, "Warning: Attempt to add new course with an already existing name", "alert", JOptionPane.ERROR_MESSAGE); i = courseData.size(); // exit the loop } } if (!alreadyExists) this.courseData.addElement(courseRecord); this.notifyObservers(); } /** * Update an existing CourseRecord object * * @param subjectName * the name CourseRecord to be updated * @param numOfStudents * the new number of students for this course */ public void changeCourseRecord(String subjectName, int numOfStudents) { for (int i = 0; i < courseData.size(); i++) { CourseRecord record = courseData.elementAt(i); if (record.getName().equals(subjectName)) { record.setNumOfStudents(numOfStudents); i = courseData.size(); } } this.notifyObservers(); } /** * Return a copy of the vector of course data. Used by Observers to pull * data. * * @return vector of course data */ public Vector<CourseRecord> getUpdate() { return (Vector<CourseRecord>) courseData.clone(); } private Vector<CourseRecord> courseData; }