/**
  * Returns the id of the currently active theme.
  *
  * @return the id of the current theme, never <code>null</code>
  */
 public static String getCurrentThemeId() {
   ThemeManager manager = ThemeManager.getInstance();
   ISessionStore session = ContextProvider.getSession();
   // 1) try URL parameter
   String result = ContextProvider.getRequest().getParameter(THEME_URL_PARM);
   if (result != null && manager.hasTheme(result)) {
     // TODO [rh] a method named get... should be constant, i.e. shouldn't
     //      have side-effects like altering session attributes
     session.setAttribute(CURR_THEME_ATTR, result);
   }
   // 2) try session attribute
   else {
     result = (String) session.getAttribute(CURR_THEME_ATTR);
   }
   // 3) use default
   if (result == null) {
     result = ThemeManager.DEFAULT_THEME_ID;
   }
   return result;
 }
 /**
  * Sets the current theme to the theme identified by the given id.
  *
  * @param themeId the id of the theme to activate
  * @throws IllegalArgumentException if no theme with the given id is registered
  */
 public static void setCurrentThemeId(final String themeId) {
   if (!ThemeManager.getInstance().hasTheme(themeId)) {
     throw new IllegalArgumentException("Illegal theme id: " + themeId);
   }
   ContextProvider.getSession().setAttribute(CURR_THEME_ATTR, themeId);
 }