Class ModuleApp

All Implemented Interfaces:
EventListener, IClassInstantiationAtResolve, IClientCachePreload, IClientCacheResource, IGProp<GProp<?>[]>, IPropCnr, ISecretsContext, Cloneable

This Module Applications settings that defines the behavior of the application and contains its settings.
Author:
Christopher Mindus
  • Field Details

    • PN_ICON_BITMAP

      public static final String PN_ICON_BITMAP
      The icon bitmap property.
      See Also:
    • PN_ICON_SVG

      public static final String PN_ICON_SVG
      The icon SVG property.
      See Also:
    • PN_ICON_BITMAP_DARK

      public static final String PN_ICON_BITMAP_DARK
      The icon bitmap property for the dark mode: the optional twin of PN_ICON_BITMAP (CC-ICONS-DARK-SAMPLES, LK-D-9). Absent, the light icon is used in the dark mode too.
      See Also:
    • PN_ICON_SVG_DARK

      public static final String PN_ICON_SVG_DARK
      The icon SVG property for the dark mode: the optional twin of PN_ICON_SVG.
      See Also:
    • PN_ICON_BACKGROUND

      public static final String PN_ICON_BACKGROUND
      The icon background color.
      See Also:
    • PN_TILE_COLOR

      public static final String PN_TILE_COLOR
      The (Windows) tile color property.
      See Also:
    • PN_THEME_COLOR

      public static final String PN_THEME_COLOR
      The (Safari) theme color property.
      See Also:
    • PN_CSS_ASSETS

      public static final String PN_CSS_ASSETS
      The custom CSSAssetReferences property for custom CSS.
      See Also:
    • PN_IIZIRUN_PHONE

      public static final String PN_IIZIRUN_PHONE
      The availability for iiziRun Phones property.
      See Also:
    • PN_IIZIRUN_TABLET

      public static final String PN_IIZIRUN_TABLET
      The availability for iiziRun Tablets property.
      See Also:
    • PN_IIZIAPP_BROWSER

      public static final String PN_IIZIAPP_BROWSER
      The availability for iiziApp Browser property.
      See Also:
    • PN_GA_MEASUREMENT_ID

      public static final String PN_GA_MEASUREMENT_ID
      The Google Analytics 4 Measurement ID property (G-...) for the application when it runs in a Browser, in a tab or installed as a web app. Empty or absent means no Web Analytics. iiziRun on phones and tablets uses its own Firebase configuration (Runtime page) and never reads this.
      See Also:
    • GA_MEASUREMENT_ID_PATTERN

      public static final Pattern GA_MEASUREMENT_ID_PATTERN
      The pattern a GA4 Measurement ID must match: G- followed by 4 to 16 upper-case letters or digits. The one definition, shared with the server, which writes nothing from a property file into the page unless it matches.
    • PN_WEB_ENGINE_WARNING

      public static final String PN_WEB_ENGINE_WARNING
      The unpatched web engine warning choice property: WEB_ENGINE_WARNING_IIZI (default), WEB_ENGINE_WARNING_APP or WEB_ENGINE_WARNING_NEVER. It decides who warns a user whose web engine - Android System WebView, Chrome on Android, or iOS - no longer receives security updates. The server counts and logs such sessions whatever it says.
      See Also:
    • WEB_ENGINE_WARNING_IIZI

      public static final int WEB_ENGINE_WARNING_IIZI
      Warning choice: IIZI warns the user with its own notice when the client session connects (the default).
      See Also:
    • WEB_ENGINE_WARNING_APP

      public static final int WEB_ENGINE_WARNING_APP
      Warning choice: the application decides. It reads IClientSessionGyro.getWebEngineStatus() and calls IClientSessionGyro.showWebEngineWarning() when it wants the notice shown.
      See Also:
    • WEB_ENGINE_WARNING_NEVER

      public static final int WEB_ENGINE_WARNING_NEVER
      Warning choice: the user is never warned.
      See Also:
    • PN_UI_MODES

      public static final String PN_UI_MODES
      The appearance modes property: the modes the application allows a client to show (CC-THEME-DARK-V5, ruled DK-D-2): UI_MODES_BOTH (default, the user chooses light, dark or auto in the Browser, the PWA or iiziRun, or the application sets it from Java), UI_MODES_LIGHT for an application whose own styling is light, UI_MODES_DARK. The client clamps a choice the application does not allow to the mode it does, without changing the choice the device keeps.
      See Also:
    • UI_MODES_BOTH

      public static final int UI_MODES_BOTH
      The appearance modes choice: light and dark, the user chooses (the default).
      See Also:
    • UI_MODES_LIGHT

      public static final int UI_MODES_LIGHT
      The appearance modes choice: light only.
      See Also:
    • UI_MODES_DARK

      public static final int UI_MODES_DARK
      The appearance modes choice: dark only.
      See Also:
    • SECRETS_CONTEXT_PREFIX

      public static final String SECRETS_CONTEXT_PREFIX
      The prefix of the application's secrets context: "app.", followed by its App ID (ModuleProjectSettings.APP_ID), e.g. app.com.mindus.icu (CC-SECRETS-SK3-CONTEXTS).
      See Also:
  • Constructor Details

    • ModuleApp

      public ModuleApp()
      Creates the applications properties without a name. The name must be set in all cases using the setPropertyAtom call.
    • ModuleApp

      public ModuleApp(Atom propertyAtom)
      Creates the applications properties with the specified name.
      Parameters:
      propertyAtom - the name of the component, unique within it's parent.
  • Method Details

    • addPredefinedProps

      protected void addPredefinedProps() throws PropException
      Adds the predefined properties for this container. This method is called once just after construction of the property container and sometimes population of it.

      The method should add properties to create or get reference to using the maybeAddProp method. When the PropCnr instance is cloned, the method getPredefinedProps() is called in order for the subclass to be able to retrieve the new instances to these properties, if stored in instance variables.

      Subclasses must override this method to do the appropriate initialization, as this method does nothing for the PropCnr class implementation.

      Overrides:
      addPredefinedProps in class PropCnr
      Throws:
      PropException - for property exceptions.
    • getPredefinedProps

      protected void getPredefinedProps()
      Gets potential references to predefined properties for this container. This method is called once just after cloning of the property container.

      The method should get reference to using the getProp(...) methods. This allows the subclass to be able to retrieve the new instances to the properties created during addPredefinedProps() if stored in instance variables.

      Subclasses must override this method to do the appropriate initialization, as this method does nothing for the PropCnr class implementation.

      Overrides:
      getPredefinedProps in class PropCnr
    • clone

      public ModuleApp clone()
      Clones the ModuleApp.
      Overrides:
      clone in class PropCnr
    • getSecretsContext

      public String getSecretsContext()
      Gets the secrets context of the application: SECRETS_CONTEXT_PREFIX followed by its App ID, e.g. app.com.mindus.icu (decision P-3 (b)). The key of a secret-marked member is the context and the member's atom path from this container. The loader gives the application's .iiziPush the same context.
      Specified by:
      getSecretsContext in interface ISecretsContext
      Returns:
      The context, or null when the App ID is not set or does not make a valid context name (logged SEVERE once).
    • onPropTreeInitialized

      public void onPropTreeInitialized() throws IOException, PropException
      Called when the tree of the file is complete: gives every secret-marked member its value from this machine's secrets store (CC-SECRETS-SK3-CONTEXTS, design section 5). A missing value is logged once per key and leaves the member unconfigured; the load goes on (P-15).
      Specified by:
      onPropTreeInitialized in interface IGProp<GProp<?>[]>
      Overrides:
      onPropTreeInitialized in class PropCnr
      Throws:
      IOException - For file errors of the children.
      PropException - For initialization problems of the children.
    • getName

      public String getName()
      Gets the name of the application using the default language code.
      Returns:
      The application name, or null if not defined.
    • getName

      public String getName(String languageCode)
      Gets the name of the application using the specified language code.
      Parameters:
      languageCode - The language code, or null for the default language code.
      Returns:
      The potentially localized application name (default text table or none is used when the languageCode is null). The application name may be null if not defined.
    • getNameKString

      public KString getNameKString()
      Gets the name of the application as a KString.
      Returns:
      The application name, or null if not defined. The name may be localized using the text tables.
    • getDescription

      public String getDescription()
      Gets the description of the application using the default language code.
      Returns:
      The application name, or null if not defined.
    • getDescription

      public String getDescription(String languageCode)
      Gets the description of the application using the specified language code.
      Parameters:
      languageCode - The language code, or null for the default language code.
      Returns:
      The potentially localized application description (default text table or none is used when the languageCode is null). The application description may be null if not defined.
    • getDescriptionKString

      public KString getDescriptionKString()
      Gets the description of the application as a KString.
      Returns:
      The application description, or null if not defined. The description may be localized using the text tables.
    • getTextTable

      public TextTable getTextTable()
      Gets the text table that is assigned to the app. In case the application is localized, then you can get text tables for a particular language code, or all, from this instance.
      Returns:
      The text table for the application, or null if none is set.
    • getTextTable

      public TextTable getTextTable(String languageCode) throws LanguageException
      Gets the text table used for a particular language code defined in the app. In the case the language code is mapped to another language, that text table will be returned.
      Parameters:
      languageCode - The language code, or null for the default language.
      Returns:
      The text table for the application, or null if none is set.
      Throws:
      LanguageException - If the languageCode is unknown.
    • isAppLocalized

      public boolean isAppLocalized()
      Gets the setting if this is a localized application, i.e. has support to be displayed in different languages, thus has support uses multiple text tables. This is known by checking the text tables derived text tables and their language codes, and so on. But this is not an optimal solution because it requires computation.
      Returns:
      The configured setting by the app developer if this app supports localization. If so, the text table should have derived text tables for all defined language codes. Errors and warnings will be displayed to the app developer if there is a mismatch of the localization settings and defined language codes.
    • getVSReference

      public VSReference getVSReference(Atom refAtom)
      Gets the VSReference that is initially used as start-up for the application.
      Specified by:
      getVSReference in interface IGProp<GProp<?>[]>
      Overrides:
      getVSReference in class PropCnr
      Parameters:
      refAtom - The property asking for the VSReference.
      Returns:
      The instance of the VSReference or null if unassigned. The returned instance could also be a VSParticipant and should therefore be processed accordingly.
    • createVSReference

      public VSReference createVSReference(Atom refAtom, PropCnr[] returnParent)
      Creates a VSReference instance from the container or any parent containers. The method is used in the Designer to create a VirtualSpace connection for VSRelativeReference to look up the VSReference instance in order to resolve the relative path to the target property.

      This method needs to be overridden by subclasses of PropCnr that has a VSReference as property, and *SHOULD* match getVSReference(Atom).

      The default is to re-target the call to the parent container, and if the root, a folder or a file property is reached, null is returned.

      Overrides:
      createVSReference in class PropCnr
      Parameters:
      refAtom - The property asking for the VSReference.
      returnParent - An array of PropCnr [1] that will be filled in with the parent property of the VSRefernce.
      Returns:
      The instance of the VSReference or null if unassigned. The returned instance could also be a VSParticipant and should therefore be processed accordingly.

      For this method, it's a VSReference.

    • getInitialVSComponent

      public VSComponent getInitialVSComponent()
      Gets the component that initially should have focus, or be called (if VSAction is returned).
      Returns:
      The initial focus or action to call, null for none.
    • getAppSessionFocusProvider

      public IAppSessionFocusProvider getAppSessionFocusProvider()
      Gets the class implementing the interface for application focus provider.
      Returns:
      The instance providing custom focus processing, or null for none (i.e. only default processing).
    • getUnloadedAppSessionFocusProvider

      public String getUnloadedAppSessionFocusProvider()
      Gets the class name of a declared application focus provider whose instance is not available: the class did not load when the application was prepared, it was not instantiated, or it does not implement IAppSessionFocusProvider. The server refuses the sessions and the sign-ins of such an application instead of treating it as one without a gate (CC-FIX-ADMIN-GATE-FAIL-CLOSED, SA-X1).
      Returns:
      The declared class name, or null when no focus provider is declared or its instance is available through getAppSessionFocusProvider().
    • getSelectorReference

      public SelectorReference getSelectorReference()
      Gets the selector reference.
    • isSelectorSelected

      public boolean isSelectorSelected(EnvProps envProps)
      Verifies if the Module Application (project) is selected or not.
      Parameters:
      envProps - The Client Properties for the Client connections.
      Returns:
      true if selected or no selector is defined, false if unselected or the reference is not resolved.
    • getConfiguredLanguages

      public AppLanguages getConfiguredLanguages()
      Gets the configured languages for the Module application.
      Returns:
      The application languages to use.
    • invalidatePossibleThemes

      public void invalidatePossibleThemes()
      Method to invalidate the computed possible themes.
    • computePossibleThemes

      public GThemes computePossibleThemes()
      Lengthy helper function to compute the possible themes for a module application.

      Once calculated in the server, the value never changes. In the designer, it needs recomputing only when a new panels are added, moved, removed, has theme changes or folders changed/removed with theme masks.

      Returns:
      The return value is a mask of the possible themes.
    • getDefaultThemes

      public GThemes getDefaultThemes()
      Gets the default themes to use for desktop and mobile.
      Returns:
      The theme mask, potentially excluding desktop or mobile!
    • getApplicationThemes

      public GThemes getApplicationThemes()
      Gets the application themes to use for desktop and mobile that are supported.
      Returns:
      The theme mask, generally both desktop and mobile, never null.
    • getIconBitmapReference

      public ImageReference getIconBitmapReference()
      Gets the reference to the app icon bitmap.
      Returns:
      The image reference, or null if not defined.
    • getIconBitmap

      public IImageTarget getIconBitmap()
      Gets the app icon bitmap.
      Returns:
      The image, or null if not defined or not of correct format (in case of incorrect format, a warning message is logged).
    • getIconBitmapDarkReference

      public ImageReference getIconBitmapDarkReference()
      Gets the reference to the app icon bitmap for the dark mode (CC-ICONS-DARK-SAMPLES, LK-D-9).
      Returns:
      The image reference, or null if not defined.
    • getIconBitmapDark

      public IImageTarget getIconBitmapDark()
      Gets the app icon bitmap for the dark mode: the twin of getIconBitmap() with the same checks. Absent, the light icon is used in the dark mode too.
      Returns:
      The image, or null if not defined or not of correct format (in case of incorrect format, a warning message is logged).
    • getIconSVGReference

      public ImageReference getIconSVGReference()
      Gets the reference to the app icon SVG.
      Returns:
      The image reference, or null if not defined.
    • getIconSVG

      public IImageTarget getIconSVG()
      Gets the app icon SVG.
      Returns:
      The image, or null if not defined or not of correct format (in case of incorrect format, a warning message is logged).
    • getIconSVGDarkReference

      public ImageReference getIconSVGDarkReference()
      Gets the reference to the app icon SVG for the dark mode (CC-ICONS-DARK-SAMPLES, LK-D-9).
      Returns:
      The image reference, or null if not defined.
    • getIconSVGDark

      public IImageTarget getIconSVGDark()
      Gets the app icon SVG for the dark mode: the twin of getIconSVG() with the same checks. Absent, the light icon is used in the dark mode too.
      Returns:
      The image, or null if not defined or not of correct format (in case of incorrect format, a warning message is logged).
    • getIconBackgroundColor

      public GColor getIconBackgroundColor()
      Gets the icon background color, optionally used for SVG icons and/or PNG transparent images.reference to the app icon bitmap.
      Returns:
      The color, or null if not defined.
    • getTileColor

      public GColor getTileColor()
      Gets the tile color for Windows (8) Start menu.
      Returns:
      The color, or null if not defined.
    • getThemeColor

      public GColor getThemeColor()
      Gets the theme color for Safari on macOS and iOS.
      Returns:
      The color, or null if not defined.
    • getCSSAssetReferences

      public CSSAssetReferences getCSSAssetReferences()
      Gets the CSS asset file references property used to defined custom CSS, to be loaded for the entire app.
      Returns:
      The CSSAssetReferences instance, or null for none.
    • sendCustomCSS

      public void sendCustomCSS(IPropMgrInfoProvider infoProvider, ITransactionCreator transCreator, ITransactionSender sender)
      Send custom CSS to client upon start.
      Parameters:
      transCreator - The creator of send transactions.
      sender - Sends client transactions.
    • getCacheOperation

      public int getCacheOperation()
      Gets the cache value.
      Returns:
      The cache value: 0=no cache, 1=on-first-use (default), 2=preload.
    • isCachedOnClient

      public boolean isCachedOnClient()
      Returns if the resource (font, image, etc) is to be cached on the client side or not.
      Specified by:
      isCachedOnClient in interface IClientCacheResource
      Returns:
      true to cache font (default), or false for client session use only.
    • isCachePreloaded

      public boolean isCachePreloaded()
      Returns if the resource (font, image, etc) is to be cached on the client side when the application starts or not.
      Specified by:
      isCachePreloaded in interface IClientCacheResource
    • getPreloadClientCacheResources

      public PreloadClientCacheResource<GProp<?>>[] getPreloadClientCacheResources(IClientSessionGyro clientGyro)
      Returns the list of resources that are required on the client side in the preload-to-cache mechanism.
      Specified by:
      getPreloadClientCacheResources in interface IClientCachePreload
      Parameters:
      clientGyro - The client gyro engine.
      Returns:
      An array with the resources required.
    • isAvailableForPhones

      public boolean isAvailableForPhones()
      Checks if app is available for iiziRun Phones.
      Returns:
      true (default) if available, false otherwise.
    • isAvailableForTablets

      public boolean isAvailableForTablets()
      Checks if app is available for iiziRun Tablets.
      Returns:
      true (default) if available, false otherwise.
    • isAvailableForBrowsers

      public boolean isAvailableForBrowsers()
      Checks if app is available for iiziApp Browsers.
      Returns:
      true (default) if available, false otherwise.
    • getGAMeasurementId

      public String getGAMeasurementId()
      Gets the GA4 Measurement ID for the application in a Browser, as entered on the App page.
      Returns:
      The trimmed ID, or null when not set or blank. It is NOT validated here: call isValidGAMeasurementId(String) before writing it anywhere.
    • isValidGAMeasurementId

      public static boolean isValidGAMeasurementId(String id)
      Checks a GA4 Measurement ID against GA_MEASUREMENT_ID_PATTERN.
      Parameters:
      id - The ID, or null.
      Returns:
      true when non-null and matching, false otherwise.
    • getGAConsent

      public int getGAConsent()
      Gets the Web Analytics consent choice.
      Returns:
      GA_CONSENT_IIZI_ASKS (the default when not set), GA_CONSENT_APP_ASKS or GA_CONSENT_NONE. Any other stored value is returned as is and reported as an error by verify(PropVerification).
    • getWebEngineWarning

      public int getWebEngineWarning()
      Gets the unpatched web engine warning choice.
      Returns:
      WEB_ENGINE_WARNING_IIZI (the default when not set), WEB_ENGINE_WARNING_APP or WEB_ENGINE_WARNING_NEVER. Any other stored value is returned as is and reported as an error by verify(PropVerification); the server reads it as the default.
    • getUIModes

      public int getUIModes()
      Gets the appearance modes the application allows a client to show.
      Returns:
      UI_MODES_BOTH (the default when not set), UI_MODES_LIGHT or UI_MODES_DARK. Any other stored value is returned as is and reported as an error by verify(PropVerification); the client reads it as both.
    • verify

      public boolean verify(PropVerification verification)
      Verifies this property container. The check performed is the extension of classes and that no circular reference is present.
      Specified by:
      verify in interface IGProp<GProp<?>[]>
      Overrides:
      verify in class PropCnr
      Parameters:
      verification - The property verification class.
      Returns:
      true if verification should proceed, false if disposed of and verification should not take place.