Я использую поддержку языка выражений для написания правил в формате json, используя easy-rules .
MVELRuleFactory ruleFactory = new MVELRuleFactory(new JsonRuleDefinitionReader())
Rules rules = ruleFactory.createRules(new FileReader("user-role-rule.json"))
2 Правил
dept содержит "gcs" && (заголовок содержит "Director" || заголовок содержит "manager")
dept содержит любое из значений ["gcs", "ges", "ips", "csa", "sales - Обновление облака"]
Примечание: dept =«ПРОДАЖА - ОБНОВЛЕНИЕ ОБЛАКА» или «ПРОДАЖА ОБЛАКА США ПРОДАЖ»
user-role-rule.json
[
{
"name": "account",
"description": "User in GCS department having either Director or Manager title",
"priority": 1,
"condition": "user.getDept().toLowerCase().contains(\"gcs\") && (user.getTitle().toLowerCase().contains(\"director\") || user.getTitle().toLowerCase().contains(\"manager\"))",
"actions": [
"user.setRole(\"account\");"
]
},
{
"name": "account_common",
"description": "User in CSM, IPS, CSA, SALES - CLOUD ENTERPRISE or GES department irrespective of any title",
"priority": 1,
"condition": "for (String dep in [\"gcs\",\"ges\",\"ips\",\"csa\",\"sales - cloud renewal\"]) {user.getDept().toLowerCase().contains(dep)}",
"actions": [
"user.setRole(\"account\");"
]
}
]
Класс пользователя pojo
class User {
String userId
String dept
String title
List<String> role
User(String userId, String dept, String title) {
this.userId = userId
this.dept = dept
this.title = title
this.role = new ArrayList<String>()
}
//..ommitting getter setters
}
Здесь первое правилос именем "account" работает нормально, но во 2-м правиле я хочу использовать список проверки строки, подпадающий под любое из ["gcs", "ges", "ips", "csa", "sales - облачное обновление"] ценности.
Примером значения dept является "ПРОДАЖА - ОБНОВЛЕНИЕ ОБЛАКА" или "ПРОДАЖА США ОБНОВЛЕНИЕ ОБЛАКА"
Исключение во втором правиле
Exception in thread "main" [Error: expected : in foreach]
[Near : {... es - cloud renewal"]) {user.getDept().toLowerCase( ....}]
^