"facet.locale"));
resOuter.add(fieldName + PROPNAME_INDEX_SEPARATOR + fieldNameInIndex, resInner);
if (!(epd.getRequiredType() == PropertyType.DATE)) {
throw new JahiaException("Can not date facet on a field which is not a DateField: "
+ f, "Can not date facet on a field which is not a DateField: " + f,
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY);
}
Integer mincount = params.getFieldInt(f, FacetParams.FACET_MINCOUNT);
if (mincount == null) {
Boolean zeros = params.getFieldBool(f, FacetParams.FACET_ZEROS);
// mincount = (zeros!=null && zeros) ? 0 : 1;
mincount = (zeros != null && !zeros) ? 1 : 0;
// current default is to include zeros.
}
final String startS = required.getFieldParam(f,
FacetParams.FACET_DATE_START);
final Date start;
try {
start = JahiaQueryParser.DATE_TYPE.parseMath(NOW, startS);
} catch (SolrException e) {
throw new JahiaException(
"date facet 'start' is not a valid Date string: " + startS,
"date facet 'start' is not a valid Date string: " + startS,
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY, e);
}
final String endS = required.getFieldParam(f, FacetParams.FACET_DATE_END);
Date end; // not final, hardend may change this
try {
end = JahiaQueryParser.DATE_TYPE.parseMath(NOW, endS);
} catch (SolrException e) {
throw new JahiaException("date facet 'end' is not a valid Date string: " + endS,
"date facet 'end' is not a valid Date string: " + endS,
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY, e);
}
if (end.before(start)) {
throw new JahiaException("date facet 'end' comes before 'start': " + endS + " < "
+ startS,
"date facet 'end' comes before 'start': " + endS + " < " + startS,
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY);
}
final String gap = required.getFieldParam(f, FacetParams.FACET_DATE_GAP);
final DateMathParser dmp = new DateMathParser(DateField.UTC, Locale.US);
dmp.setNow(NOW);
try {
Date low = start;
while (low.before(end)) {
dmp.setNow(low);
final String lowI = JahiaQueryParser.DATE_TYPE.toInternal(low);
final String label = JahiaQueryParser.DATE_TYPE.indexedToReadable(lowI, true);
Date high = dmp.parseMath(gap);
if (end.before(high)) {
if (params.getFieldBool(f, FacetParams.FACET_DATE_HARD_END,
false)) {
high = end;
} else {
end = high;
}
}
if (high.before(low)) {
throw new JahiaException("date facet infinite loop (is gap negative?)",
"date facet infinite loop (is gap negative?)",
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY);
}
final String highI = JahiaQueryParser.DATE_TYPE.toInternal(high);
Query rangeQuery = getRangeQuery(fieldNameInIndex, lowI, highI, true, true);
int count = rangeCount(rangeQuery);
if (count >= mincount) {
resInner.add(label + PROPNAME_INDEX_SEPARATOR + rangeQuery.toString(),
count);
}
low = high;
}
} catch (java.text.ParseException e) {
throw new JahiaException(
"date facet 'gap' is not a valid Date Math string: " + gap,
"date facet 'gap' is not a valid Date Math string: " + gap,
JahiaException.PARAMETER_ERROR, JahiaException.ERROR_SEVERITY, e);
}