This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 893a98d23f75f631c2397c407601c0fbba4b9061 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Wed Apr 19 10:09:15 2023 +0700 JAMES-3777 Filtering aggregate should rely on increments --- .../apache/james/jmap/api/filtering/impl/FilteringAggregate.java | 9 +++++++-- .../james/jmap/api/filtering/impl/IncrementalRuleChange.java | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java index 6e3baf1878..51648f2e2b 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java @@ -70,8 +70,10 @@ public class FilteringAggregate { public List<? extends Event> defineRules(DefineRulesCommand storeCommand) { Preconditions.checkArgument(shouldNotContainDuplicates(storeCommand.getRules())); StateMismatchException.checkState(expectedState(storeCommand.getIfInState()), "Provided state must be as same as the current state"); - ImmutableList<RuleSetDefined> events = ImmutableList.of( - new RuleSetDefined(aggregateId, history.getNextEventId(), ImmutableList.copyOf(storeCommand.getRules()))); + + ImmutableList<Event> events = IncrementalRuleChange.ofDiff(aggregateId, history.getNextEventId(), state.rules, storeCommand.getRules()) + .map(ImmutableList::<Event>of) + .orElseGet(() -> ImmutableList.of(new RuleSetDefined(aggregateId, history.getNextEventId(), ImmutableList.copyOf(storeCommand.getRules())))); events.forEach(this::apply); return events; } @@ -101,5 +103,8 @@ public class FilteringAggregate { if (event instanceof RuleSetDefined) { state = state.set(((RuleSetDefined)event).getRules()); } + if (event instanceof IncrementalRuleChange) { + state = state.set(((IncrementalRuleChange)event).apply(state.rules)); + } } } diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java index 9207663b35..8d3c7d26e8 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java @@ -162,6 +162,10 @@ public class IncrementalRuleChange implements Event { return rulesDeleted; } + public ImmutableList<Rule> getRulesUpdated() { + return rulesUpdated; + } + public ImmutableList<Rule> apply(ImmutableList<Rule> rules) { ImmutableMap<Rule.Id, Rule> indexedUpdates = rulesUpdated.stream() .collect(ImmutableMap.toImmutableMap( --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org