import java.util.*;
public class CourseWithEnrollmentEvent {
private String courseName = "default name";
private ArrayList<String> students = new ArrayList<String>();
private int enrollmentCap = 10;
private ArrayList<EnrollmentListener> enrollmentListenerList;
public CourseWithEnrollmentEvent() {
}
public CourseWithEnrollmentEvent(String courseName) {
this.courseName = courseName;
}
public String getCourseName() {
return courseName;
}
public void addStudent(String student) {
if (students.size() == enrollmentCap)
processEvent(new EnrollmentEvent(this,
student, enrollmentCap));
else
students.add(student);
}
public ArrayList<String> getStudents() {
return students;
}
public int getNumberOfStudents() {
return students.size();
}
public int getEnrollmentCap() {
return enrollmentCap;
}
public void setEnrollmentCap(int enrollmentCap) {
this.enrollmentCap = enrollmentCap;
}
public synchronized void addEnrollmentListener
(EnrollmentListener listener) {
if (enrollmentListenerList == null) {
enrollmentListenerList = new ArrayList<EnrollmentListener>(2);
}
if (!enrollmentListenerList.contains(listener)) {
enrollmentListenerList.add(listener);
}
}
public synchronized void removeEnrollmentListener
(EnrollmentListener listener) {
if (enrollmentListenerList !=
null && enrollmentListenerList.contains(listener)) {
enrollmentListenerList.remove(listener);
}
}
private void processEvent(EnrollmentEvent e) {
ArrayList<EnrollmentListener> list;
synchronized (this) {
if (enrollmentListenerList == null) return;
list = (ArrayList<EnrollmentListener>)
enrollmentListenerList.clone();
}
for (int i = 0; i < list.size(); i++) {
EnrollmentListener listener = (EnrollmentListener)list.get(i);
listener.enrollmentExceeded(e);
}
}
}