james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rouaz...@apache.org
Subject [05/16] james-project git commit: JAMES-2134 Parse Reporting-UA field and construct appropriate object with builder
Date Thu, 05 Apr 2018 12:51:55 GMT
JAMES-2134 Parse Reporting-UA field and construct appropriate object with builder


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b7ea0fe9
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b7ea0fe9
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b7ea0fe9

Branch: refs/heads/master
Commit: b7ea0fe98b262d37d52b4dd4fab515bbe5fd786d
Parents: 1da96b8
Author: Matthieu Baechler <matthieu@apache.org>
Authored: Fri Mar 30 17:58:58 2018 +0200
Committer: Raphael Ouazana <raphael.ouazana@linagora.com>
Committed: Thu Apr 5 14:48:41 2018 +0200

----------------------------------------------------------------------
 .../mail/model/impl/MessageParserTest.java      |  3 +-
 .../java/org/apache/james/mdn/MDNReport.java    | 10 ---
 .../org/apache/james/mdn/MDNReportParser.java   | 48 +++++++++--
 .../james/mdn/fields/ReportingUserAgent.java    | 44 +++++++---
 .../james/mdn/MDNReportFormattingTest.java      | 90 +++++---------------
 .../apache/james/mdn/MDNReportParserTest.java   | 21 +++++
 .../org/apache/james/mdn/MDNReportTest.java     | 10 +--
 .../mdn/fields/ReportingUserAgentTest.java      | 49 +++++------
 .../transport/mailets/jsieve/RejectAction.java  |  3 +-
 .../org/apache/james/jmap/model/JmapMDN.java    |  5 +-
 10 files changed, 146 insertions(+), 137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
index 98bf77a..ff2d9a2 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
@@ -32,6 +32,7 @@ import org.apache.james.mdn.MDN;
 import org.apache.james.mdn.MDNReport;
 import org.apache.james.mdn.action.mode.DispositionActionMode;
 import org.apache.james.mdn.fields.Disposition;
+import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.apache.james.mdn.sending.mode.DispositionSendingMode;
 import org.apache.james.mdn.type.DispositionType;
 import org.apache.james.mime4j.dom.Message;
@@ -297,7 +298,7 @@ public class MessageParserTest {
                     .type(DispositionType.Processed)
                     .build())
                 .originalMessageIdField("zeugzev@domain.tld")
