/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.dlect.controller.helper.lecture; import com.google.common.collect.Maps; import java.util.Map; import org.dlect.controller.MainController; import org.dlect.controller.event.ControllerEvent; import org.dlect.controller.event.ControllerState; import org.dlect.controller.event.ControllerType; import org.dlect.controller.helper.Controller; import org.dlect.events.Event; import org.dlect.events.EventListener; import org.dlect.logging.ControllerLogger; import org.dlect.model.Database; import org.dlect.model.Semester; import org.dlect.model.Subject; /** * * @author lee */ public class LectureStateUpdater implements EventListener { private static final LectureStateUpdateHandler NO_OP_UPDATE_HANDLER = new LectureStateUpdateHandler(null) { @Override protected void initImpl() { } @Override protected void updateLecturesImpl() { } }; private final Database d; private final Map<Subject, LectureStateUpdateHandler> lectureHandlers = Maps.newHashMap(); protected LectureStateUpdater(Database d) { this.d = d; } @Override public void processEvent(Event e) { if (e instanceof ControllerEvent) { ControllerEvent ce = (ControllerEvent) e; if (ce.getEventID() == ControllerType.SUBJECT && ce.getAfter() == ControllerState.STARTED) { for (Semester sem : d.getSemesters()) { for (Subject subject : sem.getSubjects()) { addHandlerFor(subject); } } } else if (ce.getEventID() == ControllerType.LECTURE && ce.getAfter() != ControllerState.STARTED) { if (ce.getParameter() instanceof Subject) { Subject subject = (Subject) ce.getParameter(); // for (Semester sem : d.getSemesters()) { // for (Subject subject : sem.getSubjects()) { LectureStateUpdateHandler get = lectureHandlers.get(subject); if (get == null) { get = new EmptyLectureStateUpdateHandler(subject); get.init(); } // Subject that it was configured on may not be the same object as the current one. get.setSubject(subject); ControllerLogger.LOGGER.info("Updating for " + subject.getId() + ": " + get.getClass()); get.updateLectures(); lectureHandlers.put(subject, NO_OP_UPDATE_HANDLER); // } // } } } } } private void addHandlerFor(Subject subject) { LectureStateUpdateHandler lsuh; if (subject.getLectures().isEmpty()) { lsuh = new EmptyLectureStateUpdateHandler(subject); } else { lsuh = new UpdatingLectureStateUpdateHandler(subject); } lsuh.init(); lectureHandlers.put(subject, lsuh); } /** * All instances of this class are equal. This returns true iff the object is the same type as this class. * * @param o {@inheritDoc } * * @return {@inheritDoc } */ @Override public boolean equals(Object o) { return o instanceof LectureStateUpdater; } /** * All instances of this class are equal, so all hash codes are the same. * * @return A pre-defined hash code. */ @Override public int hashCode() { return 1029456435; } public static void registerOn(MainController mc) { LectureStateUpdater sdu = new LectureStateUpdater(mc.getDatabaseHandler().getDatabase()); mc.addListener(sdu, Controller.class); } }