Search in sources :

Example 1 with ThemeSource

use of org.springframework.ui.context.ThemeSource in project spring-framework by spring-projects.

the class UiApplicationContextUtils method initThemeSource.

/**
	 * Initialize the ThemeSource for the given application context,
	 * autodetecting a bean with the name "themeSource". If no such
	 * bean is found, a default (empty) ThemeSource will be used.
	 * @param context current application context
	 * @return the initialized theme source (will never be {@code null})
	 * @see #THEME_SOURCE_BEAN_NAME
	 */
public static ThemeSource initThemeSource(ApplicationContext context) {
    if (context.containsLocalBean(THEME_SOURCE_BEAN_NAME)) {
        ThemeSource themeSource = context.getBean(THEME_SOURCE_BEAN_NAME, ThemeSource.class);
        // Make ThemeSource aware of parent ThemeSource.
        if (context.getParent() instanceof ThemeSource && themeSource instanceof HierarchicalThemeSource) {
            HierarchicalThemeSource hts = (HierarchicalThemeSource) themeSource;
            if (hts.getParentThemeSource() == null) {
                // Only set parent context as parent ThemeSource if no parent ThemeSource
                // registered already.
                hts.setParentThemeSource((ThemeSource) context.getParent());
            }
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Using ThemeSource [" + themeSource + "]");
        }
        return themeSource;
    } else {
        // Use default ThemeSource to be able to accept getTheme calls, either
        // delegating to parent context's default or to local ResourceBundleThemeSource.
        HierarchicalThemeSource themeSource = null;
        if (context.getParent() instanceof ThemeSource) {
            themeSource = new DelegatingThemeSource();
            themeSource.setParentThemeSource((ThemeSource) context.getParent());
        } else {
            themeSource = new ResourceBundleThemeSource();
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Unable to locate ThemeSource with name '" + THEME_SOURCE_BEAN_NAME + "': using default [" + themeSource + "]");
        }
        return themeSource;
    }
}
Also used : HierarchicalThemeSource(org.springframework.ui.context.HierarchicalThemeSource) ThemeSource(org.springframework.ui.context.ThemeSource) HierarchicalThemeSource(org.springframework.ui.context.HierarchicalThemeSource)

Example 2 with ThemeSource

use of org.springframework.ui.context.ThemeSource in project spring-framework by spring-projects.

the class RequestContext method getFallbackTheme.

/**
	 * Determine the fallback theme for this context.
	 * <p>The default implementation returns the default theme (with name "theme").
	 * @return the fallback theme (never {@code null})
	 */
protected Theme getFallbackTheme() {
    ThemeSource themeSource = RequestContextUtils.getThemeSource(getRequest());
    if (themeSource == null) {
        themeSource = new ResourceBundleThemeSource();
    }
    Theme theme = themeSource.getTheme(DEFAULT_THEME_NAME);
    if (theme == null) {
        throw new IllegalStateException("No theme defined and no fallback theme found");
    }
    return theme;
}
Also used : ResourceBundleThemeSource(org.springframework.ui.context.support.ResourceBundleThemeSource) Theme(org.springframework.ui.context.Theme) ThemeSource(org.springframework.ui.context.ThemeSource) ResourceBundleThemeSource(org.springframework.ui.context.support.ResourceBundleThemeSource)

Example 3 with ThemeSource

use of org.springframework.ui.context.ThemeSource in project spring-framework by spring-projects.

the class RequestContextUtils method getTheme.

/**
	 * Retrieves the current theme from the given request, using the ThemeResolver
	 * and ThemeSource bound to the request by the DispatcherServlet.
	 * @param request current HTTP request
	 * @return the current theme, or {@code null} if not found
	 * @see #getThemeResolver
	 */
public static Theme getTheme(HttpServletRequest request) {
    ThemeResolver themeResolver = getThemeResolver(request);
    ThemeSource themeSource = getThemeSource(request);
    if (themeResolver != null && themeSource != null) {
        String themeName = themeResolver.resolveThemeName(request);
        return themeSource.getTheme(themeName);
    } else {
        return null;
    }
}
Also used : ThemeResolver(org.springframework.web.servlet.ThemeResolver) ThemeSource(org.springframework.ui.context.ThemeSource)

Aggregations

ThemeSource (org.springframework.ui.context.ThemeSource)3 HierarchicalThemeSource (org.springframework.ui.context.HierarchicalThemeSource)1 Theme (org.springframework.ui.context.Theme)1 ResourceBundleThemeSource (org.springframework.ui.context.support.ResourceBundleThemeSource)1 ThemeResolver (org.springframework.web.servlet.ThemeResolver)1