public static void setContentOfMatchingElements(Parent parent,
ElementPredicate predicate,
TextContentConverter converter,
Evaluator<? super Parent> evaluator) {
if (parent instanceof Element) {
final Element element = (Element) parent;
if (predicate.accepts(element.getParent(), element)) {
final int count = element.getChildrenCount();
if (count == 0) {
final String content = converter.convertTextContent(element, null);
if (content != null) {
element.addText(content);
}
} else if (count == 1 && element.hasOnlyText()) {
final Text text = element.getChild(Text.class);
final String content = converter.convertTextContent(element, text.getContent());
text.setContent(content);
}
}
}
for (final Child child : parent.getChildren()) {
if (child instanceof Parent
&& evaluator.evaluate((Parent) child) == Evaluation.CONTINUE) {
setContentOfMatchingElements((Parent) child, predicate, converter, evaluator);
}
}
}