@Override public void revealPlaceHierarchy( final List<PlaceRequest> placeRequestHierarchy) { if (locked) { defferedNavigation = () -> revealPlaceHierarchy(placeRequestHierarchy); return; } if (!getLock()) { return; } if (placeRequestHierarchy.size() == 0) { unlock(); revealDefaultPlace(); } else { placeHierarchy = placeRequestHierarchy; doRevealPlace(getCurrentPlaceRequest(), true); } }
@Override public String buildRelativeHistoryToken(PlaceRequest request) { return buildRelativeHistoryToken(request, 0); }
/** * Checks that the place manager is not locked and that the user allows the application to navigate (see {@link * #confirmLeaveState()}. If the application is allowed to navigate, this method locks navigation. * * @return true if the place manager can get the lock false otherwise. */ private boolean getLock() { if (locked) { return false; } if (!confirmLeaveState()) { return false; } lock(); return true; }
@Override public void revealRelativePlace(final PlaceRequest request, final int level) { if (locked) { defferedNavigation = () -> revealRelativePlace(request, level); return; } if (!getLock()) { return; } placeHierarchy = truncatePlaceHierarchy(level); placeHierarchy.add(request); doRevealPlace(request, true); }
private void handleTokenChange(final String historyToken) { if (locked) { defferedNavigation = () -> handleTokenChange(historyToken); return; } if (!getLock()) { return; } try { if (historyToken.trim().isEmpty()) { unlock(); revealDefaultPlace(); } else { placeHierarchy = tokenFormatter.toPlaceRequestHierarchy(historyToken); doRevealPlace(getCurrentPlaceRequest(), true); } } catch (TokenFormatException e) { unlock(); error(historyToken); NavigationEvent.fire(this, null); } }
@Override public void revealRelativePlace(final int level) { if (locked) { defferedNavigation = () -> revealRelativePlace(level); return; } if (!getLock()) { return; } placeHierarchy = truncatePlaceHierarchy(level); int hierarchySize = placeHierarchy.size(); if (hierarchySize == 0) { unlock(); revealDefaultPlace(); } else { PlaceRequest request = placeHierarchy.get(hierarchySize - 1); doRevealPlace(request, true); } }
@Override public void revealPlace(final PlaceRequest request, final boolean updateBrowserUrl) { if (locked) { defferedNavigation = () -> revealPlace(request, updateBrowserUrl); return; } if (!getLock()) { return; } placeHierarchy.clear(); placeHierarchy.add(request); doRevealPlace(request, updateBrowserUrl); }
@Override public void updateHistory(PlaceRequest request, boolean updateBrowserUrl) { try { // Make sure the request match assert request.hasSameNameToken(getCurrentPlaceRequest()) : "Internal error, PlaceRequest passed to" + "updateHistory doesn't match the tail of the place hierarchy."; placeHierarchy.set(placeHierarchy.size() - 1, request); if (updateBrowserUrl) { String historyToken = tokenFormatter.toHistoryToken(placeHierarchy); String browserHistoryToken = getBrowserHistoryToken(); if (browserHistoryToken == null || !browserHistoryToken.equals(historyToken)) { setBrowserHistoryToken(historyToken, false); } saveHistoryToken(historyToken); } } catch (TokenFormatException e) { // Do nothing. } }
/** * Fires the {@link PlaceRequestInternalEvent} for the given {@link PlaceRequest}. Do not call this method directly, * instead call {@link #revealPlace(PlaceRequest)} or a related method. * * @param request The {@link PlaceRequest} to fire. * @param updateBrowserUrl {@code true} If the browser URL should be updated, {@code false} otherwise. */ protected void doRevealPlace(PlaceRequest request, boolean updateBrowserUrl) { PlaceRequestInternalEvent requestEvent = new PlaceRequestInternalEvent(request, updateBrowserUrl); fireEvent(requestEvent); if (!requestEvent.isHandled()) { unlock(); error(tokenFormatter.toHistoryToken(placeHierarchy)); } else if (!requestEvent.isAuthorized()) { unlock(); illegalAccess(tokenFormatter.toHistoryToken(placeHierarchy)); } }
@Override protected void doRevealPlace(final PlaceRequest prequest, final boolean pupdateBrowserUrl) { super.doRevealPlace(prequest, pupdateBrowserUrl); getEventBus().fireEvent(new ChangePlaceEvent(prequest)); } }
/** * Handles change events from {@link History}. */ @Override public void onValueChange(ValueChangeEvent<String> event) { handleTokenChange(event.getValue()); }
@Override public void fireEvent(GwtEvent<?> event) { getEventBus().fireEventFromSource(event, this); }
@Override protected void doRevealPlace(final PlaceRequest prequest, final boolean pupdateBrowserUrl) { super.doRevealPlace(prequest, pupdateBrowserUrl); getEventBus().fireEvent(new ChangePlaceEvent(prequest)); } }
@Override public void revealCurrentPlace() { handleTokenChange(historian.getToken()); }