throws QueryNodeException {
if (node instanceof DatatypeQueryNode) {
// Set the datatype analyzer to use on the descendant querynodes
final QueryConfigHandler conf = this.getQueryConfigHandler();
final Map<String, Analyzer> dtAnalyzers = conf.get(KeywordConfigurationKeys.DATATYPES_ANALYZERS);
final DatatypeQueryNode dt = (DatatypeQueryNode) node;
if (dtAnalyzers == null) {
throw new IllegalArgumentException("KeywordConfigurationKeys.DATAYPES_ANALYZERS " +
"should be set on the KeywordQueryConfigHandler");
}
if (!dtAnalyzers.containsKey(dt.getDatatype())) {
throw new IllegalArgumentException("Unknown datatype: [" + dt.getDatatype() + "]");
}
// check no datatype is already set
if (datatype != null) {
throw new IllegalArgumentException("Cannot use more than one datatype in a same tree. " +
"Using [" + datatype + "], but receieved also [" + dt.getDatatype() + "]");
}
if (dtAnalyzers.get(dt.getDatatype()) == null) {
throw new IllegalArgumentException("Analyzer of datatype [" + datatype + "] cannot be null.");
}
datatype = dt.getDatatype();
}
// parent twig query
else if (node instanceof TwigQueryNode) {
nbTwigs++;
if (nbTwigs == 1) {