Package com.iizix.server.app
Class AppFactory
- java.lang.Object
- com.iizix.server.app.AppFactory
- All Implemented Interfaces:
IAppOwner
,IPropMgrInfoProvider
,IRuntimeReferenceLookup
,IKStringInfoProvider
public final class AppFactory extends java.lang.Object implements IAppOwner, IRuntimeReferenceLookup, IPropMgrInfoProvider
The application factory contains the application that should be run.- Author:
- Christopher Mindus
Constructor Summary
Constructors Constructor Description AppFactory(java.lang.String appID, java.lang.String serverEnvironmentName, IAppLoader loader, java.io.File file, AppDefinition definition)
Load the application from an Jar file or just creates a development instance.
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addModuleProject(ModuleProjectPropCnr project)
Adds a Module Project to the application.boolean
areProjectsLoaded()
Returns the projects ready flag.int
cacheSVG(java.lang.String svgString)
Adds the SVG image information as being sent to the client.PropMgr
createPropMgr(ServerShell server)
Creates the Property Manager with reference resolving to the application static properties.void
dispose()
Disposes of this factory.boolean
doAddReference()
Gets the flag for adding the reference string in an attribute when editing the KString in a rich text editor.protected void
finalize()
Upon finalize, the factory is disposed of if not previously done.AppDefinition
getAppDefinition()
Gets the application definition that loaded the app.AppFactory
getAppFactory()
Gets the application factory.static AppFactory
getAppFactory(GProp<?> anyProp)
From a property, virtualized or not, get the AppFactory instance.java.lang.String
getAppFileSystemLocation()
Gets the information of the application Jar file or the Module projects.java.lang.String
getAppID()
Gets the Application ID.AppPropCnr
getAppRoot()
Gets the Application Root container that holds all the Module Projects and settings.java.lang.ClassLoader
getCommonClassLoader()
Gets the class loader for the application used to load the user classes for the application.java.util.Map<java.lang.String,java.lang.String>
getCustomAppMap()
Gets the unmodifiable map of custom app properties, a map with keys and values.java.io.File
getCustomizedAppHTML(ServerShell server, java.io.File file, java.lang.String lang)
Gets a customized "iiziApp.html" file for a specific application ID and optional language.double
getDPR()
Gets the device pixel ratio.EnvProps
getEnvironment()
Gets the environment properties to use.java.util.Map<AuthenticationProvider,IServiceCreator<? extends AbstractOAuthService>>
getExternalAuthenticationProviderMap()
Gets the map of defined and initialized external authentication providers for the application.java.lang.Object
getFileOrResource(java.lang.String target)
Gets the URL or File resource to a target reference.java.util.List<FontFiles>
getFontFiles(java.lang.String fontFamily)
Gets the mapping of a font name to the FontFiles instance.java.lang.String
getHTTPServer()
Gets the HTTP Server string prefix including port.IImageTarget
getImageTarget(java.lang.String ref)
Gets the image reference.IJarFile
getJarFile()
Gets the Jar file for the Module.ModuleProjectPropCnr
getModuleProject(java.lang.String name)
Gets the Module project property container.ModuleProjectPropCnr[]
getModuleProjects()
Gets all the Module project containers.ModuleProjectSettings
getModuleSettings()
Gets the module project settings for the application.java.util.List<java.lang.String>
getPossibleLanguages()
Gets the possible languages defined in text files that can be used for the application.java.util.List<PreloadClientCacheResource>
getPreloadClientCacheResources(ClientSessionGyro clientGyro)
Gets the resources that are required to be downloaded to the client if not present or outdated.GProp<?>
getResolveReferenceProperty()
Gets the property used for references look-up's.java.lang.String
getResourcePrefix()
Gets the base reference name for the resource, typically an image, for the Server or the Designer.PropCnr
getRootFromName(GProp<?> requestor, java.lang.String module)
Gets the module root for a name.GProp<?>
getRuntimePropFromReference(java.lang.String reference, boolean fallBackToNonVirtualized)
Gets a reference for runtime use to get the reference of an item.IServerApplicationSetupPropCnr[]
getServerApplicationSetup(java.lang.String pluginID)
Gets the configuration setup's for a plug-in with specified ID.ServerConfigEnvProps
getServerConfigEnvProps()
Gets the server configuration environment properties for the current environment name.java.lang.String
getServerEnvironmentName()
Returns the name of the server environment to use, e.g.java.lang.String
getTargetLanguageCode()
Gets the language code to use.IUserAuthenticationUI
getUserAuthenticationUI()
Gets the user authentication UI interface used for the initial login.IVirtualizedReferenceLookup
getVirtualizedReferenceLookupRetriever(java.lang.String reference)
Gets the virtuals reference look-up for a reference.void
initialize(IServer server)
Initializes the factory and application.boolean
installFont(java.lang.String fontFamily)
Installs the font families as specified by the font family.boolean
installFonts(java.util.List<FontFiles> fontList)
Installs the font face as specified by theFontFiles
instance for the Client Session.boolean
isDisposed()
Is this factory disposed?boolean
isUserAuthenticationAlwaysRequired()
Returns if the application requires user authentication every time it's started.void
onApplicationSessionStarted(AppSessionGyro appGyro)
Called when an application is instantiated and started by a user session.void
onApplicationSessionStopped(AppSessionGyro appGyro)
Called when an application is stopped.int
prepare(java.lang.ClassLoader parentClassLoader, java.util.Set<java.io.File> resources)
Prepares the application for use, i.e.void
registerVirtualizedReferenceLookupRetriever(java.lang.String type, IVirtualizedReferenceLookupRetriever retriever)
Registers a new virtuals reference look-up retriever for a plug-in.boolean
shouldResolve()
Flag indicating the "real" resolved string should be returned.Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.iizix.text.IKStringInfoProvider
installFonts
Methods inherited from interface com.iizix.server.app.IRuntimeReferenceLookup
getRuntimePropFromReference
Constructor Detail
AppFactory
public AppFactory(java.lang.String appID, java.lang.String serverEnvironmentName, IAppLoader loader, java.io.File file, AppDefinition definition) throws java.io.IOException, PropException
Load the application from an Jar file or just creates a development instance.- Parameters:
appID
- The application ID.serverEnvironmentName
- The name of the server environment to use, e.g. "default", "devel" or "prod", null for default.loader
- The loader.file
- The Jar file when running in non-development mode.definition
- The app definition, null for none.- Throws:
java.io.IOException
- For file errors.PropException
- For property errors.
Method Detail
getAppFactory
public static AppFactory getAppFactory(GProp<?> anyProp)
From a property, virtualized or not, get the AppFactory instance.- Parameters:
anyProp
- Any property in the tree.
getAppDefinition
public AppDefinition getAppDefinition()
Gets the application definition that loaded the app.- Returns:
- The application definition, or null if not loaded from a definition.
getAppFileSystemLocation
public java.lang.String getAppFileSystemLocation()
Gets the information of the application Jar file or the Module projects. The returned string is typically used for logging purposes.- Returns:
- A descriptive string of the application file system location.
areProjectsLoaded
public boolean areProjectsLoaded()
Returns the projects ready flag.- Returns:
- false if any project is still not loaded, true if all projects are fully loaded.
dispose
public void dispose()
Disposes of this factory.
isDisposed
public boolean isDisposed()
Is this factory disposed?- Returns:
true
if factory disposed.
onApplicationSessionStarted
public void onApplicationSessionStarted(AppSessionGyro appGyro)
Called when an application is instantiated and started by a user session.- Parameters:
appGyro
- The application session.
onApplicationSessionStopped
public void onApplicationSessionStopped(AppSessionGyro appGyro)
Called when an application is stopped.- Parameters:
appGyro
- The application session.
getAppFactory
public AppFactory getAppFactory()
Gets the application factory.- Specified by:
getAppFactory
in interfaceIRuntimeReferenceLookup
- Returns:
- The AppFactory.
finalize
protected void finalize() throws java.lang.Throwable
Upon finalize, the factory is disposed of if not previously done. An error is logged if it has not been disposed of.- Overrides:
finalize
in classjava.lang.Object
- Throws:
java.lang.Throwable
- For potential problems.
getServerEnvironmentName
public java.lang.String getServerEnvironmentName()
Returns the name of the server environment to use, e.g. "default", "devel" or "prod".
getServerConfigEnvProps
public ServerConfigEnvProps getServerConfigEnvProps()
Gets the server configuration environment properties for the current environment name. If the properties are not found, a SEVERE event is logged and null is returned.- Returns:
- The ServerConfigEnvProps, or null if not found.
getServerApplicationSetup
public IServerApplicationSetupPropCnr[] getServerApplicationSetup(java.lang.String pluginID)
Gets the configuration setup's for a plug-in with specified ID. Each plug-in may present several configurations, although most commonly a single one. If the configuration environment is not found, a SEVERE event is logged and null is returned.- Parameters:
pluginID
- The plug-in ID.- Returns:
- The configuration setup, or null if the server environment configuration or plug-in configuration is not found. If the plug-in is found but no configurations, an empty array is returned.
initialize
public void initialize(IServer server)
Initializes the factory and application.- Parameters:
server
- The Server instance.
getJarFile
public IJarFile getJarFile()
Gets the Jar file for the Module. This Jar file can be a Jar-in-Jar file, or null if running in development mode (use getDevelopmentDirectory() instead).- Returns:
- The Jar file or null when running in development mode.
registerVirtualizedReferenceLookupRetriever
public void registerVirtualizedReferenceLookupRetriever(java.lang.String type, IVirtualizedReferenceLookupRetriever retriever)
Registers a new virtuals reference look-up retriever for a plug-in.- Parameters:
type
- The reference type, i.e. the string after the Module model, e.g. "panel" for Panels, "vs" for VirtualSpace, and "screen" for Terminal Screens.retriever
- The virtuals reference look-up retriever instance for the type.
getVirtualizedReferenceLookupRetriever
public IVirtualizedReferenceLookup getVirtualizedReferenceLookupRetriever(java.lang.String reference)
Gets the virtuals reference look-up for a reference.- Parameters:
reference
- The reference.- Returns:
- The reference look-up instance, or null if not found.
getCommonClassLoader
public java.lang.ClassLoader getCommonClassLoader()
Gets the class loader for the application used to load the user classes for the application.- Specified by:
getCommonClassLoader
in interfaceIAppOwner
- Returns:
- A class loader.
createPropMgr
public PropMgr createPropMgr(ServerShell server)
Creates the Property Manager with reference resolving to the application static properties. The reference resolving is typically used for images, i.e. aIPropMgrInfoProvider
is implemented.- Parameters:
server
- The Server instance.
addModuleProject
public void addModuleProject(ModuleProjectPropCnr project) throws PropException
Adds a Module Project to the application.- Parameters:
project
- The loaded project.- Throws:
PropException
- If the project cannot be added.
getModuleProject
public ModuleProjectPropCnr getModuleProject(java.lang.String name)
Gets the Module project property container.- Parameters:
name
- The name of the Module project without alias.- Returns:
- The container, or null if not found.
getModuleProjects
public ModuleProjectPropCnr[] getModuleProjects()
Gets all the Module project containers.- Returns:
- The array of Module project containers.
getModuleSettings
public ModuleProjectSettings getModuleSettings()
Gets the module project settings for the application.- Returns:
- The settings, null if not yet loaded.
getCustomAppMap
public java.util.Map<java.lang.String,java.lang.String> getCustomAppMap()
Gets the unmodifiable map of custom app properties, a map with keys and values.- Returns:
- The map, or
null
if not defined.
getExternalAuthenticationProviderMap
public java.util.Map<AuthenticationProvider,IServiceCreator<? extends AbstractOAuthService>> getExternalAuthenticationProviderMap()
Gets the map of defined and initialized external authentication providers for the application.- Returns:
- An unmodifiable map sorted by
Enum.ordinal()
with its service creator interface. Note that this map may be empty if no external authentication providers are configured for the application.
getPossibleLanguages
public java.util.List<java.lang.String> getPossibleLanguages()
Gets the possible languages defined in text files that can be used for the application.- Returns:
- A cached read-only list of possible languages.
prepare
public int prepare(java.lang.ClassLoader parentClassLoader, java.util.Set<java.io.File> resources) throws PropException, java.io.IOException
Prepares the application for use, i.e. load the user classes, resolves references, etc.- Parameters:
parentClassLoader
- The parent class loader, null for default.resources
- The list of classpath resources (files and directories) that is filled in.- Returns:
- The resolve failure count.
- Throws:
PropException
- If a property failed to resolve.java.io.IOException
- For I/O errors.java.lang.IllegalStateException
- If already prepared once.
getAppID
public java.lang.String getAppID()
Gets the Application ID.
isUserAuthenticationAlwaysRequired
public boolean isUserAuthenticationAlwaysRequired()
Returns if the application requires user authentication every time it's started.- Returns:
- true for user authentication always required, by password or fingerprint.
getAppRoot
public AppPropCnr getAppRoot()
Gets the Application Root container that holds all the Module Projects and settings.- Returns:
- The App root property container.
getFileOrResource
public java.lang.Object getFileOrResource(java.lang.String target)
Gets the URL or File resource to a target reference.- Specified by:
getFileOrResource
in interfaceIAppOwner
- Parameters:
target
- The target reference as a normal Module reference string "module:/path/resource".- Returns:
- The
File
orResource
for the resource, null for none.
getFontFiles
public java.util.List<FontFiles> getFontFiles(java.lang.String fontFamily)
Gets the mapping of a font name to the FontFiles instance.- Parameters:
fontFamily
- The font family.- Returns:
- The read-only FontFiles List instance, null if not found.
getRuntimePropFromReference
public GProp<?> getRuntimePropFromReference(java.lang.String reference, boolean fallBackToNonVirtualized)
Gets a reference for runtime use to get the reference of an item. The reference must be fully qualified such as "*ALIAS:/type/path" or "MODULE:/type/path" and cannot be relative.If the flag
fallBackToNonVirtualized
is false, the search will not fallback to searching for the non-virtualized property in the runtime app. The result will only returned virtualized properties, i.e. for a reference as e.g. "module:/vs/someVS", and depending on where this method is called (the client session), also includes other virtualized properties such as panels as e.g. "module:/panel/somePanel".To always fallback to also searching the runtime app, specify
fallBackToNonVirtualized
to true.- Specified by:
getRuntimePropFromReference
in interfaceIRuntimeReferenceLookup
- Parameters:
reference
- The reference to look-up.fallBackToNonVirtualized
- Flag indicating a fallback to non-virtualized properties.- Returns:
- The property found, or null for reference not found.
getEnvironment
public EnvProps getEnvironment()
Gets the environment properties to use.- Specified by:
getEnvironment
in interfaceIRuntimeReferenceLookup
- Returns:
- The environment for the client session, original session or server in that priority order.
getRootFromName
public PropCnr getRootFromName(GProp<?> requestor, java.lang.String module)
Gets the module root for a name. In the Editor, the module is the project, and that root container is returned. In the Server, the module doesn't matter, so the real root returns itself.When running with assertions, this call throws an assertion error by default, showing that the call is directed to a non-root property container.
- Specified by:
getRootFromName
in interfaceIRuntimeReferenceLookup
- Parameters:
requestor
- The requestor property.module
- The module name (without colon), i.e. the project name in the Designer.- Returns:
- The root property container, or null if this container is not the root, or if the module name is not found. The default implementation returns null.
getHTTPServer
public java.lang.String getHTTPServer()
Gets the HTTP Server string prefix including port.- Specified by:
getHTTPServer
in interfaceIKStringInfoProvider
- Returns:
- The "" because the client loads from relative path.
getImageTarget
public IImageTarget getImageTarget(java.lang.String ref)
Gets the image reference.- Specified by:
getImageTarget
in interfaceIKStringInfoProvider
- Parameters:
ref
- The image definition reference string.- Returns:
- The Image target interface, or null if not found.
doAddReference
public boolean doAddReference()
Gets the flag for adding the reference string in an attribute when editing the KString in a rich text editor.- Specified by:
doAddReference
in interfaceIKStringInfoProvider
- Returns:
- Flag to add a special text reference for the rich text editor.
shouldResolve
public boolean shouldResolve()
Flag indicating the "real" resolved string should be returned. This value is true for the runtime client when in "real run mode".- Specified by:
shouldResolve
in interfaceIKStringInfoProvider
- Returns:
- Flag to resolve strings or not.
getResolveReferenceProperty
public GProp<?> getResolveReferenceProperty()
Gets the property used for references look-up's.- Specified by:
getResolveReferenceProperty
in interfaceIKStringInfoProvider
- Returns:
- The property to use for looking up others.
getResourcePrefix
public java.lang.String getResourcePrefix()
Gets the base reference name for the resource, typically an image, for the Server or the Designer. This reference is "/$" (the default in this interface) for the Designer, but should be "/$APPID/" for the Server, where APPID is the application being run by the client. The Server must therefore implement this method and return that string instead.- Specified by:
getResourcePrefix
in interfaceIKStringInfoProvider
- Returns:
- The resource prefix string: "/$APPID/" for the Server, where APPID is the application being run by the client.
getDPR
public double getDPR()
Gets the device pixel ratio.- Specified by:
getDPR
in interfaceIKStringInfoProvider
- Returns:
- The device pixel ratio, default 1.0.
getTargetLanguageCode
public java.lang.String getTargetLanguageCode()
Gets the language code to use.- Specified by:
getTargetLanguageCode
in interfaceIKStringInfoProvider
- Returns:
- The language code, or null for default.
installFont
public boolean installFont(java.lang.String fontFamily)
Installs the font families as specified by the font family.- Specified by:
installFont
in interfaceIKStringInfoProvider
- Parameters:
fontFamily
- The font family or families.- Returns:
- true for success, false if the remote part doesn't support installation, e.g. in a preview browser.
installFonts
public boolean installFonts(java.util.List<FontFiles> fontList)
Installs the font face as specified by theFontFiles
instance for the Client Session. Once installed, the font family can be used.- Specified by:
installFonts
in interfaceIKStringInfoProvider
- Parameters:
fontList
- The list of font files to install.- Returns:
- true for success, false if the remote part doesn't support installation, e.g. in a preview browser.
cacheSVG
public int cacheSVG(java.lang.String svgString)
Adds the SVG image information as being sent to the client.This method is not intended to be called and logs a severe error and returns 1 (one).
- Specified by:
cacheSVG
in interfaceIPropMgrInfoProvider
- Parameters:
svgString
- The SVG string.- Returns:
- The cached index value for the SVG string. A negative value indicates that it needs sending to the client, whereas a positive means only the index is required to be sent. A return value of zero is an error and means not to send it to client at all.
getPreloadClientCacheResources
public java.util.List<PreloadClientCacheResource> getPreloadClientCacheResources(ClientSessionGyro clientGyro)
Gets the resources that are required to be downloaded to the client if not present or outdated.- Parameters:
clientGyro
- The client gyro.- Returns:
- The list of resources that are relevant for the client in question. The resources relative URLs must be prefixed with Application ID (i.e.
).getResourcePrefix()
getUserAuthenticationUI
public IUserAuthenticationUI getUserAuthenticationUI()
Gets the user authentication UI interface used for the initial login.- Returns:
- The user authentication interface.
getCustomizedAppHTML
public java.io.File getCustomizedAppHTML(ServerShell server, java.io.File file, java.lang.String lang)
Gets a customized "iiziApp.html" file for a specific application ID and optional language.- Parameters:
server
- The server instance.file
- The compressed iiziApp.html file without customization.lang
- The language requested, ornull
for default.- Returns:
- The customized (and cached) file to send instead of the un-customized one, or
null
for none, i.e. in case of error.