[ 
https://issues.apache.org/jira/browse/TRINIDAD-2226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Prakash Udupa updated TRINIDAD-2226:
------------------------------------

    Status: Patch Available  (was: Open)
    
> Provide mechanism to reload skin definitions from trinidad-skins.xml
> --------------------------------------------------------------------
>
>                 Key: TRINIDAD-2226
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2226
>             Project: MyFaces Trinidad
>          Issue Type: Improvement
>          Components: Skinning
>    Affects Versions: 2.0.2-core
>            Reporter: Prakash Udupa
>         Attachments: JIRA_2226_Patch_over_1_2_12_6_2_branch.patch, 
> JIRA_2226_Patch_over_trunk.patch
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> Currently there is no way to be able to update the skins to an app at runtime 
> without needing to restart the app. Request here is to provide it in 
> Trinidad's skinning framework.
> Requirement: Provide an API that complies to the following:
> -------------------------------------------------------------------------------------
> 1. Reads (or marks it dirty so that it is read in next request) 
> trinidad-skins.xml and update the new skin definitions as per its contents
> 2. Subsequent requests on the webapp should reflect the skin definitions from 
> trinidad-skins.xml that was re-read
> 3. Should be statically called (because the clients of such API are usually 
> deployment tools that work outside of JSF lifecycle)
> 4. Cannot depend on any context object other than ServletContext (because 
> that is what a non-JSF entry point to this API can provide)
> Proposed API:
> ---------------------
> 1. New public non-static method in 
> 'org.apache.myfaces.trinidad.skin.SkinFactory'
> /**
>  * Reloads the skins that was registered with this factory.
>  * Subclassers are expected to provide the implementation.
>  */
> public void reload()
> - We implement this in 
> 'org.apache.myfaces.trinidadinternal.skin.SkinFactoryImpl'. In this 
> implementation we will preserve the order in which we register skins, which 
> is the following:
>      a) Register the base skins in Trinidad
>      b) Give chance to all registered Configurator services to attach their 
> skins to the SkinFactory programatically.
>      c) Read trinidad-skins.xml from META-INF and WEB-INF, and for the skin 
> definitions in there, create Skins and register with the SkinFactory
> - Clients will call 'SkinFactory.getFactory().reload();' after updating the 
> trinidad-skins.xml to be able to reload the skins in the next request to the 
> app (browser cache clearance / Ctrl+F5 is of course needed).
> 2. New public method in 'org.apache.myfaces.trinidad.config.Configurator'
> /**
>  * The skinning framework calls this method to notify Configurators that the 
> specified SkinFactory has been reloaded.
>  * The Configurator implementations may choose to reload skins here.
>  * @param externalContext the external context
>  * @param factory the SkinFactory instance to which the skins can be reloaded
>  */
>  public void reloadSkins(ExternalContext externalContext, SkinFactory 
> factory){}
> - This method will be no-op in the Configurator class, and can optionally be 
> implemented by any registered configurator services.
> - The reload() method noted in #1 above will call this method on all 
> registered configurator services before attempting to register the skins from 
> trinidad-skins.xml that it will re-read now. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to