Class Controller

java.lang.Object
org.puremvc.java.core.Controller
All Implemented Interfaces:
IController

public class Controller
extends java.lang.Object
implements IController
A Singleton IController implementation.

In PureMVC, the Controller class follows the 'Command and Controller' strategy, and assumes these responsibilities:

  • Remembering which ICommands are intended to handle which INotifications.
  • Registering itself as an IObserver with the View for each INotification that it has an ICommand mapping for.
  • Creating a new instance of the proper ICommand to handle a given INotification when notified by the View.
  • Calling the ICommand's execute method, passing in the INotification.

Your application must register ICommands with the Controller.

The simplest way is to subclass Facade, and use its initializeController method to add your registrations.

See Also:
View, Observer, Notification, SimpleCommand, MacroCommand
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.util.concurrent.ConcurrentMap<java.lang.String,​java.util.function.Supplier<ICommand>> commandMap  
    protected static IController instance  
    protected java.lang.String SINGLETON_MSG  
    protected IView view  
  • Constructor Summary

    Constructors 
    Constructor Description
    Controller()
    Constructor.
  • Method Summary

    Modifier and Type Method Description
    void executeCommand​(INotification notification)
    If an ICommand has previously been registered to handle a the given INotification, then it is executed.
    static IController getInstance​(java.util.function.Supplier<IController> factory)
    Controller Singleton Factory method.
    boolean hasCommand​(java.lang.String notificationName)
    Check if a Command is registered for a given Notification
    void initializeController()
    Initialize the Singleton Controller instance.
    void registerCommand​(java.lang.String notificationName, java.util.function.Supplier<ICommand> commandSupplier)
    Register a particular ICommand class as the handler for a particular INotification.
    void removeCommand​(java.lang.String notificationName)
    Remove a previously registered ICommand to INotification mapping.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • Controller

      public Controller()
      Constructor.

      This IController implementation is a Singleton, so you should not call the constructor directly, but instead call the static Singleton Factory method Controller.getInstance()

      Throws:
      java.lang.Error - Error if Singleton instance has already been constructed
  • Method Details

    • initializeController

      public void initializeController()

      Initialize the Singleton Controller instance.

      Called automatically by the constructor.

      Note that if you are using a subclass of View in your application, you should also subclass Controller and override the initializeController method in the following way:

       // ensure that the Controller is talking to my IView implementation
       override public function initializeController(  ) : void
       {
           view = MyView.getInstance(() -> new MyView());
       }
       
       
    • getInstance

      public static IController getInstance​(java.util.function.Supplier<IController> factory)

      Controller Singleton Factory method.

      Parameters:
      factory - controller supplier function
      Returns:
      the Singleton instance of Controller
    • executeCommand

      public void executeCommand​(INotification notification)

      If an ICommand has previously been registered to handle a the given INotification, then it is executed.

      Specified by:
      executeCommand in interface IController
      Parameters:
      notification - an INotification
    • registerCommand

      public void registerCommand​(java.lang.String notificationName, java.util.function.Supplier<ICommand> commandSupplier)

      Register a particular ICommand class as the handler for a particular INotification.

      If an ICommand has already been registered to handle INotifications with this name, it is no longer used, the new ICommand is used instead.

      The Observer for the new ICommand is only created if this the first time an ICommand has been regisered for this Notification name.

      Specified by:
      registerCommand in interface IController
      Parameters:
      notificationName - the name of the INotification
      commandSupplier - the Class of the ICommand
    • removeCommand

      public void removeCommand​(java.lang.String notificationName)

      Remove a previously registered ICommand to INotification mapping.

      Specified by:
      removeCommand in interface IController
      Parameters:
      notificationName - the name of the INotification to remove the ICommand mapping for
    • hasCommand

      public boolean hasCommand​(java.lang.String notificationName)

      Check if a Command is registered for a given Notification

      Specified by:
      hasCommand in interface IController
      Parameters:
      notificationName - notification name
      Returns:
      whether a Command is currently registered for the given notificationName.