@Nonnull public static LayoutExecutionContext createForAjaxOrAction (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { // Get the locale from the session final Locale aDisplayLocale = RequestSettings.getDisplayLocale (aRequestScope); final IMenuTree aMenuTree = RequestSettings.getMenuTree (aRequestScope); final IMenuItemPage aMenuItem = RequestSettings.getMenuItem (aRequestScope); // Since no menu item is selected, use the default menu item return new LayoutExecutionContext (new SimpleWebExecutionContext (aRequestScope, aDisplayLocale, aMenuTree), aMenuItem); } }
@Nonnull @Nonempty public static String getApplicationID (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { final String sAppID = _getApplicationIDOrNull (aRequestScope); if (StringHelper.hasNoText (sAppID)) throw new IllegalStateException ("No app ID is present!"); return sAppID; }
@Nonnull public static PhotonRequestState getRequestState (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { final PhotonRequestState aState = _getRequestStateOrNull (aRequestScope); if (aState == null) throw new IllegalStateException ("No state is present!"); return aState; }
@Nonnull @Nonempty public static String getMenuItemID (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { return getMenuItem (aRequestScope).getID (); }
@Nonnull public static String getDisplayLanguage (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { return getDisplayLocale (aRequestScope).getLanguage (); }
@Nonnull public static IMenuItemPage getMenuItem (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { final IMenuItemPage aMenuItem = getRequestState (aRequestScope).getMenuItem (); if (aMenuItem == null) throw new IllegalStateException ("No menu item is present!"); return aMenuItem; }
RequestSettings.setRequestState (aRequestScope, sAppID, aRequestState);
@Nonnull SimpleURL getLinkToMenuItem (@Nonnull @Nonempty String sAppID, @Nonnull IRequestWebScopeWithoutResponse aRequestScope, @Nonnull Locale aDisplayLocale, @Nonnull String sMenuItemID);
/** * Overridable method to fill head and body. The default implementation uses * an {@link SimpleWebExecutionContext} which in turn requires a menu tree to * be present. If you have an application without a menu tree, override this * method. * * @param aRequestScope * Current request scope * @param aHtml * Created (empty) HTML node * @param aDisplayLocale * The display locale of the current request */ @Override @OverrideOnDemand protected void fillHeadAndBody (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope, @Nonnull final HCHtml aHtml, @Nonnull final Locale aDisplayLocale) { final IMenuTree aMenuTree = RequestSettings.getMenuTree (aRequestScope); // Build the execution scope final ISimpleWebExecutionContext aSWEC = new SimpleWebExecutionContext (aRequestScope, aDisplayLocale, aMenuTree); // fill body fillBody (aSWEC, aHtml); // build HTML header (after body for per-request stuff) fillHead (aSWEC, aHtml); } }
final IMenuItemPage aMenuItem = RequestSettings.getMenuItem (aRequestScope); final LayoutExecutionContext aLEC = new LayoutExecutionContext (aSWEC, aMenuItem); final HCHead aHead = aHtml.head ();
@Nonnull public static Locale getDisplayCountry (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { return CountryCache.getInstance ().getCountry (getDisplayLocale (aRequestScope)); }
@Nonnull public static Locale getDisplayLocale (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { final Locale aLocale = getRequestState (aRequestScope).getDisplayLocale (); if (aLocale == null) throw new IllegalStateException ("No locale is available"); return aLocale; }
RequestSettings.setRequestState (aRequestScope, sAppID, new PhotonRequestState (aMenuTree, aMenuItem, aDisplayLocale));
final IMenuItemPage aMenuItem = RequestSettings.getMenuItem (aRequestScope); final LayoutExecutionContext aLEC = new LayoutExecutionContext (aSWEC, aMenuItem); final HCHead aHead = aHtml.head ();
@Nullable private static Locale _getSafeDisplayLocale () { final IRequestWebScope aRequestScope = WebScopeManager.getRequestScopeOrNull (); if (aRequestScope != null) try { // This may fail, if a weird application context is used return RequestSettings.getDisplayLocale (aRequestScope); } catch (final RuntimeException ex) { // This happens e.g. on internal errors on startup } return InternalErrorSettings.getFallbackLocale (); }
@Nonnull public static IMenuTree getMenuTree (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) { final IMenuTree aMenuTree = getRequestState (aRequestScope).getMenuTree (); if (aMenuTree == null) throw new IllegalStateException ("No menu tree is present!"); return aMenuTree; }
@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; }
@Nonnull public final HCHtml createHTML (@Nonnull final IRequestWebScopeWithoutResponse aRequestScope) throws ForcedRedirectException final Locale aDisplayLocale = RequestSettings.getDisplayLocale (aRequestScope); final IHCConversionSettingsToNode aConversionSettings = HCSettings.getConversionSettings ();