docs: public void actionSave() {
  
          HttpServletRequest request = getJsp().getRequest();
          // save initialized instance of this class in request attribute for included sub-elements
          request.setAttribute(SESSION_WORKPLACE_CLASS, this);
  
          // special case: set the preferred editor settings in the user settings object
          CmsUserSettings userSettings = new CmsUserSettings(getSettings().getUser());
          // first set the old preferred editors
          m_userSettings.setEditorSettings(userSettings.getEditorSettings());
          // also set the old start gallery settings
          m_userSettings.setStartGalleriesSetting(userSettings.getStartGalleriesSettings());
          // then set the old synchronization settings
          m_userSettings.setSynchronizeSettings(userSettings.getSynchronizeSettings());
          Enumeration<String> en = request.getParameterNames();
          while (en.hasMoreElements()) {
              // search all request parameters for the presence of the preferred editor parameters
              String paramName = en.nextElement();
              if (paramName.startsWith(PARAM_PREFERREDEDITOR_PREFIX)) {
                  String paramValue = request.getParameter(paramName);
                  if ((paramValue != null) && !INPUT_DEFAULT.equals(paramValue.trim())) {
                      // set selected editor for this resource type
                      m_userSettings.setPreferredEditor(
                          paramName.substring(PARAM_PREFERREDEDITOR_PREFIX.length()),
                          CmsEncoder.decode(paramValue));
                  } else {
                      // reset preferred editor for this resource type
                      m_userSettings.setPreferredEditor(paramName.substring(PARAM_PREFERREDEDITOR_PREFIX.length()), null);
                  }
              } else if (paramName.startsWith(PARAM_STARTGALLERY_PREFIX)) {
                  String paramValue = request.getParameter(paramName);
                  if (paramValue != null) {
                      // set the selected start gallery for the gallery type
                      m_userSettings.setStartGallery(
                          paramName.substring(PARAM_STARTGALLERY_PREFIX.length()),
                          CmsEncoder.decode(paramValue));
                  }
              }
          }
  
          // set the current user in the settings object
          m_userSettings.setUser(getSettings().getUser());
          m_userSettings.setAdditionalPreferencesFrom(userSettings);
  
          try {
              // write the user settings to the db
              m_userSettings.save(getCms());
          } catch (CmsException e) {
              // should usually never happen
              if (LOG.isInfoEnabled()) {
                  LOG.info(e.getLocalizedMessage());
              }
          }
  
          // update the preferences and project after saving
          updatePreferences(getCms(), getJsp().getRequest());
  
          try {
              String projectName = m_userSettings.getStartProject();
              CmsProject project = getCms().readProject(projectName);
              getCms().getRequestContext().setCurrentProject(project);
              getSettings().setProject(project.getUuid());
          } catch (Exception e) {
              // should usually never happen
              LOG.error(e.getLocalizedMessage());
          }
  
          // now determine if the dialog has to be closed or not
          try {
              if (DIALOG_SET.equals(getParamAction())) {
                  // after "set" action, leave dialog open
                  Map<String, String[]> params = new HashMap<String, String[]>();
                  params.put(PARAM_TAB, new String[] {String.valueOf(getActiveTab())});
                  params.put(PARAM_SETPRESSED, new String[] {Boolean.TRUE.toString()});
                  sendForward(getJsp().getRequestContext().getUri(), params);
              } else {
                  // forward to dialog with action set to reload the workplace
                  Map<String, String[]> params = new HashMap<String, String[]>();
                  params.put(PARAM_ACTION, new String[] {DIALOG_RELOAD});
                  sendForward(getJsp().getRequestContext().getUri(), params);
              }
          } catch (IOException e) {
              // error during forward, do nothing
              if (LOG.isInfoEnabled()) {
                  LOG.info(e.getLocalizedMessage());
              }
          } catch (ServletException e) {
              // error during forward, do nothing
              if (LOG.isInfoEnabled()) {
                  LOG.info(e.getLocalizedMessage());
              }
          }
      }