BeniS

GWT-Presenter HidePresenter Event

Feb 16th, 2013
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 30.03 KB | None | 0 0
  1. Index: src/main/java/net/customware/gwt/presenter/client/PresenterHiddenEvent.java
  2. ===================================================================
  3. --- src/main/java/net/customware/gwt/presenter/client/PresenterHiddenEvent.java (revision 0)
  4. +++ src/main/java/net/customware/gwt/presenter/client/PresenterHiddenEvent.java (revision 0)
  5. @@ -0,0 +1,106 @@
  6. +/**
  7. + *
  8. + */
  9. +package net.customware.gwt.presenter.client;
  10. +
  11. +import com.google.gwt.event.shared.GwtEvent;
  12. +
  13. +/**
  14. + * Fired when a {@link Presenter} is hidden.
  15. + *
  16. + * @author James Crosetto
  17. + *
  18. + *
  19. + */
  20. +public class PresenterHiddenEvent extends GwtEvent<PresenterHiddenHandler> {
  21. +
  22. + private static GwtEvent.Type<PresenterHiddenHandler> TYPE = new GwtEvent.Type<PresenterHiddenHandler>();
  23. +
  24. + /**
  25. + * Fires a {@link PresenterHiddenEvent} into the {@link EventBus},
  26. + * specifying that it was the originator.
  27. + *
  28. + * @param eventBus
  29. + * The event bus.
  30. + * @param presenter
  31. + * The presenter.
  32. + */
  33. + public static void fire(EventBus eventBus, Presenter presenter) {
  34. + fire(eventBus, presenter, true);
  35. + }
  36. +
  37. + /**
  38. + * Fires the event into the provided {@link EventBus}.
  39. + *
  40. + * @param eventBus
  41. + * The event bus.
  42. + * @param presenter
  43. + * The presenter.
  44. + * @param originator
  45. + * If <code>true</code>, this presenter was the originator for
  46. + * the request.
  47. + */
  48. + public static void fire(EventBus eventBus, Presenter presenter,
  49. + boolean originator) {
  50. + eventBus.fireEvent(new PresenterHiddenEvent(presenter, originator));
  51. + }
  52. +
  53. + public static GwtEvent.Type<PresenterHiddenHandler> getType() {
  54. + return TYPE;
  55. + }
  56. +
  57. + private final boolean originator;
  58. +
  59. + private final Presenter presenter;
  60. +
  61. + /**
  62. + * Constructor specifying that the provided Presenter is the originator.
  63. + *
  64. + * @param presenter
  65. + * The presenter that has been hidden.
  66. + */
  67. + public PresenterHiddenEvent(Presenter presenter) {
  68. + this(presenter, true);
  69. + }
  70. +
  71. + /**
  72. + * Constructor with the specified Presenter and originator status.
  73. + *
  74. + * @param presenter
  75. + * The presenter that has been hidden.
  76. + * @param originator
  77. + * If <code>true</code>, the presenter is the originator of the
  78. + * hiding chain.
  79. + */
  80. + public PresenterHiddenEvent(Presenter presenter, boolean originator) {
  81. + this.presenter = presenter;
  82. + this.originator = originator;
  83. + }
  84. +
  85. + @Override
  86. + protected void dispatch(PresenterHiddenHandler handler) {
  87. + handler.onPresenterHidden(this);
  88. +
  89. + }
  90. +
  91. + @Override
  92. + public com.google.gwt.event.shared.GwtEvent.Type<PresenterHiddenHandler> getAssociatedType() {
  93. + return TYPE;
  94. + }
  95. +
  96. + public Presenter getPresenter() {
  97. + return presenter;
  98. + }
  99. +
  100. + /**
  101. + * Returns <code>true</code> if the presenter in this event originated the
  102. + * hiding, or <code>false</code> if it is a consequence of being hidden by a
  103. + * parent presenter.
  104. + *
  105. + * @return <code>true</code> if the event was the originator.
  106. + */
  107. + public boolean isOriginator() {
  108. + return originator;
  109. + }
  110. +
  111. +}
  112.  
  113. Property changes on: src\main\java\net\customware\gwt\presenter\client\PresenterHiddenEvent.java
  114. ___________________________________________________________________
  115. Added: svn:mime-type
  116. + text/plain
  117.  
  118. Index: src/main/java/net/customware/gwt/presenter/client/BasicPresenter.java
  119. ===================================================================
  120. --- src/main/java/net/customware/gwt/presenter/client/BasicPresenter.java (revision 74)
  121. +++ src/main/java/net/customware/gwt/presenter/client/BasicPresenter.java (working copy)
  122. @@ -6,7 +6,7 @@
  123.  
  124. public abstract class BasicPresenter<D extends Display> implements Presenter {
  125.  
  126. - /**
  127. + /**
  128. * The display for the presenter.
  129. */
  130. protected final D display;
  131. @@ -19,6 +19,12 @@
  132. private List<HandlerRegistration> handlerRegistrations = new java.util.ArrayList<HandlerRegistration>();
  133.  
  134. private boolean bound = false;
  135. +
  136. + /**
  137. + * True if the Presenter is currently revealed.
  138. + */
  139. +
  140. + private boolean revealed = false;
  141.  
  142. public BasicPresenter( D display, EventBus eventBus ) {
  143. this.display = display;
  144. @@ -79,6 +85,15 @@
  145. public boolean isBound() {
  146. return bound;
  147. }
  148. +
  149. + /**
  150. + * Checks if the Presenter is currently revealed.
  151. + *
  152. + * @return The current revealed status.
  153. + */
  154. + public boolean isRevealed() {
  155. + return revealed;
  156. + }
  157.  
  158. /**
  159. * Returns the display for the presenter.
  160. @@ -108,6 +123,46 @@
  161. protected void firePresenterRevealedEvent( boolean originator ) {
  162. PresenterRevealedEvent.fire( eventBus, this, originator );
  163. }
  164. +
  165. + /**
  166. + * Fires a {@link PresenterHiddenEvent} to the {@link EventBus}.
  167. + * Implementations should call this when the presenter has been hidden from
  168. + * the user.
  169. + *
  170. + * @param originator
  171. + * If set to true, this specifies that this presenter was the
  172. + * originator of the hiding request.
  173. + */
  174. + protected void firePresenterHiddenEvent(boolean originator) {
  175. + PresenterHiddenEvent.fire(eventBus, this, originator);
  176. + }
  177. +
  178. + /**
  179. + * Triggers a {@link PresenterHiddenEvent}. Subclasses should override this
  180. + * method and call <code>super.hideDisplay()</code> if they need to perform
  181. + * extra operations when being hidden.
  182. + */
  183. + public void hideDisplay() {
  184. + hideDisplay(true);
  185. + }
  186. +
  187. + public void hideDisplay(boolean originator){
  188. + onHideDisplay();
  189. + revealed = false;
  190. + firePresenterHiddenEvent(originator);
  191. + }
  192. +
  193. + /**
  194. + * Triggers a {@link PresenterRevealedEvent}. Subclasses should override
  195. + * this method and call <code>super.revealDisplay()</code> if they need to
  196. + * perform extra operations when being revealed.
  197. + * @param originator True if this Presenter is the originator of the PresenterRevealedEvent; false if it is being revealed because another Presenter is being revealed.
  198. + */
  199. + public void revealDisplay(boolean originator){
  200. + onRevealDisplay();
  201. + revealed = true;
  202. + firePresenterRevealedEvent( originator );
  203. + }
  204.  
  205. /**
  206. * Triggers a {@link PresenterRevealedEvent}. Subclasses should override
  207. @@ -115,13 +170,17 @@
  208. * perform extra operations when being revealed.
  209. */
  210. public void revealDisplay() {
  211. - onRevealDisplay();
  212. - firePresenterRevealedEvent( true );
  213. + revealDisplay(true);
  214. }
  215.  
  216. /**
  217. * Called before firing a {@link net.customware.gwt.presenter.client.PresenterRevealedEvent}.
  218. */
  219. protected abstract void onRevealDisplay();
  220. +
  221. + /**
  222. + * Called before firing a {@link PresenterHiddenEvent}.
  223. + */
  224. + protected abstract void onHideDisplay();
  225.  
  226. }
  227. Index: src/main/java/net/customware/gwt/presenter/client/Presenter.java
  228. ===================================================================
  229. --- src/main/java/net/customware/gwt/presenter/client/Presenter.java (revision 74)
  230. +++ src/main/java/net/customware/gwt/presenter/client/Presenter.java (working copy)
  231. @@ -23,6 +23,13 @@
  232. * @return <code>true</code> if bound.
  233. */
  234. boolean isBound();
  235. +
  236. + /**
  237. + * Checks if the Presenter is currently revealed.
  238. + *
  239. + * @return The current revealed status.
  240. + */
  241. + boolean isRevealed();
  242.  
  243. /**
  244. * Returns the {@link Display} for the current presenter.
  245. @@ -30,6 +37,12 @@
  246. * @return The display.
  247. */
  248. Display getDisplay();
  249. +
  250. + /**
  251. + * Requests the presenter to hide the display on screen. It should
  252. + * automatically ask any child displays/presenters to hide themselves also.
  253. + */
  254. + void hideDisplay();
  255.  
  256. /**
  257. * Requests the presenter to reveal the display on screen. It should
  258. Index: src/main/java/net/customware/gwt/presenter/client/widget/WidgetContainerPresenter.java
  259. ===================================================================
  260. --- src/main/java/net/customware/gwt/presenter/client/widget/WidgetContainerPresenter.java (revision 74)
  261. +++ src/main/java/net/customware/gwt/presenter/client/widget/WidgetContainerPresenter.java (working copy)
  262. @@ -15,7 +15,7 @@
  263. */
  264. public abstract class WidgetContainerPresenter<T extends WidgetContainerDisplay> extends WidgetPresenter<T> {
  265.  
  266. - private final List<WidgetPresenter<?>> presenters;
  267. + private final List<WidgetPresenter<?>> presenters;
  268.  
  269. private WidgetPresenter<?> currentPresenter;
  270.  
  271. @@ -72,10 +72,16 @@
  272. if ( event.getPresenter() instanceof WidgetPresenter ) {
  273. WidgetPresenter<?> presenter = (WidgetPresenter<?>) event.getPresenter();
  274. if ( presenters.contains( presenter ) ) {
  275. + if ((currentPresenter != null)
  276. + && (currentPresenter != presenter) && !event.isOriginator()) {
  277. + currentPresenter.hideDisplay();
  278. + }
  279. // Make this presenter the focus
  280. setCurrentPresenter( presenter );
  281. // Reveal ourselves so that the child will be revealed.
  282. - firePresenterRevealedEvent( false );
  283. + if (!isRevealed()) {
  284. + revealDisplay(false);
  285. + }
  286. }
  287. }
  288. }
  289. @@ -118,6 +124,16 @@
  290. protected int indexOf( WidgetPresenter<?> presenter ) {
  291. return presenters.indexOf( presenter );
  292. }
  293. +
  294. + /**
  295. + * Hides this Presenter's display.
  296. + */
  297. + @Override
  298. + protected void onHideDisplay() {
  299. + if (currentPresenter.isRevealed()) {
  300. + currentPresenter.hideDisplay();
  301. + }
  302. + }
  303.  
  304. @Override
  305. protected void onRevealDisplay() {
  306. Index: src/main/java/net/customware/gwt/presenter/client/widget/WidgetPresenter.java
  307. ===================================================================
  308. --- src/main/java/net/customware/gwt/presenter/client/widget/WidgetPresenter.java (revision 74)
  309. +++ src/main/java/net/customware/gwt/presenter/client/widget/WidgetPresenter.java (working copy)
  310. @@ -18,4 +18,14 @@
  311. public WidgetPresenter( D display, EventBus eventBus ) {
  312. super( display, eventBus );
  313. }
  314. +
  315. + /**
  316. + * Override if you need to do something when the Display is hidden.
  317. + * Since most WidgetPresenters won't need to do anything when their Display
  318. + * is hidden, this is a dummy method to remove having to implement it.
  319. + */
  320. + @Override
  321. + protected void onHideDisplay() {
  322. +
  323. + }
  324. }
  325. Index: src/main/java/net/customware/gwt/presenter/client/gin/ProvidedPresenterPlace.java
  326. ===================================================================
  327. --- src/main/java/net/customware/gwt/presenter/client/gin/ProvidedPresenterPlace.java (revision 74)
  328. +++ src/main/java/net/customware/gwt/presenter/client/gin/ProvidedPresenterPlace.java (working copy)
  329. @@ -52,8 +52,9 @@
  330. * @param presenter The presenter.
  331. */
  332. @Override
  333. - protected void preparePresenter( PlaceRequest request, T presenter ) {
  334. + protected boolean preparePresenter( PlaceRequest request, T presenter ) {
  335. // Do nothing
  336. + return true;
  337. }
  338.  
  339. /**
  340. Index: src/main/java/net/customware/gwt/presenter/client/place/HidePlaceHandler.java
  341. ===================================================================
  342. --- src/main/java/net/customware/gwt/presenter/client/place/HidePlaceHandler.java (revision 0)
  343. +++ src/main/java/net/customware/gwt/presenter/client/place/HidePlaceHandler.java (revision 0)
  344. @@ -0,0 +1,24 @@
  345. +/**
  346. + *
  347. + */
  348. +package net.customware.gwt.presenter.client.place;
  349. +
  350. +import com.google.gwt.event.shared.EventHandler;
  351. +
  352. +/**
  353. + * Handler for a {@link HidePlaceEvent}.
  354. + *
  355. + * @author James Crosetto
  356. + *
  357. + */
  358. +public interface HidePlaceHandler extends EventHandler {
  359. +
  360. + /**
  361. + * Called when a {@link Place} needs to be hidden.
  362. + *
  363. + * @param event
  364. + * The event.
  365. + */
  366. + void onHidePlace(HidePlaceEvent event);
  367. +
  368. +}
  369.  
  370. Property changes on: src\main\java\net\customware\gwt\presenter\client\place\HidePlaceHandler.java
  371. ___________________________________________________________________
  372. Added: svn:mime-type
  373. + text/plain
  374.  
  375. Index: src/main/java/net/customware/gwt/presenter/client/place/Place.java
  376. ===================================================================
  377. --- src/main/java/net/customware/gwt/presenter/client/place/Place.java (revision 74)
  378. +++ src/main/java/net/customware/gwt/presenter/client/place/Place.java (working copy)
  379. @@ -17,6 +17,8 @@
  380. * @author David Peterson
  381. */
  382. public abstract class Place {
  383. +private HandlerRegistration hidePlaceRegistration;
  384. +
  385. private HandlerRegistration placeRequestRegistration;
  386.  
  387. public Place() {
  388. @@ -54,8 +56,15 @@
  389. * This method is called when a matching request is received.
  390. *
  391. * @param request The place request.
  392. + * @return True if the request was successfully handled; false if it was not.
  393. */
  394. - protected abstract void handleRequest( PlaceRequest request );
  395. + protected abstract boolean handleRequest( PlaceRequest request );
  396. +
  397. + /**
  398. + * This method is called when this Place is supposed to hide itself.
  399. + * @return True if the request was successfully handled; false if it was not.
  400. + */
  401. + protected abstract boolean handleHideRequest();
  402.  
  403. /**
  404. * This method is checked before calling
  405. @@ -96,6 +105,11 @@
  406. protected abstract PlaceRequest prepareRequest( PlaceRequest request );
  407.  
  408. protected abstract void reveal();
  409. +
  410. + /**
  411. + * Hides this Place.
  412. + */
  413. + protected abstract void hide();
  414.  
  415. /**
  416. * This method is called if the place should register itself with the event bus. Only one
  417. @@ -109,11 +123,29 @@
  418. public void onPlaceRequest( PlaceRequestEvent event ) {
  419. PlaceRequest request = event.getRequest();
  420. if ( matchesRequest( request ) ) {
  421. - handleRequest( request );
  422. - eventBus.fireEvent( new PlaceRevealedEvent( Place.this ) );
  423. + if(handleRequest( request )){
  424. + eventBus.fireEvent( new PlaceRevealedEvent( Place.this ) );
  425. + }
  426. }
  427. }
  428. } );
  429. +
  430. + /*
  431. + * Register a handler for HidePlaceEvents.
  432. + */
  433. + hidePlaceRegistration = eventBus.addHandler(HidePlaceEvent.getType(),
  434. + new HidePlaceHandler() {
  435. +
  436. +
  437. + public void onHidePlace(HidePlaceEvent event) {
  438. + if (event.getPlaceName().equals(getName())) {
  439. + if(handleHideRequest()){
  440. + eventBus.fireEvent(new PlaceHiddenEvent(Place.this));
  441. + }
  442. + }
  443. +
  444. + }
  445. + });
  446. }
  447.  
  448. /**
  449. @@ -127,5 +159,10 @@
  450. placeRequestRegistration.removeHandler();
  451. placeRequestRegistration = null;
  452. }
  453. +
  454. + if (hidePlaceRegistration != null) {
  455. + hidePlaceRegistration.removeHandler();
  456. + hidePlaceRegistration = null;
  457. + }
  458. }
  459. }
  460. Index: src/main/java/net/customware/gwt/presenter/client/place/BasicPresenterPlace.java
  461. ===================================================================
  462. --- src/main/java/net/customware/gwt/presenter/client/place/BasicPresenterPlace.java (revision 74)
  463. +++ src/main/java/net/customware/gwt/presenter/client/place/BasicPresenterPlace.java (working copy)
  464. @@ -27,8 +27,9 @@
  465. * Does nothing by default.
  466. */
  467. @Override
  468. - protected void preparePresenter( PlaceRequest request, T presenter ) {
  469. + protected boolean preparePresenter( PlaceRequest request, T presenter ) {
  470. // Do nothing.
  471. + return true;
  472. }
  473.  
  474. /**
  475. Index: src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenHandler.java
  476. ===================================================================
  477. --- src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenHandler.java (revision 0)
  478. +++ src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenHandler.java (revision 0)
  479. @@ -0,0 +1,21 @@
  480. +/**
  481. + *
  482. + */
  483. +package net.customware.gwt.presenter.client.place;
  484. +
  485. +import com.google.gwt.event.shared.EventHandler;
  486. +
  487. +/**
  488. + * Handler for a {@link PlaceHiddenEvent}.
  489. + * @author James Crosetto
  490. + *
  491. + */
  492. +public interface PlaceHiddenHandler extends EventHandler {
  493. +
  494. + /**
  495. + * Called when a Place has been hidden from the user.
  496. + * @param event The event.
  497. + */
  498. + void onPlaceHidden(PlaceHiddenEvent event);
  499. +
  500. +}
  501.  
  502. Property changes on: src\main\java\net\customware\gwt\presenter\client\place\PlaceHiddenHandler.java
  503. ___________________________________________________________________
  504. Added: svn:mime-type
  505. + text/plain
  506.  
  507. Index: src/main/java/net/customware/gwt/presenter/client/place/DefaultPlaceManager.java
  508. ===================================================================
  509. --- src/main/java/net/customware/gwt/presenter/client/place/DefaultPlaceManager.java (revision 74)
  510. +++ src/main/java/net/customware/gwt/presenter/client/place/DefaultPlaceManager.java (working copy)
  511. @@ -9,120 +9,169 @@
  512. import java.util.Map;
  513.  
  514. public abstract class DefaultPlaceManager implements PlaceManager {
  515. - private class PlaceEventHandler implements ValueChangeHandler<String>, PlaceRevealedHandler,
  516. - PlaceChangedHandler {
  517. + private class PlaceEventHandler implements ValueChangeHandler<String>,
  518. + PlaceRevealedHandler, PlaceChangedHandler {
  519. +
  520. + public void onPlaceRevealed(PlaceRevealedEvent event) {
  521. + updateHistory(event.getPlace());
  522. +
  523. + currentPlace = event.getPlace();
  524. +
  525. + /*
  526. + * ADDED for HidePlaceEvent. Only need to hide a Place when one is
  527. + * revealed.
  528. + */
  529. + hidePreviousPlace(event.getPlace().getName());
  530. + }
  531. +
  532. + public void onPlaceChanged(PlaceChangedEvent event) {
  533. + Place place = event.getPlace();
  534. + try {
  535. + if (place.matchesRequest(tokenFormatter.toPlaceRequest(History
  536. + .getToken()))) {
  537. + // Only update if the change comes from a place that matches
  538. + // the current location.
  539. + updateHistory(event.getPlace());
  540. + }
  541. + } catch (TokenFormatException e) {
  542. + // Do nothing...
  543. + }
  544. + }
  545. +
  546. + /**
  547. + * Handles change events from {@link History}.
  548. + */
  549. + public void onValueChange(ValueChangeEvent<String> event) {
  550. + try {
  551. + PlaceRequestEvent.fire(eventBus, tokenFormatter
  552. + .toPlaceRequest(event.getValue()), true);
  553. + } catch (TokenFormatException e) {
  554. + e.printStackTrace();
  555. + }
  556. + }
  557. +
  558. + }
  559.  
  560. - public void onPlaceRevealed( PlaceRevealedEvent event ) {
  561. - updateHistory( event.getPlace() );
  562. - }
  563. + private final EventBus eventBus;
  564.  
  565. - public void onPlaceChanged( PlaceChangedEvent event ) {
  566. - Place place = event.getPlace();
  567. - try {
  568. - if ( place.matchesRequest( tokenFormatter.toPlaceRequest( History.getToken() ) ) ) {
  569. - // Only update if the change comes from a place that matches
  570. - // the current location.
  571. - updateHistory( event.getPlace() );
  572. - }
  573. - } catch ( TokenFormatException e ) {
  574. - // Do nothing...
  575. - }
  576. - }
  577. + private Place currentPlace = null;
  578.  
  579. - /**
  580. - * Handles change events from {@link History}.
  581. - */
  582. - public void onValueChange( ValueChangeEvent<String> event ) {
  583. - try {
  584. - PlaceRequestEvent.fire( eventBus, tokenFormatter.toPlaceRequest( event.getValue() ), true );
  585. - } catch ( TokenFormatException e ) {
  586. - e.printStackTrace();
  587. - }
  588. - }
  589. + /**
  590. + * ADDED for HidePlaceEvent. The name of the last place shown.
  591. + */
  592. + private String lastPlaceName = null;
  593.  
  594. - }
  595. + private final TokenFormatter tokenFormatter;
  596.  
  597. - private final EventBus eventBus;
  598. + private final Map<Class<? extends Place>, Place> placeMap;
  599.  
  600. - private final TokenFormatter tokenFormatter;
  601. + public DefaultPlaceManager(EventBus eventBus, TokenFormatter tokenFormatter) {
  602. + this(eventBus, tokenFormatter, (Place[]) null);
  603. + }
  604.  
  605. - private final Map<Class<? extends Place>, Place> placeMap;
  606. + public DefaultPlaceManager(EventBus eventBus,
  607. + TokenFormatter tokenFormatter, Place... places) {
  608. + this.eventBus = eventBus;
  609. + this.tokenFormatter = tokenFormatter;
  610.  
  611. - public DefaultPlaceManager( EventBus eventBus, TokenFormatter tokenFormatter ) {
  612. - this( eventBus, tokenFormatter, (Place[]) null );
  613. - }
  614. + PlaceEventHandler handler = new PlaceEventHandler();
  615.  
  616. - public DefaultPlaceManager( EventBus eventBus, TokenFormatter tokenFormatter, Place... places ) {
  617. - this.eventBus = eventBus;
  618. - this.tokenFormatter = tokenFormatter;
  619. + // Register ourselves with the History API.
  620. + History.addValueChangeHandler(handler);
  621.  
  622. - PlaceEventHandler handler = new PlaceEventHandler();
  623. + // Listen for manual place change events.
  624. + eventBus.addHandler(PlaceChangedEvent.getType(), handler);
  625.  
  626. - // Register ourselves with the History API.
  627. - History.addValueChangeHandler( handler );
  628. + // Listen for place revelation requests.
  629. + eventBus.addHandler(PlaceRevealedEvent.getType(), handler);
  630.  
  631. - // Listen for manual place change events.
  632. - eventBus.addHandler( PlaceChangedEvent.getType(), handler );
  633. + placeMap = new HashMap<Class<? extends Place>, Place>();
  634.  
  635. - // Listen for place revelation requests.
  636. - eventBus.addHandler( PlaceRevealedEvent.getType(), handler );
  637. + if (places != null) {
  638. + for (Place place : places) {
  639. + registerPlace(place);
  640. + }
  641. + }
  642. + }
  643.  
  644. - placeMap = new HashMap<Class<? extends Place>, Place>();
  645. + /**
  646. + * Gets the current Place that is revealed.
  647. + *
  648. + * @return the currentPlace
  649. + */
  650. + public Place getCurrentPlace() {
  651.  
  652. - if ( places != null ) {
  653. - for ( Place place : places ) {
  654. - registerPlace( place );
  655. - }
  656. - }
  657. - }
  658. + return currentPlace;
  659. + }
  660.  
  661. - public boolean registerPlace( Place place ) {
  662. - if ( !placeMap.containsKey( place.getClass() ) ) {
  663. - place.addHandlers( eventBus );
  664. - placeMap.put( place.getClass(), place );
  665. - return true;
  666. - }
  667. - return false;
  668. - }
  669. + public boolean registerPlace(Place place) {
  670. + if (!placeMap.containsKey(place.getClass())) {
  671. + place.addHandlers(eventBus);
  672. + placeMap.put(place.getClass(), place);
  673. + return true;
  674. + }
  675. + return false;
  676. + }
  677.  
  678. - public boolean deregisterPlace( Place place ) {
  679. - if ( !placeMap.containsKey( place.getClass() ) ) {
  680. - place.removeHandlers( eventBus );
  681. - placeMap.remove( place.getClass() );
  682. - return true;
  683. - }
  684. - return false;
  685. - }
  686. + public boolean deregisterPlace(Place place) {
  687. + if (!placeMap.containsKey(place.getClass())) {
  688. + place.removeHandlers(eventBus);
  689. + placeMap.remove(place.getClass());
  690. + return true;
  691. + }
  692. + return false;
  693. + }
  694.  
  695. - private void updateHistory( Place place ) {
  696. - updateHistory( place.createRequest() );
  697. - }
  698. + private void updateHistory(Place place) {
  699. + updateHistory(place.createRequest());
  700. + }
  701.  
  702. - // Updates History if it has changed, without firing another
  703. - // 'ValueChangeEvent'.
  704. - private void updateHistory( PlaceRequest request ) {
  705. - try {
  706. - String requestToken = tokenFormatter.toHistoryToken( request );
  707. - String historyToken = History.getToken();
  708. - if ( historyToken == null || !historyToken.equals( requestToken ) )
  709. - History.newItem( requestToken, false );
  710. - } catch ( TokenFormatException e ) {
  711. - // Do nothing.
  712. - }
  713. - }
  714. + // Updates History if it has changed, without firing another
  715. + // 'ValueChangeEvent'.
  716. + private void updateHistory(PlaceRequest request) {
  717. + try {
  718. + String requestToken = tokenFormatter.toHistoryToken(request);
  719. + String historyToken = History.getToken();
  720. + if (historyToken == null || !historyToken.equals(requestToken))
  721. + History.newItem(requestToken, false);
  722. + } catch (TokenFormatException e) {
  723. + // Do nothing.
  724. + }
  725. + }
  726.  
  727. - /**
  728. - * Fires a {@link PlaceRequestEvent} with the current history token, if
  729. - * present. If no history token is set, <code>false</code> is returned.
  730. - *
  731. - * @return <code>true</code>
  732. - */
  733. - public boolean fireCurrentPlace() {
  734. + /**
  735. + * Fires a {@link PlaceRequestEvent} with the current history token, if
  736. + * present. If no history token is set, <code>false</code> is returned.
  737. + *
  738. + * @return <code>true</code>
  739. + */
  740. + public boolean fireCurrentPlace() {
  741. String current = History.getToken();
  742. - if ( current != null && current.trim().length() > 0 ) {
  743. - History.fireCurrentHistoryState();
  744. - return true;
  745. - }
  746. - return false;
  747. - }
  748. + if (current != null && current.trim().length() > 0) {
  749. + History.fireCurrentHistoryState();
  750. + return true;
  751. + }
  752. + return false;
  753. + }
  754. +
  755. + /**
  756. + * ADDED for HidePlaceEvent. Only fires a HidePlaceEvent if the newPlaceName
  757. + * is different from {@link #lastPlaceName}.
  758. + *
  759. + * @param newPlaceName
  760. + * The name of the Place being revealed.
  761. + */
  762. + private void hidePreviousPlace(String newPlaceName) {
  763. +
  764. + if (lastPlaceName == null) {
  765. +
  766. + lastPlaceName = newPlaceName;
  767. + } else if (!lastPlaceName.equals(newPlaceName)) {
  768. +
  769. + HidePlaceEvent.fire(eventBus, lastPlaceName);
  770. +
  771. + lastPlaceName = newPlaceName;
  772. + }
  773. +
  774. + }
  775. }
  776. Index: src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenEvent.java
  777. ===================================================================
  778. --- src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenEvent.java (revision 0)
  779. +++ src/main/java/net/customware/gwt/presenter/client/place/PlaceHiddenEvent.java (revision 0)
  780. @@ -0,0 +1,54 @@
  781. +package net.customware.gwt.presenter.client.place;
  782. +
  783. +import net.customware.gwt.presenter.client.EventBus;
  784. +
  785. +import com.google.gwt.event.shared.GwtEvent;
  786. +
  787. +/**
  788. + * Fired when a Place is hidden.
  789. + *
  790. + * @author James Crosetto
  791. + *
  792. + */
  793. +public class PlaceHiddenEvent extends GwtEvent<PlaceHiddenHandler> {
  794. +
  795. + private static GwtEvent.Type<PlaceHiddenHandler> TYPE = new GwtEvent.Type<PlaceHiddenHandler>();
  796. +
  797. + /**
  798. + * Call this method to fire place hidden events.
  799. + *
  800. + * @param eventBus
  801. + * The eventBus.
  802. + * @param place
  803. + * The place.
  804. + */
  805. + public static void fire(EventBus eventBus, Place place) {
  806. + eventBus.fireEvent(new PlaceHiddenEvent(place));
  807. + }
  808. +
  809. + public static GwtEvent.Type<PlaceHiddenHandler> getType() {
  810. + return TYPE;
  811. + }
  812. +
  813. + private final Place place;
  814. +
  815. + public PlaceHiddenEvent(Place place) {
  816. + this.place = place;
  817. + }
  818. +
  819. + @Override
  820. + protected void dispatch(PlaceHiddenHandler handler) {
  821. + handler.onPlaceHidden(this);
  822. +
  823. + }
  824. +
  825. + @Override
  826. + public com.google.gwt.event.shared.GwtEvent.Type<PlaceHiddenHandler> getAssociatedType() {
  827. + return TYPE;
  828. + }
  829. +
  830. + public Place getPlace() {
  831. + return place;
  832. + }
  833. +
  834. +}
  835.  
  836. Property changes on: src\main\java\net\customware\gwt\presenter\client\place\PlaceHiddenEvent.java
  837. ___________________________________________________________________
  838. Added: svn:mime-type
  839. + text/plain
  840.  
  841. Index: src/main/java/net/customware/gwt/presenter/client/place/HidePlaceEvent.java
  842. ===================================================================
  843. --- src/main/java/net/customware/gwt/presenter/client/place/HidePlaceEvent.java (revision 0)
  844. +++ src/main/java/net/customware/gwt/presenter/client/place/HidePlaceEvent.java (revision 0)
  845. @@ -0,0 +1,68 @@
  846. +/**
  847. + *
  848. + */
  849. +package net.customware.gwt.presenter.client.place;
  850. +
  851. +import net.customware.gwt.presenter.client.EventBus;
  852. +
  853. +import com.google.gwt.event.shared.GwtEvent;
  854. +
  855. +/**
  856. + * Event fired when a {@link Place} needs to be hidden.
  857. + *
  858. + * @author James Crosetto
  859. + *
  860. + */
  861. +public class HidePlaceEvent extends GwtEvent<HidePlaceHandler> {
  862. +
  863. + private static GwtEvent.Type<HidePlaceHandler> TYPE = new GwtEvent.Type<HidePlaceHandler>();
  864. +
  865. + /**
  866. + * Call this method to fire place hidden events.
  867. + *
  868. + * @param eventBus
  869. + * The eventBus.
  870. + * @param place
  871. + * The place.
  872. + */
  873. + public static void fire(EventBus eventBus, String placeName) {
  874. + eventBus.fireEvent(new HidePlaceEvent(placeName));
  875. + }
  876. +
  877. + public static GwtEvent.Type<HidePlaceHandler> getType() {
  878. + return TYPE;
  879. + }
  880. +
  881. + private final String placeName;
  882. +
  883. + /**
  884. + * Constructor.
  885. + *
  886. + * @param placeName
  887. + * The name of the {@link Place} that needs to be hidden.
  888. + */
  889. + public HidePlaceEvent(String placeName) {
  890. + this.placeName = placeName;
  891. + }
  892. +
  893. + @Override
  894. + protected void dispatch(HidePlaceHandler handler) {
  895. + handler.onHidePlace(this);
  896. +
  897. + }
  898. +
  899. + @Override
  900. + public com.google.gwt.event.shared.GwtEvent.Type<HidePlaceHandler> getAssociatedType() {
  901. + return TYPE;
  902. + }
  903. +
  904. + /**
  905. + * Returns the name of the Place that needs to be hidden.
  906. + *
  907. + * @return the placeName The name of the Place to be hidden.
  908. + */
  909. + public String getPlaceName() {
  910. + return placeName;
  911. + }
  912. +
  913. +}
  914.  
  915. Property changes on: src\main\java\net\customware\gwt\presenter\client\place\HidePlaceEvent.java
  916. ___________________________________________________________________
  917. Added: svn:mime-type
  918. + text/plain
  919.  
  920. Index: src/main/java/net/customware/gwt/presenter/client/place/PresenterPlace.java
  921. ===================================================================
  922. --- src/main/java/net/customware/gwt/presenter/client/place/PresenterPlace.java (revision 74)
  923. +++ src/main/java/net/customware/gwt/presenter/client/place/PresenterPlace.java (working copy)
  924. @@ -21,6 +21,15 @@
  925. public abstract T getPresenter();
  926.  
  927. /**
  928. + * Calls {@link Presenter#hideDisplay()} for this Place's Presenter.
  929. + */
  930. + @Override
  931. + public void hide() {
  932. +
  933. + getPresenter().hideDisplay();
  934. + }
  935. +
  936. + /**
  937. * Calls the {@link Presenter#revealDisplay()} method for the place's
  938. * presenter.
  939. */
  940. @@ -34,11 +43,26 @@
  941. * any custom handling.
  942. */
  943. @Override
  944. - protected void handleRequest( PlaceRequest request ) {
  945. - T presenter = getPresenter();
  946. - preparePresenter( request, presenter );
  947. + protected boolean handleRequest(PlaceRequest request) {
  948. +
  949. + T presenter = getPresenter();
  950. + if(preparePresenter(request, presenter)){
  951. presenter.revealDisplay();
  952. + return true;
  953. + }else{
  954. + return false;
  955. + }
  956. }
  957. +
  958. + /* (non-Javadoc)
  959. + * @see net.customware.gwt.presenter.client.place.Place#handleHideRequest()
  960. + */
  961. + @Override
  962. + protected boolean handleHideRequest() {
  963. +
  964. + getPresenter().hideDisplay();
  965. + return true;
  966. + }
  967.  
  968. /**
  969. * This method is called on matching place requests before the presenter is
  970. @@ -47,8 +71,10 @@
  971. *
  972. * @param request The request.
  973. * @param presenter The presenter.
  974. + * @return True if the presenter was successfully prepared with the given request;
  975. + * false if it was unable to prepare the presenter with the given request.
  976. */
  977. - protected abstract void preparePresenter( PlaceRequest request, T presenter );
  978. + protected abstract boolean preparePresenter( PlaceRequest request, T presenter );
  979.  
  980. @Override
  981. protected PlaceRequest prepareRequest( PlaceRequest request ) {
  982. @@ -100,7 +126,7 @@
  983. }
  984.  
  985. @Override
  986. - protected void addHandlers( final EventBus eventBus ) {
  987. + public void addHandlers( final EventBus eventBus ) {
  988. super.addHandlers( eventBus );
  989.  
  990. presenterChangedRegistration = eventBus.addHandler( PresenterChangedEvent.getType(), new PresenterChangedHandler() {
  991. @@ -129,7 +155,7 @@
  992. }
  993.  
  994. @Override
  995. - protected void removeHandlers( EventBus eventBus ) {
  996. + public void removeHandlers( EventBus eventBus ) {
  997. super.removeHandlers( eventBus );
  998.  
  999. if ( presenterChangedRegistration != null ) {
  1000. Index: src/main/java/net/customware/gwt/presenter/client/PresenterHiddenHandler.java
  1001. ===================================================================
  1002. --- src/main/java/net/customware/gwt/presenter/client/PresenterHiddenHandler.java (revision 0)
  1003. +++ src/main/java/net/customware/gwt/presenter/client/PresenterHiddenHandler.java (revision 0)
  1004. @@ -0,0 +1,24 @@
  1005. +/**
  1006. + *
  1007. + */
  1008. +package net.customware.gwt.presenter.client;
  1009. +
  1010. +import com.google.gwt.event.shared.EventHandler;
  1011. +
  1012. +/**
  1013. + * Handler for a {@link PresenterHiddenEvent}.
  1014. + *
  1015. + * @author James Crosetto
  1016. + *
  1017. + */
  1018. +public interface PresenterHiddenHandler extends EventHandler {
  1019. +
  1020. + /**
  1021. + * Called when a {@link Presenter} has been hidden from the user.
  1022. + *
  1023. + * @param event
  1024. + * The event.
  1025. + */
  1026. + void onPresenterHidden(PresenterHiddenEvent event);
  1027. +
  1028. +}
  1029.  
  1030. Property changes on: src\main\java\net\customware\gwt\presenter\client\PresenterHiddenHandler.java
  1031. ___________________________________________________________________
  1032. Added: svn:mime-type
  1033. + text/plain
Advertisement
Add Comment
Please, Sign In to add comment