PlaceController class
In charge of the user's location in the app.
class PlaceController { //private static final Logger log = Logger.getLogger(PlaceController.class.getName()); final EventBus _eventBus; Delegate _delegate; Place _where = Place.NOWHERE; // /** // * Legacy method tied to the old location for {@link EventBus}. // * // * @deprecated use {@link #PlaceController(EventBus)} // */ // @Deprecated // PlaceController(com.google.gwt.event.shared.EventBus _eventBus) { // this((EventBus) _eventBus); // } // /** // * Legacy method tied to the old location for {@link EventBus}. // * // * @deprecated use {@link #PlaceController(EventBus, Delegate)} // */ // @Deprecated // PlaceController(com.google.gwt.event.shared.EventBus _eventBus, Delegate _delegate) { // this((EventBus) _eventBus, _delegate); // } /** * Create a new PlaceController. * * @param _eventBus the {@link EventBus} * @param _delegate the {@link Delegate} in charge of Window-related events */ PlaceController(this._eventBus, [Delegate delegate = null]) { if (delegate == null) { _delegate = new DefaultDelegate(); } else { _delegate = delegate; } // _delegate.addWindowClosingHandler(new ClosingHandlerAdapter((ClosingEvent event) { String warning = maybeGoTo(Place.NOWHERE); if (warning != null) { event.setMessage(warning); } })); } /** * Returns the current place. * * @return a {@link Place} instance */ Place getWhere() { return _where; } /** * Request a change to a new place. It is not a given that we'll actually get * there. First a {@link PlaceChangeRequestEvent} will be posted to the event * bus. If any receivers post a warning message to that event, it will be * presented to the user via {@link Delegate#confirm(String)} (which is * typically a call to {@link Window#confirm(String)}). If she cancels, the * current location will not change. Otherwise, the location changes and a * {@link PlaceChangeEvent} is posted announcing the new place. * * @param newPlace a {@link Place} instance */ void goTo(Place newPlace) { // log().fine("goTo: " + newPlace); if (getWhere() == newPlace) { // log().fine("Asked to return to the same place: " + newPlace); return; } String warning = maybeGoTo(newPlace); if (warning == null || _delegate.confirm(warning)) { _where = newPlace; _eventBus.fireEvent(new PlaceChangeEvent(newPlace)); } } // /** // * Visible for testing. // */ // Logger log() { // return log; // } String maybeGoTo(Place newPlace) { PlaceChangeRequestEvent willChange = new PlaceChangeRequestEvent(newPlace); _eventBus.fireEvent(willChange); String warning = willChange.getWarning(); return warning; } }
Constructors
new PlaceController(EventBus _eventBus, [Delegate delegate = null]) #
Create a new PlaceController.
@param eventBus the {@link EventBus} @param delegate the {@link Delegate} in charge of Window-related events
PlaceController(this._eventBus, [Delegate delegate = null]) { if (delegate == null) { _delegate = new DefaultDelegate(); } else { _delegate = delegate; } // _delegate.addWindowClosingHandler(new ClosingHandlerAdapter((ClosingEvent event) { String warning = maybeGoTo(Place.NOWHERE); if (warning != null) { event.setMessage(warning); } })); }
Methods
Place getWhere() #
Returns the current place.
@return a {@link Place} instance
Place getWhere() { return _where; }
void goTo(Place newPlace) #
Request a change to a new place. It is not a given that we'll actually get there. First a {@link PlaceChangeRequestEvent} will be posted to the event bus. If any receivers post a warning message to that event, it will be presented to the user via {@link Delegate#confirm(String)} (which is typically a call to {@link Window#confirm(String)}). If she cancels, the current location will not change. Otherwise, the location changes and a {@link PlaceChangeEvent} is posted announcing the new place.
@param newPlace a {@link Place} instance
void goTo(Place newPlace) { // log().fine("goTo: " + newPlace); if (getWhere() == newPlace) { // log().fine("Asked to return to the same place: " + newPlace); return; } String warning = maybeGoTo(newPlace); if (warning == null || _delegate.confirm(warning)) { _where = newPlace; _eventBus.fireEvent(new PlaceChangeEvent(newPlace)); } }