Repository: incubator-unomi Updated Branches: refs/heads/master 8dfd6ac2c -> 358c4df04
UNOMI-22 : Iterates on sub conditions and check match on session or profile depending on condition type. Support both "or" and "and" sub conditions Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/358c4df0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/358c4df0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/358c4df0 Branch: refs/heads/master Commit: 358c4df04a01ef00dfb27632976e42ad4e572f79 Parents: 8dfd6ac Author: Thomas Draier <[email protected]> Authored: Fri Apr 8 11:25:23 2016 +0200 Committer: Thomas Draier <[email protected]> Committed: Fri Apr 8 11:25:23 2016 +0200 ---------------------------------------------------------------------- .../services/services/ProfileServiceImpl.java | 25 ++++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/358c4df0/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java ---------------------------------------------------------------------- diff --git a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java index e097111..a25fc44 100644 --- a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java +++ b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java @@ -525,12 +525,27 @@ public class ProfileServiceImpl implements ProfileService, SynchronousBundleList @Override public boolean matchCondition(Condition condition, Profile profile, Session session) { ParserHelper.resolveConditionType(definitionsService, condition); - Condition profileCondition = definitionsService.extractConditionByTag(condition, "profileCondition"); - Condition sessionCondition = definitionsService.extractConditionByTag(condition, "sessionCondition"); - if (profileCondition != null && !persistenceService.testMatch(profileCondition, profile)) { - return false; + + if (condition.getConditionTypeId().equals("booleanCondition")) { + List<Condition> subConditions = (List<Condition>) condition.getParameter("subConditions"); + boolean isAnd = "and".equals(condition.getParameter("operator")); + for (Condition subCondition : subConditions) { + if (isAnd && !matchCondition(subCondition, profile, session)) { + return false; + } + if (!isAnd && matchCondition(subCondition, profile, session)) { + return true; + } + } + return subConditions.size() > 0 && isAnd; + } else { + Condition profileCondition = definitionsService.extractConditionByTag(condition, "profileCondition"); + Condition sessionCondition = definitionsService.extractConditionByTag(condition, "sessionCondition"); + if (profileCondition != null && !persistenceService.testMatch(profileCondition, profile)) { + return false; + } + return !(sessionCondition != null && !persistenceService.testMatch(sessionCondition, session)); } - return !(sessionCondition != null && !persistenceService.testMatch(sessionCondition, session)); } public void batchProfilesUpdate(BatchUpdate update) {
