docs: protected I_CmsSearchConfigurationFacetRange parseRangeFacet(JSONObject rangeFacetObject) {
  
          try {
              String range = rangeFacetObject.getString(JSON_KEY_RANGE_FACET_RANGE);
              String name = parseOptionalStringValue(rangeFacetObject, JSON_KEY_FACET_NAME);
              String label = parseOptionalStringValue(rangeFacetObject, JSON_KEY_FACET_LABEL);
              Integer minCount = parseOptionalIntValue(rangeFacetObject, JSON_KEY_FACET_MINCOUNT);
              String start = rangeFacetObject.getString(JSON_KEY_RANGE_FACET_START);
              String end = rangeFacetObject.getString(JSON_KEY_RANGE_FACET_END);
              String gap = rangeFacetObject.getString(JSON_KEY_RANGE_FACET_GAP);
              List<String> sother = parseOptionalStringValues(rangeFacetObject, JSON_KEY_RANGE_FACET_OTHER);
              Boolean hardEnd = parseOptionalBooleanValue(rangeFacetObject, JSON_KEY_RANGE_FACET_HARDEND);
              List<I_CmsSearchConfigurationFacetRange.Other> other = null;
              if (sother != null) {
                  other = new ArrayList<I_CmsSearchConfigurationFacetRange.Other>(sother.size());
                  for (String so : sother) {
                      try {
                          I_CmsSearchConfigurationFacetRange.Other o = I_CmsSearchConfigurationFacetRange.Other.valueOf(
                              so);
                          other.add(o);
                      } catch (Exception e) {
                          LOG.error(Messages.get().getBundle().key(Messages.ERR_INVALID_OTHER_OPTION_1, so), e);
                      }
                  }
              }
              Boolean isAndFacet = parseOptionalBooleanValue(rangeFacetObject, JSON_KEY_FACET_ISANDFACET);
              List<String> preselection = parseOptionalStringValues(rangeFacetObject, JSON_KEY_FACET_PRESELECTION);
              Boolean ignoreAllFacetFilters = parseOptionalBooleanValue(
                  rangeFacetObject,
                  JSON_KEY_FACET_IGNOREALLFACETFILTERS);
              return new CmsSearchConfigurationFacetRange(
                  range,
                  start,
                  end,
                  gap,
                  other,
                  hardEnd,
                  name,
                  minCount,
                  label,
                  isAndFacet,
                  preselection,
                  ignoreAllFacetFilters);
          } catch (JSONException e) {
              LOG.error(
                  Messages.get().getBundle().key(
                      Messages.ERR_RANGE_FACET_MANDATORY_KEY_MISSING_1,
                      JSON_KEY_RANGE_FACET_RANGE
                          + ", "
                          + JSON_KEY_RANGE_FACET_START
                          + ", "
                          + JSON_KEY_RANGE_FACET_END
                          + ", "
                          + JSON_KEY_RANGE_FACET_GAP),
                  e);
              return null;
          }
  
      }