final JsonNode value = node.path(BOOLEAN_PROPERTY);
if (!value.isArray()) {
throw new ParseException("Invalid property '" + BOOLEAN_PROPERTY + "': value is not an array");
}
final BooleanQueryNode booleanNode = new BooleanQueryNode();
final Iterator<JsonNode> elements = value.getElements();
while (elements.hasNext()) {
final JsonNode element = elements.next();
// parse occur
final OccurPropertyParser occurParser = new OccurPropertyParser(element, field);
Modifier mod = null;
if (occurParser.isPropertyDefined()) {
mod = occurParser.parse();
}
// check if there is either a node or a twig property and parse it
QueryNode queryNode = null;
if (element.has(NodePropertyParser.NODE_PROPERTY)) {
final NodePropertyParser nodeParser = new NodePropertyParser(element, field);
queryNode = nodeParser.parse();
}
if (element.has(TwigPropertyParser.TWIG_PROPERTY)) {
final TwigPropertyParser twigParser = new TwigPropertyParser(element, field);
queryNode = twigParser.parse();
}
// check if either a node or twig property has been defined
if (queryNode == null) {
throw new ParseException("Invalid property '" + BOOLEAN_PROPERTY + "': object does not define a twig or node query");
}
// wrap the query node with a modifier, and add it to the boolean query
booleanNode.add(new ModifierQueryNode(queryNode, mod));
}
return booleanNode;
}