protected void importGlobalUserSettings(List<ExportManifestUserSetting> globalSettings) {
   IUserSettingService settingService = PentahoSystem.get(IUserSettingService.class);
   if (settingService != null) {
     for (ExportManifestUserSetting globalSetting : globalSettings) {
       if (isOverwriteFile()) {
         settingService.setGlobalUserSetting(globalSetting.getName(), globalSetting.getValue());
       } else {
         IUserSetting userSetting =
             settingService.getGlobalUserSetting(globalSetting.getName(), null);
         if (userSetting == null) {
           settingService.setGlobalUserSetting(globalSetting.getName(), globalSetting.getValue());
         }
       }
     }
   }
 }
  public void handleRequest(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    try {
      // look for a passed in theme context (content generator, other named area)
      String moduleName = req.getParameter("context");
      OutputStream out = resp.getOutputStream();
      resp.setContentType("text/javascript"); // $NON-NLS-1$
      resp.setHeader("Cache-Control", "no-cache"); // $NON-NLS-1$

      IUserSettingService settingsService =
          PentahoSystem.get(IUserSettingService.class, getPentahoSession(req));

      String activeTheme = (String) getPentahoSession(req).getAttribute("pentaho-user-theme");

      String ua = req.getHeader("User-Agent");
      // check if we're coming from a mobile device, if so, lock to system default (crystal)
      if (!StringUtils.isEmpty(ua) && ua.matches(".*(?i)(iPad|iPod|iPhone|Android).*")) {
        activeTheme = PentahoSystem.getSystemSetting("default-theme", "crystal");
      }
      if (activeTheme == null) {
        try {
          activeTheme =
              settingsService.getUserSetting("pentaho-user-theme", null).getSettingValue();
        } catch (
            Exception
                ignored) { // the user settings service is not valid in the agile-bi deployment of
          // the server
        }
        if (activeTheme == null) {
          activeTheme = PentahoSystem.getSystemSetting("default-theme", "crystal");
        }
      }

      out.write(
          ("\n\n// Theming scripts. This file is generated by ("
                  + getClass().getName()
                  + ") and cannot be found on disk\n")
              .getBytes());

      out.write(("var active_theme = \"" + activeTheme + "\";\n\n").getBytes());

      // Build-up JSON graph for system theme.
      JSONObject root = new JSONObject();
      JSONObject themeObject;

      for (String systemThemeName : themeManager.getSystemThemeIds()) {
        Theme theme = themeManager.getSystemTheme(systemThemeName);

        themeObject = new JSONObject();
        root.put(theme.getId(), themeObject);
        themeObject.put("rootDir", theme.getThemeRootDir());
        for (ThemeResource res : theme.getResources()) {
          themeObject.append("resources", res.getLocation());
        }
      }

      out.write(("var core_theme_tree = " + root.toString() + ";\n\n").getBytes());
      out.write(
          "// Inject the theme script to handle the insertion of requested theme resources\n\n"
              .getBytes());

      ModuleThemeInfo moduleThemeinfo = themeManager.getModuleThemeInfo(moduleName);
      if (moduleThemeinfo != null) {
        // Build-up JSON graph for module theme.
        root = new JSONObject();
        for (Theme theme : moduleThemeinfo.getModuleThemes()) {
          themeObject = new JSONObject();
          root.put(theme.getName(), themeObject);
          themeObject.put("rootDir", theme.getThemeRootDir());
          for (ThemeResource res : theme.getResources()) {
            themeObject.append("resources", res.getLocation());
          }
        }

        out.write(("var module_theme_tree = " + root.toString() + ";\n\n").getBytes());
      }

      // createElement & insertBefore
      out.write(
          ("(function() {\n"
                  + "var script = document.createElement('script');\n"
                  + "script.type = 'text/javascript';\n"
                  +
                  // "script.async = false;\n" +
                  "script.src = CONTEXT_PATH + 'js/themeResources.js';\n"
                  + "var existing = document.getElementsByTagName('script')[0];\n"
                  + "existing.parentNode.insertBefore(script, existing);\n"
                  + "}());")
              .getBytes());

    } catch (IOException e) {
      logger.debug("IO exception creating Theme info", e);
      throw new ServletException(e);
    } catch (JSONException e) {
      logger.debug("JSON exception creating Theme info", e);
      throw new ServletException(e);
    }
  }