This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit b8178a25173db914ad8e40c4dbb7255a6d39250e
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Thu Jul 18 14:50:16 2019 +0200

    JAMES-2813 add FieldName to DeletedMessageField to allow serialization of 
criterion
---
 .../apache/james/vault/dto/query/CriterionDTO.java |  4 +-
 .../james/vault/dto/query/QueryTranslator.java     | 67 +++++++---------------
 .../james/vault/search/DeletedMessageField.java    | 43 ++++++++++----
 .../org/apache/james/vault/search/FieldName.java   | 22 +++++++
 .../dto/query/QueryElementDeserializerTest.java    |  2 +-
 .../dto/query/QueryElementSerializerTest.java      |  3 +-
 .../james/vault/dto/query/QueryTranslatorTest.java |  2 +-
 7 files changed, 83 insertions(+), 60 deletions(-)

diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
index 325136d..374d1ef 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
@@ -21,6 +21,8 @@ package org.apache.james.vault.dto.query;
 
 import java.util.Objects;
 
+import org.apache.james.vault.search.FieldName;
+
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -31,7 +33,7 @@ import com.google.common.base.MoreObjects;
 public class CriterionDTO implements QueryElement {
 
     @VisibleForTesting
-    static CriterionDTO from(QueryTranslator.FieldName fieldName, 
QueryTranslator.Operator operator, String value) {
+    static CriterionDTO from(FieldName fieldName, QueryTranslator.Operator 
operator, String value) {
         return new CriterionDTO(fieldName.getValue(), operator.getValue(), 
value);
     }
 
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
index 17845fe..e51dc83 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
@@ -19,13 +19,7 @@
 
 package org.apache.james.vault.dto.query;
 
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.DELETION_DATE;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.DELIVERY_DATE;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.HAS_ATTACHMENT;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.ORIGIN_MAILBOXES;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.RECIPIENTS;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.SENDER;
-import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldName.SUBJECT;
+
 import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldValueParser.BOOLEAN_PARSER;
 import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldValueParser.MAIL_ADDRESS_PARSER;
 import static 
org.apache.james.vault.dto.query.QueryTranslator.FieldValueParser.STRING_PARSER;
@@ -50,6 +44,7 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.vault.search.Criterion;
 import org.apache.james.vault.search.CriterionFactory;
+import org.apache.james.vault.search.FieldName;
 import org.apache.james.vault.search.Query;
 
 import com.github.fge.lambdas.Throwing;
@@ -66,6 +61,13 @@ public class QueryTranslator {
         }
     }
 
+    public static FieldName getField(String fieldNameString) throws 
QueryTranslator.QueryTranslatorException {
+        return Stream.of(FieldName.values())
+            .filter(fieldName -> fieldName.getValue().equals(fieldNameString))
+            .findFirst()
+            .orElseThrow(() -> new 
QueryTranslator.QueryTranslatorException("fieldName: '" + fieldNameString + "' 
is not supported"));
+    }
+
     enum Combinator {
         AND("and");
 
@@ -80,32 +82,7 @@ public class QueryTranslator {
         }
     }
 
-    enum FieldName {
-        DELETION_DATE("deletionDate"),
-        DELIVERY_DATE("deliveryDate"),
-        RECIPIENTS("recipients"),
-        SENDER("sender"),
-        HAS_ATTACHMENT("hasAttachment"),
-        ORIGIN_MAILBOXES("originMailboxes"),
-        SUBJECT("subject");
-
-        static FieldName getField(String fieldNameString) throws 
QueryTranslatorException {
-            return Stream.of(values())
-                .filter(fieldName -> fieldName.value.equals(fieldNameString))
-                .findFirst()
-                .orElseThrow(() -> new QueryTranslatorException("fieldName: '" 
+ fieldNameString + "' is not supported"));
-        }
-
-        private final String value;
-
-        FieldName(String value) {
-            this.value = value;
-        }
 
-        public String getValue() {
-            return value;
-        }
-    }
 
     enum Operator {
         EQUALS("equals"),
@@ -177,23 +154,23 @@ public class QueryTranslator {
         FieldValueParser.MailboxIdValueParser mailboxIdParser = new 
FieldValueParser.MailboxIdValueParser(mailboxIdFactor);
 
         return defaultRegistryBuilder()
-            .put(ORIGIN_MAILBOXES, CONTAINS, testedValue -> 
CriterionFactory.containsOriginMailbox(mailboxIdParser.parse(testedValue)))
+            .put(FieldName.ORIGIN_MAILBOXES, CONTAINS, testedValue -> 
CriterionFactory.containsOriginMailbox(mailboxIdParser.parse(testedValue)))
             .build();
     }
 
     private ImmutableTable.Builder<FieldName, Operator, Function<String, 
Criterion<?>>> defaultRegistryBuilder() {
         return ImmutableTable.<FieldName, Operator, Function<String, 
Criterion<?>>>builder()
-            .put(DELETION_DATE, BEFORE_OR_EQUALS, testedValue -> 
CriterionFactory.deletionDate().beforeOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
-            .put(DELETION_DATE, AFTER_OR_EQUALS, testedValue -> 
CriterionFactory.deletionDate().afterOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
-            .put(DELIVERY_DATE, BEFORE_OR_EQUALS, testedValue -> 
CriterionFactory.deliveryDate().beforeOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
-            .put(DELIVERY_DATE, AFTER_OR_EQUALS, testedValue -> 
CriterionFactory.deliveryDate().afterOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
-            .put(RECIPIENTS, CONTAINS, testedValue -> 
CriterionFactory.containsRecipient(MAIL_ADDRESS_PARSER.parse(testedValue)))
-            .put(SENDER, EQUALS, testedValue -> 
CriterionFactory.hasSender(MAIL_ADDRESS_PARSER.parse(testedValue)))
-            .put(HAS_ATTACHMENT, EQUALS, testedValue -> 
CriterionFactory.hasAttachment(BOOLEAN_PARSER.parse(testedValue)))
-            .put(SUBJECT, EQUALS, testedValue -> 
CriterionFactory.subject().equals(STRING_PARSER.parse(testedValue)))
-            .put(SUBJECT, EQUALS_IGNORE_CASE, testedValue -> 
CriterionFactory.subject().equalsIgnoreCase(STRING_PARSER.parse(testedValue)))
-            .put(SUBJECT, CONTAINS, testedValue -> 
CriterionFactory.subject().contains(STRING_PARSER.parse(testedValue)))
-            .put(SUBJECT, CONTAINS_IGNORE_CASE, testedValue -> 
CriterionFactory.subject().containsIgnoreCase(STRING_PARSER.parse(testedValue)));
+            .put(FieldName.DELETION_DATE, BEFORE_OR_EQUALS, testedValue -> 
CriterionFactory.deletionDate().beforeOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
+            .put(FieldName.DELETION_DATE, AFTER_OR_EQUALS, testedValue -> 
CriterionFactory.deletionDate().afterOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
+            .put(FieldName.DELIVERY_DATE, BEFORE_OR_EQUALS, testedValue -> 
CriterionFactory.deliveryDate().beforeOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
+            .put(FieldName.DELIVERY_DATE, AFTER_OR_EQUALS, testedValue -> 
CriterionFactory.deliveryDate().afterOrEquals(ZONED_DATE_TIME_PARSER.parse(testedValue)))
+            .put(FieldName.RECIPIENTS, CONTAINS, testedValue -> 
CriterionFactory.containsRecipient(MAIL_ADDRESS_PARSER.parse(testedValue)))
+            .put(FieldName.SENDER, EQUALS, testedValue -> 
CriterionFactory.hasSender(MAIL_ADDRESS_PARSER.parse(testedValue)))
+            .put(FieldName.HAS_ATTACHMENT, EQUALS, testedValue -> 
CriterionFactory.hasAttachment(BOOLEAN_PARSER.parse(testedValue)))
+            .put(FieldName.SUBJECT, EQUALS, testedValue -> 
CriterionFactory.subject().equals(STRING_PARSER.parse(testedValue)))
+            .put(FieldName.SUBJECT, EQUALS_IGNORE_CASE, testedValue -> 
CriterionFactory.subject().equalsIgnoreCase(STRING_PARSER.parse(testedValue)))
+            .put(FieldName.SUBJECT, CONTAINS, testedValue -> 
CriterionFactory.subject().contains(STRING_PARSER.parse(testedValue)))
+            .put(FieldName.SUBJECT, CONTAINS_IGNORE_CASE, testedValue -> 
CriterionFactory.subject().containsIgnoreCase(STRING_PARSER.parse(testedValue)));
     }
 
     private Criterion<?> translate(CriterionDTO dto) throws 
QueryTranslatorException {
@@ -204,7 +181,7 @@ public class QueryTranslator {
 
     private Function<String, Criterion<?>> getCriterionParser(CriterionDTO 
dto) {
         return criterionRegistry.get(
-            FieldName.getField(dto.getFieldName()),
+            getField(dto.getFieldName()),
             Operator.getOperator(dto.getOperator()));
     }
 
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
index ffe5737..cc1bddc 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
@@ -19,6 +19,14 @@
 
 package org.apache.james.vault.search;
 
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.DELETION_DATE_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.DELIVERY_DATE_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.HAS_ATTACHMENT_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.ORIGIN_MAILBOXES_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.RECIPIENTS_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.SENDER_EXTRACTOR;
+import static 
org.apache.james.vault.search.DeletedMessageField.ValueExtractor.SUBJECT_EXTRACTOR;
+
 import java.time.ZonedDateTime;
 import java.util.Collection;
 import java.util.Optional;
@@ -27,7 +35,24 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.vault.DeletedMessage;
 
-public interface DeletedMessageField<T> {
+public class DeletedMessageField<T> {
+
+    private FieldName fieldName;
+    private ValueExtractor<T> valueExtractor;
+
+    private DeletedMessageField(FieldName fieldName, ValueExtractor<T> 
valueExtractor) {
+        this.fieldName = fieldName;
+        this.valueExtractor = valueExtractor;
+    }
+
+    public FieldName fieldName() {
+        return fieldName;
+    }
+
+    ValueExtractor<T> valueExtractor() {
+        return valueExtractor;
+    }
+
     interface ValueExtractor<T> {
         Optional<T> extract(DeletedMessage deletedMessage);
 
@@ -38,16 +63,14 @@ public interface DeletedMessageField<T> {
         ValueExtractor<Boolean> HAS_ATTACHMENT_EXTRACTOR = deletedMessage -> 
Optional.of(deletedMessage.hasAttachment());
         ValueExtractor<Collection<MailboxId>> ORIGIN_MAILBOXES_EXTRACTOR = 
deletedMessage -> Optional.of(deletedMessage.getOriginMailboxes());
         ValueExtractor<String> SUBJECT_EXTRACTOR = DeletedMessage::getSubject;
-
     }
 
-    DeletedMessageField<ZonedDateTime> DELETION_DATE = () -> 
ValueExtractor.DELETION_DATE_EXTRACTOR;
-    DeletedMessageField<ZonedDateTime> DELIVERY_DATE = () -> 
ValueExtractor.DELIVERY_DATE_EXTRACTOR;
-    DeletedMessageField<Collection<MailAddress>> RECIPIENTS = () -> 
ValueExtractor.RECIPIENTS_EXTRACTOR;
-    DeletedMessageField<MailAddress> SENDER = () -> 
ValueExtractor.SENDER_EXTRACTOR;
-    DeletedMessageField<Boolean> HAS_ATTACHMENT = () -> 
ValueExtractor.HAS_ATTACHMENT_EXTRACTOR;
-    DeletedMessageField<Collection<MailboxId>> ORIGIN_MAILBOXES = () -> 
ValueExtractor.ORIGIN_MAILBOXES_EXTRACTOR;
-    DeletedMessageField<String> SUBJECT = () -> 
ValueExtractor.SUBJECT_EXTRACTOR;
+    static final DeletedMessageField<ZonedDateTime> DELETION_DATE = new 
DeletedMessageField<ZonedDateTime>(FieldName.DELETION_DATE, 
DELETION_DATE_EXTRACTOR);
+    static final DeletedMessageField<ZonedDateTime> DELIVERY_DATE = new 
DeletedMessageField<ZonedDateTime>(FieldName.DELIVERY_DATE, 
DELIVERY_DATE_EXTRACTOR);
+    static final DeletedMessageField<Collection<MailAddress>> RECIPIENTS = new 
DeletedMessageField<Collection<MailAddress>>(FieldName.RECIPIENTS, 
RECIPIENTS_EXTRACTOR);
+    static final DeletedMessageField<MailAddress> SENDER = new 
DeletedMessageField<MailAddress>(FieldName.SENDER, SENDER_EXTRACTOR);
+    static final DeletedMessageField<Boolean> HAS_ATTACHMENT = new 
DeletedMessageField<Boolean>(FieldName.HAS_ATTACHMENT, 
HAS_ATTACHMENT_EXTRACTOR);
+    static final DeletedMessageField<Collection<MailboxId>> ORIGIN_MAILBOXES = 
new DeletedMessageField<Collection<MailboxId>>(FieldName.ORIGIN_MAILBOXES, 
ORIGIN_MAILBOXES_EXTRACTOR);
+    static final DeletedMessageField<String> SUBJECT = new 
DeletedMessageField<String>(FieldName.SUBJECT, SUBJECT_EXTRACTOR);
 
-    ValueExtractor<T> valueExtractor();
 }
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java
new file mode 100644
index 0000000..f81c1d1
--- /dev/null
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java
@@ -0,0 +1,22 @@
+package org.apache.james.vault.search;
+
+public enum FieldName {
+    DELETION_DATE("deletionDate"),
+    DELIVERY_DATE("deliveryDate"),
+    RECIPIENTS("recipients"),
+    SENDER("sender"),
+    HAS_ATTACHMENT("hasAttachment"),
+    ORIGIN_MAILBOXES("originMailboxes"),
+    SUBJECT("subject");
+
+    private final String value;
+
+    FieldName(String value) {
+        this.value = value;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+}
\ No newline at end of file
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
index bfd82ac..1187003 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
@@ -23,8 +23,8 @@ import static 
org.apache.james.vault.DeletedMessageFixture.SUBJECT;
 import static org.apache.mailet.base.MailAddressFixture.SENDER;
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.vault.dto.query.QueryTranslator.FieldName;
 import org.apache.james.vault.dto.query.QueryTranslator.Operator;
+import org.apache.james.vault.search.FieldName;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
index 37c98b8..730034c 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
@@ -21,10 +21,9 @@ package org.apache.james.vault.dto.query;
 
 import static org.apache.james.vault.DeletedMessageFixture.SUBJECT;
 import static org.apache.mailet.base.MailAddressFixture.SENDER;
-import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.vault.dto.query.QueryTranslator.FieldName;
 import org.apache.james.vault.dto.query.QueryTranslator.Operator;
+import org.apache.james.vault.search.FieldName;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
index deb6f04..75fa081 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
@@ -23,8 +23,8 @@ import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.vault.dto.query.QueryTranslator.FieldName;
 import org.apache.james.vault.dto.query.QueryTranslator.Operator;
+import org.apache.james.vault.search.FieldName;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to