package org.matveev.pomodoro4nb; import java.awt.BorderLayout; import java.awt.Container; import java.util.HashMap; import java.util.Map; import java.util.Properties; import javax.swing.JPanel; import org.matveev.pomodoro4nb.controllers.Controller; import org.matveev.pomodoro4nb.utils.Handler; import org.matveev.pomodoro4nb.prefs.PreferencesProvider; import org.matveev.pomodoro4nb.prefs.PreferencesProviderFactory; import org.matveev.pomodoro4nb.task.TaskController; import org.matveev.pomodoro4nb.timer.TimerController; import org.matveev.pomodoro4nb.data.Property; import org.matveev.pomodoro4nb.data.PropertyListener; import org.matveev.pomodoro4nb.utils.Storable; /** * * @author Alexey Matvey */ public class PomodoroMainController implements PropertyListener, Storable { private final Map<String, Controller> controllers = new HashMap<String, Controller>(); private final TimerController timerController; private final TaskController taskController; private final PreferencesProvider provider; public PomodoroMainController() { provider = PreferencesProviderFactory.getPreferencesProvider(); timerController = new TimerController(provider); taskController = new TaskController(provider); registerSubController(TimerController.TIMER_CONTROLLER_ID, timerController); registerSubController(TaskController.TASK_CONTROLLER_ID, taskController); } public Container createContent() { final JPanel content = new JPanel(new BorderLayout()); content.add(controllers.get(TimerController.TIMER_CONTROLLER_ID).createUI(), BorderLayout.NORTH); content.add(controllers.get(TaskController.TASK_CONTROLLER_ID).createUI(), BorderLayout.CENTER); return content; } public void createQuickActionPanel(Container c) { c.add(taskController.createQuickActionPanel(), BorderLayout.SOUTH); } public final <T> T getProperty(Property<T> property) { for (Controller c : controllers.values()) { final T value = c.getProperty(property); if (value != null) { return value; } } return null; } public final void registerSubController(String indentifier, Controller c) { controllers.put(indentifier, c); c.addPropertyListener(this); } public void unregisterSubController(String identifier) { Controller c = controllers.remove(identifier); if (c != null) { c.removePropertyListener(this); } } @Override public void propertyChange(Property<?> property, Object oldValue, Object newValue) { for (Controller c : controllers.values()) { for (Handler handler : c.getHandlers(property)) { handler.handle(oldValue, newValue); } } } public PreferencesProvider getPreferencesProvider() { return provider; } @Override public void restore(Properties props) throws Exception { for (Storable s : controllers.values()) { s.restore(props); } } @Override public void store(Properties props) throws Exception { for (Storable s : controllers.values()) { s.store(props); } } }