docs: public CmsADEConfigDataInternal parseConfiguration(String basePath, CmsXmlContent content) throws CmsException {
  
          m_detailPageConfigs = Lists.newArrayList();
          m_functionReferences = Lists.newArrayList();
          m_modelPageConfigs = Lists.newArrayList();
          m_propertyConfigs = Lists.newArrayList();
          m_resourceTypeConfigs = Lists.newArrayList();
  
          if (!content.hasLocale(DEFAULT_LOCALE)) {
              return CmsADEConfigDataInternal.emptyConfiguration(basePath);
          }
          CmsXmlContentRootLocation root = new CmsXmlContentRootLocation(content, DEFAULT_LOCALE);
          for (I_CmsXmlContentValueLocation node : root.getSubValues(N_RESOURCE_TYPE)) {
              try {
                  parseResourceTypeConfig(basePath, node);
              } catch (CmsException e) {
                  LOG.warn(e.getLocalizedMessage(), e);
              }
          }
          for (I_CmsXmlContentValueLocation node : root.getSubValues(N_MODEL_PAGE)) {
              try {
                  parseModelPage(node);
              } catch (CmsException e) {
                  LOG.warn(e.getLocalizedMessage(), e);
              }
          }
          for (I_CmsXmlContentLocation node : root.getSubValues(N_PROPERTY)) {
              parseProperty(node);
          }
          for (I_CmsXmlContentLocation node : root.getSubValues(N_DETAIL_PAGE)) {
              try {
                  parseDetailPage(node);
              } catch (CmsException e) {
                  LOG.warn(e.getLocalizedMessage(), e);
              }
          }
  
          for (I_CmsXmlContentLocation node : root.getSubValues(N_FUNCTION_REF)) {
              parseFunctionReference(node);
          }
  
          boolean removeAllFormatters = getBoolean(root, N_REMOVE_ALL_FORMATTERS);
          CmsFormatterChangeSet formatterChangeSet = parseFormatterChangeSet(basePath, root, removeAllFormatters);
          boolean discardInheritedTypes = getBoolean(root, N_DISCARD_TYPES);
          boolean discardInheritedProperties = getBoolean(root, N_DISCARD_PROPERTIES);
          boolean discardInheritedModelPages = getBoolean(root, N_DISCARD_MODEL_PAGES);
  
          boolean createContentsLocally = getBoolean(root, N_CREATE_CONTENTS_LOCALLY);
          boolean preferDetailPagesForLocalContents = getBoolean(root, N_PREFER_DETAIL_PAGES_FOR_LOCAL_CONTENTS);
  
          boolean isModuleConfig = OpenCms.getResourceManager().getResourceType(
              content.getFile().getTypeId()).getTypeName().equals(CmsADEManager.MODULE_CONFIG_TYPE);
  
          String masterConfig = getString(root.getSubValue(N_MASTER_CONFIG));
          CmsResource masterConfigResource = null;
          if (masterConfig != null) {
              masterConfigResource = m_cms.readResource(masterConfig, CmsResourceFilter.IGNORE_EXPIRATION);
          }
          Set<CmsUUID> functions = new LinkedHashSet<>();
          for (I_CmsXmlContentValueLocation node : root.getSubValues(N_FUNCTION)) {
              CmsXmlVfsFileValue value = (CmsXmlVfsFileValue)node.getValue();
              CmsLink link = value.getLink(m_cms);
              if (link != null) {
                  functions.add(link.getStructureId());
              }
          }
          if (functions.isEmpty()) {
              functions = null;
          }
  
          CmsADEConfigDataInternal result = new CmsADEConfigDataInternal(
              content.getFile(),
              isModuleConfig,
              basePath,
              masterConfigResource,
              m_resourceTypeConfigs,
              discardInheritedTypes,
              m_propertyConfigs,
              discardInheritedProperties,
              m_detailPageConfigs,
              m_modelPageConfigs,
              m_functionReferences,
              discardInheritedModelPages,
              createContentsLocally,
              preferDetailPagesForLocalContents,
              formatterChangeSet,
              functions);
          return result;
      }