docs: public static <C extends I_CmsConfigurationObject<C>> List<C> combineConfigurationElements(
          List<C> parentConfigs,
          List<C> childConfigs,
          boolean preserveDisabled) {
  
          List<C> result = new ArrayList<C>();
          Map<String, C> map = new LinkedHashMap<String, C>();
          if (parentConfigs != null) {
              for (C parent : Lists.reverse(parentConfigs)) {
                  map.put(parent.getKey(), parent);
              }
          }
          if (childConfigs == null) {
              childConfigs = Collections.emptyList();
          }
          for (C child : Lists.reverse(childConfigs)) {
              String childKey = child.getKey();
              if (child.isDisabled() && !preserveDisabled) {
                  map.remove(childKey);
              } else {
                  C parent = map.get(childKey);
                  map.remove(childKey);
                  C newValue;
                  if (parent != null) {
                      newValue = parent.merge(child);
                  } else {
                      newValue = child;
                  }
                  map.put(childKey, newValue);
              }
          }
          result = new ArrayList<C>(map.values());
          Collections.reverse(result);
          // those multiple "reverse" calls may a bit confusing. They are there because on the one hand we want to keep the
          // configuration items from one configuration in the same order as they are defined, on the other hand we want
          // configuration items from a child configuration to rise to the top of the configuration items.
  
          // so for example, if the parent configuration has items with the keys A,B,C,E
          // and the child configuration has items  with the keys C,B,D
          // we want the items of the combined configuration in the order C,B,D,A,E
  
          return result;
      }