-                .reportingUserAgentField("Thunderbird")
+                .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("Thunderbird").build())
                 .finalRecipientField("user@domain.tld")
                 .originalRecipientField("user@domain.tld")
                 .build())

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/MDNReport.java b/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
index 8785737..82030a1 100644
--- a/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
+++ b/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
@@ -57,16 +57,6 @@ public class MDNReport {
         private ImmutableList.Builder<Error> errorField = ImmutableList.builder();
         private ImmutableList.Builder<ExtensionField> extensionFields = ImmutableList.builder();
 
-        public Builder reportingUserAgentField(String userAgentName) {
-            this.reportingUserAgentField = Optional.of(new ReportingUserAgent(userAgentName,
Optional.empty()));
-            return this;
-        }
-
-        public Builder reportingUserAgentField(String userAgentName, String userAgentProduct)
{
-            this.reportingUserAgentField = Optional.of(new ReportingUserAgent(userAgentName,
Optional.ofNullable(userAgentProduct)));
-            return this;
-        }
-
         public Builder reportingUserAgentField(ReportingUserAgent reportingUserAgentField)
{
             this.reportingUserAgentField = Optional.of(reportingUserAgentField);
             return this;

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/main/java/org/apache/james/mdn/MDNReportParser.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/MDNReportParser.java b/mdn/src/main/java/org/apache/james/mdn/MDNReportParser.java
index ac41a7e..e625737 100644
--- a/mdn/src/main/java/org/apache/james/mdn/MDNReportParser.java
+++ b/mdn/src/main/java/org/apache/james/mdn/MDNReportParser.java
@@ -19,8 +19,7 @@
 
 package org.apache.james.mdn;
 
-import java.util.Optional;
-
+import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.parboiled.BaseParser;
 import org.parboiled.Rule;
 
@@ -30,12 +29,8 @@ public class MDNReportParser {
     public MDNReportParser() {
     }
 
-    public Optional<MDNReport> parse(String mdnReport) {
-        return Optional.empty();
-    }
-
     @VisibleForTesting
-    static class Parser extends BaseParser<MDNReport> {
+    static class Parser extends BaseParser<Object> {
         //   CFWS            =   (1*([FWS] comment) [FWS]) / FWS
         Rule cfws() {
             return FirstOf(
@@ -298,6 +293,7 @@ public class MDNReportParser {
                      *( extension-field CRLF )    */
         Rule dispositionNotificationContent() {
             return Sequence(
+                push(MDNReport.builder()),
                 Optional(Sequence(reportingUaField(), crlf())),
                 Optional(Sequence(mdnGatewayField(), crlf())),
                 Optional(Sequence(originalRecipientField(), crlf())),
@@ -311,8 +307,42 @@ public class MDNReportParser {
         /*    reporting-ua-field = "Reporting-UA" ":" OWS ua-name OWS [
                                    ";" OWS ua-product OWS ]    */
         Rule reportingUaField() {
-            return Sequence("Reporting-UA", ":", ows(), uaName(), ows(),
-                Optional(Sequence(";", ows(), uaProduct(), ows())));
+            return Sequence(
+                push(ReportingUserAgent.builder()),
+                "Reporting-UA", ":", ows(), uaName(), ACTION(setUserAgentName()), ows(),
+                Optional(Sequence(";", ows(), uaProduct(), ACTION(setUserAgentProduct()),
ows())),
+                ACTION(buildReportingUserAgent())
+                );
+        }
+
+        boolean buildReportingUserAgent() {
+            push(this.<ReportingUserAgent.Builder>popT().build());
+            return true;
+        }
+
+        boolean setUserAgentName() {
+            this.<ReportingUserAgent.Builder>peekT().userAgentName(match());
+            return true;
+        }
+
+        boolean setUserAgentProduct() {
+            this.<ReportingUserAgent.Builder>peekT().userAgentProduct(match());
+            return true;
+        }
+
+        @SuppressWarnings("unchecked")
+        <T> T popT() {
+            return (T) pop();
+        }
+
+        @SuppressWarnings("unchecked")
+        <T> T peekParent() {
+            return (T) peek(1);
+        }
+
+        @SuppressWarnings("unchecked")
+        <T> T peekT() {
+            return (T) peek();
         }
 
         //    ua-name = *text-no-semi

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java b/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
index f3c67fb..eddddfe 100644
--- a/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
@@ -36,22 +36,42 @@ public class ReportingUserAgent implements Field {
     private final String userAgentName;
     private final Optional<String> userAgentProduct;
 
-    public ReportingUserAgent(String userAgentName) {
-        this(userAgentName, Optional.empty());
+    public static Builder builder() {
+        return new Builder();
     }
 
-    public ReportingUserAgent(String userAgentName, String userAgentProduct) {
-        this(userAgentName, Optional.of(userAgentProduct));
-    }
+    public static class Builder {
+
+        private String userAgentName;
+        private Optional<String> userAgentProduct;
+
+        private Builder() {
+            userAgentProduct = Optional.empty();
+        }
+
+        public Builder userAgentName(String userAgentName) {
+            this.userAgentName = userAgentName;
+            return this;
+        }
 
-    public ReportingUserAgent(String userAgentName, Optional<String> userAgentProduct)
{
-        Preconditions.checkNotNull(userAgentName);
-        Preconditions.checkNotNull(userAgentProduct);
-        Preconditions.checkArgument(!userAgentName.contains("\n"), "Name should not contain
line break");
-        String trimmedName = userAgentName.trim();
-        Preconditions.checkArgument(!trimmedName.isEmpty(), "Name should not be empty");
+        public Builder userAgentProduct(String userAgentProduct) {
+            this.userAgentProduct = Optional.of(userAgentProduct);
+            return this;
+        }
+
+        public ReportingUserAgent build() {
+            Preconditions.checkNotNull(userAgentName);
+            Preconditions.checkNotNull(userAgentProduct);
+            Preconditions.checkState(!userAgentName.contains("\n"), "Name should not contain
line break");
+            String trimmedName = userAgentName.trim();
+            Preconditions.checkState(!trimmedName.isEmpty(), "Name should not be empty");
+
+            return new ReportingUserAgent(trimmedName, userAgentProduct);
+        }
+    }
 
-        this.userAgentName = trimmedName;
+    private ReportingUserAgent(String userAgentName, Optional<String> userAgentProduct)
{
+        this.userAgentName = userAgentName;
         this.userAgentProduct = userAgentProduct
             .map(String::trim)
             .filter(IS_EMPTY.negate());

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
index 3f1555e..8ccf42f 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
@@ -50,9 +50,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -79,9 +77,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -108,9 +104,7 @@ public class MDNReportFormattingTest {
         .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -137,9 +131,7 @@ public class MDNReportFormattingTest {
         .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -166,9 +158,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -195,9 +185,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -223,9 +211,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -251,9 +237,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -278,9 +262,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -307,7 +289,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent("UA_name"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -334,9 +316,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
             .dispositionField(disposition)
@@ -361,9 +341,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .dispositionField(disposition)
@@ -388,9 +366,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .gatewayField(new Gateway(Text.fromRawText("host.com")))
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
@@ -419,9 +395,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .gatewayField(new Gateway(new AddressType("postal"), Text.fromRawText("5 rue
Charles mercier")))
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
@@ -450,9 +424,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(new AddressType("roomNumber"),
Text.fromRawText("385")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -479,9 +451,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .gatewayField(new Gateway(new AddressType("postal"), Text.fromRawText("8 rue
Charles mercier\n 36555 Saint Coincoin\n France")))
             .finalRecipientField(new FinalRecipient(new AddressType("postal"), Text.fromRawText("5
rue Mercier\n 36555 Saint Coincoin\n France")))
             .originalRecipientField(new OriginalRecipient(new AddressType("postal"), Text.fromRawText("3
rue Mercier\n 36555 Saint Coincoin\n France")))
@@ -516,9 +486,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(OriginalRecipient.ofUnknown(Text.fromRawText("#$%*")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -545,9 +513,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(new AddressType("roomNumber"), Text.fromRawText("781")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -574,9 +540,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -605,9 +569,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -639,9 +601,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -671,9 +631,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
@@ -703,9 +661,7 @@ public class MDNReportFormattingTest {
             .build();
 
         String report = MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/test/java/org/apache/james/mdn/MDNReportParserTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNReportParserTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNReportParserTest.java
index 9e2a873..007b4a6 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNReportParserTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNReportParserTest.java
@@ -22,6 +22,7 @@ package org.apache.james.mdn;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.mdn.MDNReportParser.Parser;
+import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.junit.Test;
 import org.parboiled.Parboiled;
 import org.parboiled.parserunners.ReportingParseRunner;
@@ -71,4 +72,24 @@ public class MDNReportParserTest {
         ParsingResult<Object> result = new ReportingParseRunner<>(parser.dispositionNotificationContent()).run(duplicated);
         assertThat(result.matched).isFalse();
     }
+
+    @Test
+    public void reportingUserAgentShouldParseWithoutProduct() {
+        String minimal = "Reporting-UA: UA_name";
+        Parser parser = Parboiled.createParser(MDNReportParser.Parser.class);
+        ParsingResult<Object> result = new ReportingParseRunner<>(parser.reportingUaField()).run(minimal);
+        assertThat(result.matched).isTrue();
+        assertThat(result.resultValue).isInstanceOf(ReportingUserAgent.class);
+        assertThat((ReportingUserAgent)result.resultValue).isEqualTo(ReportingUserAgent.builder().userAgentName("UA_name").build());
+    }
+
+    @Test
+    public void reportingUserAgentShouldParseWithProduct() {
+        String minimal = "Reporting-UA: UA_name; UA_product";
+        Parser parser = Parboiled.createParser(MDNReportParser.Parser.class);
+        ParsingResult<Object> result = new ReportingParseRunner<>(parser.reportingUaField()).run(minimal);
+        assertThat(result.matched).isTrue();
+        assertThat(result.resultValue).isInstanceOf(ReportingUserAgent.class);
+        assertThat((ReportingUserAgent)result.resultValue).isEqualTo(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build());
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
index 4d21946..6ee9d7e 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
@@ -61,9 +61,7 @@ public class MDNReportTest {
         expectedException.expect(IllegalStateException.class);
 
         MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .finalRecipientField(new FinalRecipient(Text.fromRawText("final_recipient")))
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .build();
@@ -82,9 +80,7 @@ public class MDNReportTest {
         expectedException.expect(IllegalStateException.class);
 
         MDNReport.builder()
-            .reportingUserAgentField(new ReportingUserAgent(
-                "UA_name",
-                "UA_product"))
+            .reportingUserAgentField(ReportingUserAgent.builder().userAgentName("UA_name").userAgentProduct("UA_product").build())
             .originalRecipientField(new OriginalRecipient(Text.fromRawText("originalRecipient")))
             .originalMessageIdField(new OriginalMessageId("original_message_id"))
             .dispositionField(disposition)
@@ -124,7 +120,7 @@ public class MDNReportTest {
         Gateway gateway = new Gateway(Text.fromRawText("address"));
         OriginalMessageId originalMessageIdField = new OriginalMessageId("msgId");
         OriginalRecipient originalRecipientField = new OriginalRecipient(Text.fromRawText("address"));
-        ReportingUserAgent reportingUserAgentField = new ReportingUserAgent("name");
+        ReportingUserAgent reportingUserAgentField = ReportingUserAgent.builder().userAgentName("name").build();
         Error errorField1 = new Error(Text.fromRawText("error 1"));
         Error errorField2 = new Error(Text.fromRawText("error 2"));
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java b/mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
index 53954b8..abd5f1c 100644
--- a/mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
@@ -21,8 +21,6 @@ package org.apache.james.mdn.fields;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.Optional;
-
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -45,22 +43,17 @@ public class ReportingUserAgentTest {
 
     @Test
     public void productShouldBeOptional() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME))
-            .isEqualTo(new ReportingUserAgent(USER_AGENT_NAME, Optional.empty()));
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).build())
+            .isEqualTo(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).build());
     }
 
-    @Test
-    public void productShouldBePresentWhenSpecified() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME, USER_AGENT_PRODUCT))
-            .isEqualTo(new ReportingUserAgent(USER_AGENT_NAME, Optional.of(USER_AGENT_PRODUCT)));
-    }
 
     @Test
     public void shouldThrowOnNullName() {
         expectedException.expect(NullPointerException.class);
 
         String userAgentName = null;
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
@@ -68,7 +61,7 @@ public class ReportingUserAgentTest {
         expectedException.expect(NullPointerException.class);
 
         String userAgentName = null;
-        new ReportingUserAgent(userAgentName, USER_AGENT_PRODUCT);
+        ReportingUserAgent.builder().userAgentName(userAgentName).userAgentProduct(USER_AGENT_PRODUCT).build();
     }
 
     @Test
@@ -76,82 +69,82 @@ public class ReportingUserAgentTest {
         expectedException.expect(NullPointerException.class);
 
         String userAgentProduct = null;
-        new ReportingUserAgent(USER_AGENT_NAME, userAgentProduct);
+        ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).userAgentProduct(userAgentProduct).build();
     }
 
     @Test
     public void shouldThrowOnEmptyName() {
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(IllegalStateException.class);
 
         String userAgentName = "";
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
     public void shouldThrowOnFoldingWhiteSpaceName() {
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(IllegalStateException.class);
 
         String userAgentName = "   ";
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
     public void shouldThrowOnNameWithLineBreak() {
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(IllegalStateException.class);
 
         String userAgentName = "a\nb";
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
     public void shouldThrowOnNameWithLineBreakAtTheEnd() {
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(IllegalStateException.class);
 
         String userAgentName = "a\n";
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
     public void shouldThrowOnNameWithLineBreakAtTheBeginning() {
-        expectedException.expect(IllegalArgumentException.class);
+        expectedException.expect(IllegalStateException.class);
 
         String userAgentName = "\nb";
-        new ReportingUserAgent(userAgentName);
+        ReportingUserAgent.builder().userAgentName(userAgentName).build();
     }
 
     @Test
     public void nameShouldBeTrimmed() {
-        assertThat(new ReportingUserAgent(" name ").getUserAgentName())
+        assertThat(ReportingUserAgent.builder().userAgentName(" name ").build().getUserAgentName())
             .isEqualTo(USER_AGENT_NAME);
     }
 
     @Test
     public void productShouldBeTrimmed() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME, " product ").getUserAgentProduct())
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).userAgentProduct("
product ").build().getUserAgentProduct())
             .contains(USER_AGENT_PRODUCT);
     }
 
     @Test
     public void formattedValueShouldDisplayNameWhenProductMissing() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME).formattedValue())
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).build().formattedValue())
             .isEqualTo("Reporting-UA: name; ");
     }
 
     @Test
     public void emptyProductShouldBeFilteredOut() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME, "").getUserAgentProduct())
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).userAgentProduct("").build().getUserAgentProduct())
             .isEmpty();
     }
 
     @Test
     public void foldingWhiteSpaceProductShouldBeFilteredOut() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME, "  ").getUserAgentProduct())
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).userAgentProduct("
 ").build().getUserAgentProduct())
             .isEmpty();
     }
 
     @Test
     public void formattedValueShouldDisplayProduct() {
-        assertThat(new ReportingUserAgent(USER_AGENT_NAME, USER_AGENT_PRODUCT).formattedValue())
+        assertThat(ReportingUserAgent.builder().userAgentName(USER_AGENT_NAME).userAgentProduct(USER_AGENT_PRODUCT).build().formattedValue())
             .isEqualTo("Reporting-UA: name; product");
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
index 25f2b61..ce5c9d5 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
@@ -34,6 +34,7 @@ import org.apache.james.mdn.MDN;
 import org.apache.james.mdn.MDNReport;
 import org.apache.james.mdn.action.mode.DispositionActionMode;
 import org.apache.james.mdn.fields.Disposition;
+import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.apache.james.mdn.modifier.DispositionModifier;
 import org.apache.james.mdn.sending.mode.DispositionSendingMode;
 import org.apache.james.mdn.type.DispositionType;
@@ -112,7 +113,7 @@ public class RejectAction implements MailAction {
             .humanReadableText(humanText.toString())
             .report(
                 MDNReport.builder()
-                    .reportingUserAgentField(reportingUAName, reportingUAProduct)
+                    .reportingUserAgentField(ReportingUserAgent.builder().userAgentName(reportingUAName).userAgentProduct(reportingUAProduct).build())
                     .finalRecipientField(finalRecipient)
                     .originalRecipientField(originalRecipient)
                     .originalMessageIdField(originalMessageId)

http://git-wip-us.apache.org/repos/asf/james-project/blob/b7ea0fe9/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
index abb4cd9..99f54f5 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/JmapMDN.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mdn.MDN;
 import org.apache.james.mdn.MDNReport;
 import org.apache.james.mdn.fields.Disposition;
+import org.apache.james.mdn.fields.ReportingUserAgent;
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.dom.Message;
 import org.apache.james.mime4j.dom.address.AddressList;
@@ -131,8 +132,8 @@ public class JmapMDN {
         return textBody;
     }
 
-    public String getReportingUA() {
-        return reportingUA;
+    public ReportingUserAgent getReportingUA() {
+        return ReportingUserAgent.builder().userAgentName(reportingUA).build();
     }
 
     public MDNDisposition getDisposition() {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message