Overview
The Platform Theme System manages all files needed to skin our server-based thin-client offerings (BA Server and plugins). It was designed to satisfy the following goals:
- Eliminate the need for web and plugin developers to manually manage CSS
- All theme assets need to be automatically injected into every page displayed by our server
- Allow Customers/OEMs/etc to contribute new themes via plugins
- Separate "core" theme files from plugin-specific ones
- Provide extensible architecture for providing plugins via unanticipated methods
API
The Theme System API has two main interfaces:
org.pentaho.platform.api.ui.IThemeManager (Source)
The name "manager" is a bit of a misnomer. It simply serves to provide all known themes in the system. The manager delegates this discovery to the next interface: IThemeResolver
org.pentaho.platform.api.ui.IThemeResolver (Source)
Theme Resolvers are called upon to find all themes they can.
Implementations
There exists only one implementation of the IThemeManager:
org.pentaho.platform.web.html.themes.DefaultThemeManager (Source)
And two implementations of IThemeResolver:
org.pentaho.platform.web.html.themes.PluginThemeResolver (Source)
The Plugin resolver finds theme definitions within Platform Plugins.
org.pentaho.platform.web.html.themes.ServletContextThemeResolver (Source)
ServletContext resolver finds themes from top-level folders in the Pentaho WAR.
Both of these stock resolvers use the same theme.xml file format to describe theme assets