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]
