docs: public void updateModule() {
  
          try {
              m_fieldGroup.commit();
              // validate 'dynamic' tabs here
              TreeMap<String, String> params = Maps.newTreeMap();
              m_parameterGroup.getRows();
              for (I_CmsEditableGroupRow row : m_parameterGroup.getRows()) {
                  TextField paramField = (TextField)(row.getComponent());
                  String paramStr = paramField.getValue();
                  int eqPos = paramStr.indexOf("=");
                  if (eqPos >= 0) {
                      String key = paramStr.substring(0, eqPos);
                      String value = paramStr.substring(eqPos + 1);
                      if (!CmsStringUtil.isEmpty(key)) {
                          params.put(key, value);
                      }
                  }
              }
              m_module.setParameters(params);
  
              List<CmsExportPoint> exportPoints = Lists.newArrayList();
              for (I_CmsEditableGroupRow row : m_exportPointGroup.getRows()) {
                  CmsExportPointWidget widget = (CmsExportPointWidget)(row.getComponent());
                  String source = widget.getUri().trim();
                  String target = widget.getDestination().trim();
                  if (CmsStringUtil.isEmpty(source) || CmsStringUtil.isEmpty(target)) {
                      continue;
                  }
                  CmsExportPoint point = new CmsExportPoint(source, target);
                  exportPoints.add(point);
              }
              m_module.setExportPoints(exportPoints);
  
              List<CmsModuleDependency> dependencies = Lists.newArrayList();
              for (CmsModuleDependencyWidget widget : getFormRowChildren(
                  m_dependencies,
                  CmsModuleDependencyWidget.class)) {
                  String moduleName = widget.getModuleName();
                  String moduleVersion = widget.getModuleVersion();
                  try {
                      CmsModuleDependency dep = new CmsModuleDependency(moduleName, new CmsModuleVersion(moduleVersion));
                      dependencies.add(dep);
                  } catch (Exception e) {
                      LOG.debug(e.getLocalizedMessage(), e);
                  }
              }
              m_module.setDependencies(dependencies);
  
              List<String> moduleResources = Lists.newArrayList();
              for (I_CmsEditableGroupRow row : m_moduleResourcesGroup.getRows()) {
                  CmsModuleResourceSelectField field = (CmsModuleResourceSelectField)(row.getComponent());
                  String moduleResource = field.getValue().trim();
                  if (!moduleResource.isEmpty()) {
                      moduleResources.add(moduleResource);
                  }
              }
              m_module.setResources(moduleResources);
  
              List<String> excludedResources = Lists.newArrayList();
              for (I_CmsEditableGroupRow row : m_excludedResourcesGroup.getRows()) {
                  CmsModuleResourceSelectField field = (CmsModuleResourceSelectField)(row.getComponent());
                  String moduleResource = field.getValue().trim();
                  if (!moduleResource.isEmpty()) {
                      excludedResources.add(moduleResource);
                  }
              }
              m_module.setExcludeResources(excludedResources);
  
              if (!m_oldModuleInstance.isAutoIncrement() && m_module.isAutoIncrement()) {
                  m_module.setCheckpointTime(System.currentTimeMillis());
              }
  
              CmsObject cms = A_CmsUI.getCmsObject();
              if (m_new) {
                  createModuleFolders(cms, m_module);
                  OpenCms.getModuleManager().addModule(cms, m_module);
              } else {
                  OpenCms.getModuleManager().updateModule(cms, m_module);
              }
              CmsVaadinUtils.getWindow(this).close();
              m_updateCallback.run();
          } catch (CommitException e) {
              if (e.getCause() instanceof FieldGroup.FieldGroupInvalidValueException) {
                  int minTabIdx = 999;
                  for (Field<?> field : e.getInvalidFields().keySet()) {
                      int tabIdx = getTabIndex(field);
                      if (tabIdx != -1) {
                          minTabIdx = Math.min(tabIdx, minTabIdx);
                      }
                  }
                  m_tabs.setSelectedTab(minTabIdx);
              } else {
                  CmsErrorDialog.showErrorDialog(e);
              }
              return;
          } catch (Exception e) {
              CmsErrorDialog.showErrorDialog(e);
          }
  
      }