/** * Get or create a new state for the provided app ID. * * @param sAppID * The app ID to get the state for. May neither be <code>null</code> * nor empty. * @return Never <code>null</code>. */ @Nonnull public PhotonSessionStatePerApp state (@Nonnull @Nonempty final String sAppID) { ValueEnforcer.notEmpty (sAppID, "AppID"); return m_aStateMap.computeIfAbsent (sAppID, k -> new PhotonSessionStatePerApp ()); }
public PhotonRequestState (@Nonnull final PhotonSessionStatePerApp aState) { this (aState.getMenuTree (), aState.getMenuItem (), aState.getDisplayLocale ()); }
IMenuTree aMenuTree = aAppSessionState.getMenuTree (); if (aMenuTree == null) aAppSessionState.setMenuTree (aMenuTree); aMenuItem = aAppSessionState.getMenuItem (); if (aMenuItem == null) aAppSessionState.setMenuItem (aMenuItem); final Locale aSessionDisplayLocale = aAppSessionState.getDisplayLocale (); if (aSessionDisplayLocale != null) aDisplayLocale = aSessionDisplayLocale; aAppSessionState.setDisplayLocale (aDisplayLocale);
@Nullable private static PhotonRequestState _getRequestStateOrNull (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { PhotonRequestState ret = aRequestScope.attrs ().getCastedValue (REQUEST_ATTR_STATE); if (ret == null) { // Fallback to last saved state from session final String sAppID = _getApplicationIDOrNull (aRequestScope); if (StringHelper.hasText (sAppID)) { final PhotonSessionState aSessionState = PhotonSessionState.getInstanceIfInstantiated (); if (aSessionState != null) { final PhotonSessionStatePerApp aSessionStatePerApp = aSessionState.state (sAppID); // Is e.g. empty if a new session state was created! if (aSessionStatePerApp.isNotEmpty ()) ret = new PhotonRequestState (aSessionStatePerApp); } // Global state as last resort if (ret == null) ret = new PhotonRequestState (PhotonGlobalState.state (sAppID)); } // else - no app ID - we're lost } return ret; }
if (aSessionStatePerApp.isNotEmpty ()) aRequestState = new PhotonRequestState (aSessionStatePerApp);