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

Reply via email to