/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.radiology.report.template;
import java.util.function.Predicate;
import org.jsoup.select.Elements;
/**
* Checks a condition on a subset of elements matching a selector.
*/
class ElementsExpressionValidationRule implements ValidationRule<Elements> {
private final String description;
private final String messageCode;
private final String elementsSelector;
private final Predicate<Elements> condition;
public ElementsExpressionValidationRule(String description, String messageCode, String elementsSelector,
Predicate<Elements> condition) {
this.description = description;
this.messageCode = messageCode;
this.elementsSelector = elementsSelector;
this.condition = condition;
}
/**
* @see org.openmrs.module.radiology.report.template.ValidationRule#check(ValidationResult, Object)
*/
@Override
public void check(ValidationResult validationResult, Elements subject) {
Elements elements = subject.select(elementsSelector);
if (condition.test(elements)) {
validationResult.addError(description, messageCode);
}
}
}