[
https://issues.apache.org/jira/browse/TRINIDAD-1729?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12842899#action_12842899
]
Jeanne Waldman commented on TRINIDAD-1729:
------------------------------------------
The InputStreamProviderFactory is also not enough.
InputStreamProvider provides an inputStream for a file.
NameResolver provides an InputStreamProvider and another NameResolver that can
be used to find files that are imported into the base file. The skinning .xss
files support imports. The skinning .css files do not yet, but someday they
should.
So to think about the future, we should have the customizer implement
NameResolver, not InputStreamProvider.
Therefore, we need to:
1. Make NameResolver public (part of TRINIDAD-1746 )
2. Make InputStreamProvider public (part of TRINIDAD-1746 )
3. The customizer will customize NameResolver.
4. StyleSheetEntry will see if it can find the file the way it does now. If so,
it creates a StyleSheetNameResolver. If not, it loads the customized
NameResolver from META-INF/services if it is there. Otherwise, it throws a
FileNotFoundException.
> provide a hook for for an external decorator of Skin InputStreamProvider
> ------------------------------------------------------------------------
>
> Key: TRINIDAD-1729
> URL: https://issues.apache.org/jira/browse/TRINIDAD-1729
> Project: MyFaces Trinidad
> Issue Type: Improvement
> Components: Skinning
> Reporter: Jeanne Waldman
> Assignee: Jeanne Waldman
> Attachments: 1729InputStreamProviderHookWithTodos.patch
>
>
> A third party (Oracle MDS) would like to use their own InputStreamProvider to
> find skinning css files (like purple-desktop.css) in their own system. The
> current ways to find css files do not work for them.
> 1. We first discussed decorating ExternalContext.getResource(), since in
> Trinidad we create the URL by calling FacesContext's ExternalContext's
> getResource(style-sheet-name). For an example, see
> http://insights2jsf.wordpress.com/2009/07/03/using-custom-factories-or-howto-wrap-facescontext/
> 2. This won't work for them because it returns an URL object
> 3. using ExternalContext's getResourceAsStream won't work because you can't
> find out if the file has been modified.
> 4. What would work is if they decorate or extend the InputStreamProvider, and
> we check this if none of the other means finds the .css file. The other means
> are those found in SkinStyleSheetProvider.java
> 5. To allow them to plugin their InputStreamProvider we
> can do this with a service provider interface where we open up
> META-INF/services/<fully qualified classname of service> and load all of the
> services that way.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.