package com.teotigraphix.caustic.mediator; import org.androidtransfuse.event.EventObserver; import com.google.inject.Inject; import com.teotigraphix.caustic.controller.IApplicationController; import com.teotigraphix.caustk.controller.ICaustkController; import com.teotigraphix.caustk.project.IProjectManager.OnProjectManagerChange; import com.teotigraphix.caustk.project.IProjectManager.ProjectManagerChangeKind; // Mediators never dispatch events!, only listen and act with logic // that could eventually be put in a Command public abstract class MediatorBase implements ICaustkMediator { private ICaustkController controller; private IApplicationController applicationController; public final IApplicationController getApplicationController() { return applicationController; } public final ICaustkController getController() { return controller; } //-------------------------------------------------------------------------- // Constructor //-------------------------------------------------------------------------- public MediatorBase() { } @Inject public void setApplicationController(IApplicationController applicationController) { this.applicationController = applicationController; controller = applicationController.getController(); applicationController.registerMeditor(this); } /** * Register {@link ICaustkController#getDispatcher()} events. * <p> * Called once when the controller is set. */ protected void registerObservers() { controller.getDispatcher().register(OnProjectManagerChange.class, new EventObserver<OnProjectManagerChange>() { @Override public void trigger(OnProjectManagerChange object) { if (object.getKind() == ProjectManagerChangeKind.CREATE) { onProjectCreate(); } else if (object.getKind() == ProjectManagerChangeKind.LOAD) { onProjectLoad(); } else if (object.getKind() == ProjectManagerChangeKind.SAVE) { onProjectSave(); } else if (object.getKind() == ProjectManagerChangeKind.SAVE_COMPLETE) { } } }); } @Override public void onRegisterObservers() { registerObservers(); } /** * @see OnMediatorRegister */ public abstract void onRegister(); protected void onProjectSave() { } protected void onProjectLoad() { } protected void onProjectCreate() { } }