StatusBarPresenter.java

package org.microcol.gui;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;

import org.microcol.gui.event.ChangeLanguageController;
import org.microcol.gui.event.NextTurnController;
import org.microcol.gui.event.StatusBarMessageController;
import org.microcol.gui.event.StatusBarMessageEvent;
import org.microcol.model.Calendar;

import com.google.common.base.Preconditions;
import com.google.inject.Inject;

public class StatusBarPresenter implements Localized {

	public interface Display {
		
		JLabel getStatusBarDescription();

		JLabel getLabelEra();
	}

	@Inject
	public StatusBarPresenter(final StatusBarPresenter.Display display,
			final StatusBarMessageController statusBarMessageController, final NextTurnController nextTurnController,
			final ChangeLanguageController changeLanguangeController) {
		statusBarMessageController.addListener(event -> {
			display.getStatusBarDescription().setText(event.getStatusMessage());
		});
		nextTurnController.addListener(event -> {
			setYearText(display.getLabelEra(), event.getCalendar());
		});
		changeLanguangeController.addListener(event -> {
			setYearText(display.getLabelEra(), event.getModel().getCalendar());
			display.getStatusBarDescription().setText("");
		});
		display.getLabelEra().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				statusBarMessageController
						.fireEvent(new StatusBarMessageEvent(getText().get("statusBar.era.description")));
			}
		});
		display.getStatusBarDescription().addMouseListener(new MouseAdapter() {
			@Override
			public void mouseEntered(MouseEvent e) {
				statusBarMessageController
						.fireEvent(new StatusBarMessageEvent(getText().get("statusBar.status.description")));
			}
		});
	}

	private final void setYearText(JLabel labelEra, final Calendar calendar) {
		Preconditions.checkNotNull(labelEra);
		Preconditions.checkNotNull(calendar);
		labelEra.setText(getText().get("statusBar.year") + " " + calendar.getCurrentYear() + " AD");
	}

}