Шаблон Drools для замены свойства объекта не будет работать
Контекст: я пытаюсь написать шаблон jboss drools, который проверяет значение объекта, является ли оно пустым, пустым или допустимым.
Свойство, содержащее значение, является переменной в зависимости от значения $pitCaract
пример, если $pitCaract=='C' => $valueProperty=valeurItemChaine
поэтому в моем шаблоне я хотел проверить itemDataCheck.valeurItemChaine
вот что я пробовал до сих пор
template header
$pitCaract
$valueProperty
package fr.xxx.validation;
/*created on: Jun 20, 2017*/
import fr.xxx.fides.dashboard.questionnaire.api.models.items.ItemData;
import fr.xxx.fides.dashboard.questionnaire.api.models.types.Item;
import fr.xxx.fides.dashboard.questionnaire.api.checks.QuestionnaireItemException;
import fr.xxx.fides.dashboard.questionnaire.api.ExceptionMessage;
template "Blocking Objects check"
rule "pre-check of blocking @{$pitCaract} @{row.rowNumber}"
auto-focus true
agenda-group "validate"
dialect "mvel"
salience 100
when
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
itemProperty.isMandatory
)
Boolean(booleanValue ==true ) from nullOrEmptyStr($item.itemDataCheck.@{$valueProperty} )
---------------------------------------------------------------^ this line
then
$item.setQuestionnaireItemException(new QuestionnaireItemException(ExceptionMessage.Blocking_item ,QuestionnaireItemException.ERROR ) );
delete($item);
end
end template
function boolean nullOrEmptyStr(Object o)
{
System.out.println("nullOrEmptyStr:"+o);
return o==null || o.toString().trim().isEmpty();
}
Я получаю сообщение об ошибке вида
[Ошибка: невозможно разрешить метод с использованием строгого режима: java.lang.Object.valeurItemChaine()] [Near: {... nullOrEmptyStr( $item.itemDataCheck.valeurItemChaine) ....}]
я пытался
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
itemDataCheck!.@{$valueProperty}.toString().trim().isEmpty(),
itemProperty.isMandatory
)
а также
$item: Item(
itemProperty.pitCaract== "@{$pitCaract}",
nullOrEmptyStr(itemDataCheck!.@{$valueProperty}),
itemProperty.isMandatory
)
Но не повезло заставить это работать.
Единственное рабочее решение itemDataCheck.@{$valueProperty}==null
но этого недостаточно, поскольку значение может быть пустой строкой.
Спасибо за помощь