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);
}
}