Repository: james-project Updated Branches: refs/heads/master 3b648e90f -> 1a5f21ad6
JAMES-2530 Review RuleDTO structure Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1a5f21ad Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1a5f21ad Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1a5f21ad Branch: refs/heads/master Commit: 1a5f21ad67a61184b0ab1c36cf464f9c968c9650 Parents: d7b1caf Author: Benoit Tellier <btell...@linagora.com> Authored: Mon Aug 27 17:56:25 2018 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Tue Aug 28 12:48:15 2018 +0700 ---------------------------------------------------------------------- .../james/jmap/cassandra/filtering/RuleDTO.java | 188 +++++++++++++++---- .../src/test/resources/json/event.json | 28 ++- .../src/test/resources/json/eventComplex.json | 56 ++++-- 3 files changed, 210 insertions(+), 62 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/1a5f21ad/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java index 02c3fae..c3d8c54 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java @@ -32,6 +32,139 @@ import com.google.common.collect.ImmutableList; public class RuleDTO { + public static class ConditionDTO { + + public static ConditionDTO from(Rule.Condition condition) { + return new ConditionDTO( + condition.getField().asString(), + condition.getComparator().asString(), + condition.getValue()); + } + + private final String field; + private final String comparator; + private final String value; + + @JsonCreator + public ConditionDTO(@JsonProperty("field") String field, + @JsonProperty("comparator") String comparator, + @JsonProperty("value") String value) { + this.field = field; + this.comparator = comparator; + this.value = value; + } + + public String getField() { + return field; + } + + public String getComparator() { + return comparator; + } + + public String getValue() { + return value; + } + + public Rule.Condition toCondition() { + return Rule.Condition.of( + Rule.Condition.Field.of(field), + Rule.Condition.Comparator.of(comparator), + value); + } + + @Override + public final boolean equals(Object o) { + if (o instanceof ConditionDTO) { + ConditionDTO other = (ConditionDTO) o; + + return Objects.equals(this.field, other.field) + && Objects.equals(this.comparator, other.comparator) + && Objects.equals(this.value, other.value); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(field, comparator, value); + } + } + + public static class ActionDTO { + + public static class AppendInMailboxesDTO { + + public static AppendInMailboxesDTO from(Rule.Action.AppendInMailboxes appendInMailboxes) { + return new AppendInMailboxesDTO(appendInMailboxes.getMailboxIds()); + } + + @JsonCreator + public AppendInMailboxesDTO(@JsonProperty("mailboxIds") List<String> mailboxIds) { + this.mailboxIds = ImmutableList.copyOf(mailboxIds); + } + + private final List<String> mailboxIds; + + public List<String> getMailboxIds() { + return mailboxIds; + } + + public Rule.Action.AppendInMailboxes toAppendInMailboxes() { + return Rule.Action.AppendInMailboxes.withMailboxIds(mailboxIds); + } + + @Override + public final boolean equals(Object o) { + if (o instanceof AppendInMailboxesDTO) { + AppendInMailboxesDTO that = (AppendInMailboxesDTO) o; + + return Objects.equals(this.mailboxIds, that.mailboxIds); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(mailboxIds); + } + } + + public static ActionDTO from(Rule.Action action) { + return new ActionDTO(AppendInMailboxesDTO.from(action.getAppendInMailboxes())); + } + + @JsonCreator + public ActionDTO(@JsonProperty("appendIn") AppendInMailboxesDTO appendIn) { + this.appendIn = appendIn; + } + + private final AppendInMailboxesDTO appendIn; + + public AppendInMailboxesDTO getAppendIn() { + return appendIn; + } + + public Rule.Action toAction() { + return Rule.Action.of(appendIn.toAppendInMailboxes()); + } + + @Override + public final boolean equals(Object o) { + if (o instanceof ActionDTO) { + ActionDTO actionDTO = (ActionDTO) o; + + return Objects.equals(this.appendIn, actionDTO.appendIn); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(appendIn); + } + } + public static ImmutableList<Rule> toRules(List<RuleDTO> ruleDTOList) { Preconditions.checkNotNull(ruleDTOList); return ruleDTOList.stream() @@ -49,31 +182,23 @@ public class RuleDTO { public static RuleDTO from(Rule rule) { return new RuleDTO(rule.getId().asString(), rule.getName(), - rule.getCondition().getField().asString(), - rule.getCondition().getComparator().asString(), - rule.getCondition().getValue(), - rule.getAction().getAppendInMailboxes().getMailboxIds()); + ConditionDTO.from(rule.getCondition()), + ActionDTO.from(rule.getAction())); } private final String id; private final String name; - private final String field; - private final String comparator; - private final String value; - private final List<String> mailboxIds; + private final ConditionDTO conditionDTO; + private final ActionDTO actionDTO; @JsonCreator public RuleDTO(@JsonProperty("id") String id, @JsonProperty("name") String name, - @JsonProperty("field") String field, - @JsonProperty("comparator") String comparator, - @JsonProperty("value") String value, - @JsonProperty("mailboxIds") List<String> mailboxIds) { + @JsonProperty("condition") ConditionDTO conditionDTO, + @JsonProperty("action") ActionDTO actionDTO) { this.name = name; - this.field = field; - this.comparator = comparator; - this.value = value; - this.mailboxIds = ImmutableList.copyOf(mailboxIds); + this.conditionDTO = conditionDTO; + this.actionDTO = actionDTO; Preconditions.checkNotNull(id); this.id = id; @@ -87,32 +212,21 @@ public class RuleDTO { return name; } - public String getField() { - return field; - } - - public String getComparator() { - return comparator; - } - - public String getValue() { - return value; + public ConditionDTO getCondition() { + return conditionDTO; } - public List<String> getMailboxIds() { - return mailboxIds; + public ActionDTO getAction() { + return actionDTO; } public Rule toRule() { return Rule.builder() .id(Rule.Id.of(id)) .name(name) - .condition(Rule.Condition.of( - Rule.Condition.Field.valueOf(field), - Rule.Condition.Comparator.of(comparator), - value)) + .condition(conditionDTO.toCondition()) .name(name) - .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(mailboxIds))) + .action(actionDTO.toAction()) .build(); } @@ -123,17 +237,15 @@ public class RuleDTO { return Objects.equals(this.id, ruleDTO.id) && Objects.equals(this.name, ruleDTO.name) - && Objects.equals(this.field, ruleDTO.field) - && Objects.equals(this.comparator, ruleDTO.comparator) - && Objects.equals(this.value, ruleDTO.value) - && Objects.equals(this.mailboxIds, ruleDTO.mailboxIds); + && Objects.equals(this.conditionDTO, ruleDTO.conditionDTO) + && Objects.equals(this.actionDTO, ruleDTO.actionDTO); } return false; } @Override public final int hashCode() { - return Objects.hash(id, name, field, comparator, value, mailboxIds); + return Objects.hash(id, name, conditionDTO, actionDTO); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/1a5f21ad/server/data/data-jmap-cassandra/src/test/resources/json/event.json ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/test/resources/json/event.json b/server/data/data-jmap-cassandra/src/test/resources/json/event.json index b77e46a..d86fdfe 100644 --- a/server/data/data-jmap-cassandra/src/test/resources/json/event.json +++ b/server/data/data-jmap-cassandra/src/test/resources/json/event.json @@ -6,18 +6,30 @@ { "id":"1", "name":"a name", - "field":"cc", - "comparator":"contains", - "value":"something", - "mailboxIds":["id-01"] + "condition": { + "field": "cc", + "comparator": "contains", + "value": "something" + }, + "action": { + "appendIn": { + "mailboxIds":["id-01"] + } + } }, { "id":"2", "name":"a name", - "field":"cc", - "comparator":"contains", - "value":"something", - "mailboxIds":["id-01"] + "condition": { + "field": "cc", + "comparator": "contains", + "value": "something" + }, + "action": { + "appendIn": { + "mailboxIds":["id-01"] + } + } } ] } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/1a5f21ad/server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json b/server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json index a08e2d1..62b6ab0 100644 --- a/server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json +++ b/server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json @@ -6,34 +6,58 @@ { "id":"id-from", "name":"a name", - "field":"from", - "comparator":"contains", - "value":"A value to match 4", - "mailboxIds":["mbx1"] + "condition": { + "field": "from", + "comparator": "contains", + "value": "A value to match 4" + }, + "action": { + "appendIn": { + "mailboxIds":["mbx1"] + } + } }, { "id":"id-rcpt", "name":"a name", - "field":"recipient", - "comparator":"not-exactly-equals", - "value":"A value to match 3", - "mailboxIds":["mbx1"] + "condition": { + "field": "recipient", + "comparator": "not-exactly-equals", + "value": "A value to match 3" + }, + "action": { + "appendIn": { + "mailboxIds":["mbx1"] + } + } }, { "id":"id-subject", "name":"a name", - "field":"subject", - "comparator":"not-contains", - "value":"A value to match 2", - "mailboxIds":["mbx1"] + "condition": { + "field": "subject", + "comparator": "not-contains", + "value": "A value to match 2" + }, + "action": { + "appendIn": { + "mailboxIds":["mbx1"] + } + } }, { "id":"id-to", "name":"a name", - "field":"to", - "comparator":"exactly-equals", - "value":"A value to match 1", - "mailboxIds":["mbx1"] + "condition": { + "field": "to", + "comparator": "exactly-equals", + "value": "A value to match 1" + }, + "action": { + "appendIn": { + "mailboxIds":["mbx1"] + } + } } ] } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org