private void processSingleFacet()

in api_dev/src/main/java/com/google/appengine/api/search/dev/SimpleFacet.java [174:233]


  private void processSingleFacet(DocumentPb.Facet facet) {
    String facetName = facet.getName();
    String facetValue = facet.getValue().getStringValue();
    ContentType facetType = facet.getValue().getType();
    FacetRequest manualFacet = manualFacetRequests.get(facetName);
    if (facetType == ContentType.ATOM) {
      // A manual requested facet?
      if (manualFacet != null) {
        FacetNode manualFacetNode = manualFacetNodes.get(manualFacet.getName());
        // count the value if there is no range (range is not supported for atom facet) and
        // either no value_constraint or the value is in that constraint list.
        if (manualFacet.getParams().getRangeList().isEmpty()
            && (manualFacet.getParams().getValueConstraintList().isEmpty()
                || manualFacet.getParams().getValueConstraintList().contains(facetValue))) {
          manualFacetNode.addValue(facetValue, 1);
        }
      } else if (searchParams.getAutoDiscoverFacetCount() > 0) {
        FacetNode discoveredFacetNode = discoveredFacetNodes.get(facetName);
        if (discoveredFacetNode == null) {
          discoveredFacetNode = new FacetNode(
              facetName, searchParams.getFacetAutoDetectParam().getValueLimit());
          discoveredFacetNodes.put(facetName, discoveredFacetNode);
        }
        discoveredFacetNode.addValue(facetValue, 1, null);
      }
    } else if (facetType == ContentType.NUMBER) {
      double facetValueDouble = Double.parseDouble(facetValue);
      if (manualFacet != null) {
        FacetNode manualFacetNode = manualFacetNodes.get(manualFacet.getName());
        if (!manualFacet.getParams().getRangeList().isEmpty()) {
          for (FacetRange range : manualFacet.getParams().getRangeList()) {
            Double start = range.hasStart() ? Double.parseDouble(range.getStart()) : null;
            Double end = range.hasEnd() ? Double.parseDouble(range.getEnd()) : null;
            if ((start == null || facetValueDouble >= start)
                && (end == null || facetValueDouble < end)) {
              manualFacetNode.addValue(getFacetLabelForRange(start, end), 1, range);
            }
          }
        } else if (!manualFacet.getParams().getValueConstraintList().isEmpty()) {
          for (String constraint : manualFacet.getParams().getValueConstraintList()) {
            if (Double.parseDouble(facetValue) == Double.parseDouble(constraint)) {
              manualFacetNode.addValue(constraint, 1);
            }
          }
        } else {
              manualFacetNode.addNumericValue(Double.parseDouble(facetValue));
        }
      }  else if (searchParams.getAutoDiscoverFacetCount() > 0) {
        FacetNode discoveredFacetNode = discoveredFacetNodes.get(facetName);
        if (discoveredFacetNode == null) {
          discoveredFacetNode = new FacetNode(
              facetName, searchParams.getFacetAutoDetectParam().getValueLimit());
          discoveredFacetNodes.put(facetName, discoveredFacetNode);
        }
        discoveredFacetNode.addNumericValue(Double.parseDouble(facetValue));
      }
    } else {
      throw new RuntimeException("Facet type is not supported : " + facetType);
    }
  }