courseChanged(course, ChangeListener.TYPE_REMOVE);
    public void courseChanged(Course course, int type) throws RemoteException {        Timetable timetable = mainFrame.getModel().getTimetable();        if (timetable == null)            return;        try {            if (ChangeListener.TYPE_ADD == type) {                if (course.getBeginDate().getTimeInMillis() >= mainFrame.getBeginPeriod().getTimeInMillis() &&                        course.getEndDate().getTimeInMillis() <= mainFrame.getEndPeriod().getTimeInMillis()) {                    course.getBeginDate().set(Calendar.HOUR_OF_DAY, course.getBeginDate().get(Calendar.HOUR_OF_DAY) - (course.getBeginDate().get(Calendar.DST_OFFSET) == 0 ? 1 : 2));                    course.getEndDate().set(Calendar.HOUR_OF_DAY, course.getEndDate().get(Calendar.HOUR_OF_DAY) - (course.getEndDate().get(Calendar.DST_OFFSET) == 0 ? 1 : 2));                                        // si le cours n'appartient pas l'emploi du temps de la formation courante                    if (timetable.getFormation() != null &&                            !timetable.getFormation().getIdFormation().equals(course.getIdFormation()))                        return;                                        // si le cours n'appartient pas l'emploi du temps du groupe courant                    if (timetable.getGroup() != null) {                        TakePartGroupSubjectCourse takePart = (TakePartGroupSubjectCourse) course.getGroupsSubjectsTakingPart().toArray()[0];                        if (!timetable.getGroup().getIdGroup().equals(takePart.getIdGroup()))                            return;                    }                                        // si le cours n'appartient pas  l'emploi du temps de l'enseignant courant                    if (timetable.getTeacher() != null) {                        boolean show = false;                        for (Iterator i = course.getTeachers().iterator(); i.hasNext(); ) {                            User teacher = (User) i.next();                            if (teacher.getIdUser().equals(timetable.getTeacher().getIdUser())) {                                show = true;                                break;                            }                        }                        System.out.println(show);                        if (!show)                            return;                    }                                        // si le cours n'appartient pas  l'emploi du temps du local                    if (timetable.getRoom() != null) {                        boolean show = false;                        for (Iterator i = course.getRooms().iterator(); i.hasNext(); ) {                            Room room = (Room) i.next();                            if (room.getIdRoom().equals(timetable.getRoom().getIdRoom())) {                                show = true;                                break;                            }                        }                        if (!show)                            return;                    }                                        // si le cours n'appartient pas  l'emploi du temps du matriel                    if (timetable.getMaterial() != null) {                        boolean show = false;                        for (Iterator i = course.getMaterials().iterator(); i.hasNext(); ) {                            Material material = (Material) i.next();                            if (material.getIdMaterial().equals(timetable.getMaterial().getIdMaterial())) {                                show = true;                                break;                            }                        }                        if (!show)                            return;                    }                    timetable.addCourse(course);                } else {                    return;                }            } else if (ChangeListener.TYPE_REMOVE == type) {                if (!timetable.removeCourse(course))                    return;                mainFrame.setCourseSelected(null);            } else if (ChangeListener.TYPE_MODIFY == type) {                courseChanged(course, ChangeListener.TYPE_ADD);                courseChanged(course, ChangeListener.TYPE_REMOVE);                return;            }            mainFrame.getModel().fireRefreshCourse(course, type);        } catch (InterruptedException e) {            e.printStackTrace();        }    }