You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/09/01 01:18:26 UTC
[13/27] james-project git commit: JAMES-2132 Add error field
JAMES-2132 Add error field
RFC defines them in https://tools.ietf.org/html/rfc8098#section-3.2.7 as:
The Error field is used to supply additional information in the form
of text messages when the "error" disposition modifier appears. The
syntax is as follows:
error-field = "Error" ":" *([FWS] text)
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c576fd1c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c576fd1c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c576fd1c
Branch: refs/heads/master
Commit: c576fd1c516641b6954857706075380a6177bc7d
Parents: 5ee43e6
Author: benwa <bt...@linagora.com>
Authored: Mon Aug 28 17:57:21 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 31 18:00:20 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/mdn/MDNReport.java | 25 +++++++-
.../java/org/apache/james/mdn/fields/Error.java | 39 ++++++++++++
.../java/org/apache/james/mdn/fields/Text.java | 47 ++++++++++++++
.../org/apache/james/mdn/MDNFactoryTest.java | 65 ++++++++++++++++++++
4 files changed, 173 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/c576fd1c/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 1423074..127f0f4 100644
--- a/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
+++ b/mdn/src/main/java/org/apache/james/mdn/MDNReport.java
@@ -22,6 +22,7 @@ package org.apache.james.mdn;
import java.util.Optional;
import org.apache.james.mdn.fields.Disposition;
+import org.apache.james.mdn.fields.Error;
import org.apache.james.mdn.fields.FinalRecipient;
import org.apache.james.mdn.fields.Gateway;
import org.apache.james.mdn.fields.OriginalMessageId;
@@ -39,6 +40,7 @@ public class MDNReport {
private Optional<FinalRecipient> finalRecipientField = Optional.empty();
private Optional<OriginalMessageId> originalMessageIdField = Optional.empty();
private Optional<Disposition> dispositionField = Optional.empty();
+ private Optional<Error> errorField = Optional.empty();
public Builder reportingUserAgentField(ReportingUserAgent reportingUserAgentField) {
this.reportingUserAgentField = Optional.of(reportingUserAgentField);
@@ -65,6 +67,12 @@ public class MDNReport {
return this;
}
+
+ public Builder errorField(Error errorField) {
+ this.errorField = Optional.of(errorField);
+ return this;
+ }
+
public Builder finalRecipientField(FinalRecipient finalRecipientField) {
this.finalRecipientField = Optional.of(finalRecipientField);
return this;
@@ -88,7 +96,7 @@ public class MDNReport {
gatewayField, originalRecipientField,
finalRecipientField.get(),
originalMessageIdField,
- dispositionField.get());
+ dispositionField.get(), errorField);
}
}
@@ -105,15 +113,17 @@ public class MDNReport {
private final FinalRecipient finalRecipientField;
private final Optional<OriginalMessageId> originalMessageIdField;
private final Disposition dispositionField;
+ private final Optional<Error> errorField;
private MDNReport(Optional<ReportingUserAgent> reportingUserAgentField, Optional<Gateway> gatewayField, Optional<OriginalRecipient> originalRecipientField,
- FinalRecipient finalRecipientField, Optional<OriginalMessageId> originalMessageIdField, Disposition dispositionField) {
+ FinalRecipient finalRecipientField, Optional<OriginalMessageId> originalMessageIdField, Disposition dispositionField, Optional<Error> errorField) {
this.reportingUserAgentField = reportingUserAgentField;
this.gatewayField = gatewayField;
this.originalRecipientField = originalRecipientField;
this.finalRecipientField = finalRecipientField;
this.originalMessageIdField = originalMessageIdField;
this.dispositionField = dispositionField;
+ this.errorField = errorField;
}
public Optional<ReportingUserAgent> getReportingUserAgentField() {
@@ -136,13 +146,22 @@ public class MDNReport {
return dispositionField;
}
+ public Optional<Gateway> getGatewayField() {
+ return gatewayField;
+ }
+
+ public Optional<Error> getErrorField() {
+ return errorField;
+ }
+
public String formattedValue() {
return reportingUserAgentField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ gatewayField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ originalRecipientField.map(value -> value.formattedValue() + LINE_END).orElse("")
+ finalRecipientField.formattedValue() + LINE_END
+ originalMessageIdField.map(value -> value.formattedValue() + LINE_END).orElse("")
- + dispositionField.formattedValue() + LINE_END;
+ + dispositionField.formattedValue() + LINE_END
+ + errorField.map(value -> value.formattedValue() + LINE_END).orElse("");
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c576fd1c/mdn/src/main/java/org/apache/james/mdn/fields/Error.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/fields/Error.java b/mdn/src/main/java/org/apache/james/mdn/fields/Error.java
new file mode 100644
index 0000000..8a68299
--- /dev/null
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/Error.java
@@ -0,0 +1,39 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mdn.fields;
+
+public class Error implements Field {
+ public static final String FIELD_NAME = "Error";
+
+ private final Text text;
+
+ public Error(Text text) {
+ this.text = text;
+ }
+
+ public Text getText() {
+ return text;
+ }
+
+ @Override
+ public String formattedValue() {
+ return FIELD_NAME + ": " + text.formatted();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c576fd1c/mdn/src/main/java/org/apache/james/mdn/fields/Text.java
----------------------------------------------------------------------
diff --git a/mdn/src/main/java/org/apache/james/mdn/fields/Text.java b/mdn/src/main/java/org/apache/james/mdn/fields/Text.java
new file mode 100644
index 0000000..7473e08
--- /dev/null
+++ b/mdn/src/main/java/org/apache/james/mdn/fields/Text.java
@@ -0,0 +1,47 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+
+package org.apache.james.mdn.fields;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
+
+public class Text {
+
+ public static Text fromRawText(String rawText) {
+ return new Text(replaceLineBreaksByContinuation(rawText));
+ }
+
+ private static String replaceLineBreaksByContinuation(String rawText) {
+ return Joiner.on("\r\n ")
+ .join(Splitter.on("\n")
+ .trimResults()
+ .splitToList(rawText));
+ }
+
+ private final String content;
+
+ public Text(String content) {
+ this.content = content;
+ }
+
+ public String formatted() {
+ return content;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/c576fd1c/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
----------------------------------------------------------------------
diff --git a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
index ac51b08..01b71b7 100644
--- a/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
+++ b/mdn/src/test/java/org/apache/james/mdn/MDNFactoryTest.java
@@ -25,11 +25,13 @@ import java.util.Optional;
import org.apache.james.mdn.action.mode.DispositionActionMode;
import org.apache.james.mdn.fields.Disposition;
+import org.apache.james.mdn.fields.Error;
import org.apache.james.mdn.fields.FinalRecipient;
import org.apache.james.mdn.fields.Gateway;
import org.apache.james.mdn.fields.OriginalMessageId;
import org.apache.james.mdn.fields.OriginalRecipient;
import org.apache.james.mdn.fields.ReportingUserAgent;
+import org.apache.james.mdn.fields.Text;
import org.apache.james.mdn.modifier.DispositionModifier;
import org.apache.james.mdn.sending.mode.DispositionSendingMode;
import org.apache.james.mdn.type.DispositionType;
@@ -565,4 +567,67 @@ public class MDNFactoryTest {
.dispositionField(disposition)
.build();
}
+
+ @Test
+ public void generateMDNReportShouldFormatErrorFields() {
+ Disposition disposition = Disposition.builder()
+ .actionMode(DispositionActionMode.Automatic)
+ .sendingMode(DispositionSendingMode.Automatic)
+ .type(DispositionType.Processed)
+ .addModifier(DispositionModifier.Error)
+ .addModifier(DispositionModifier.Failed)
+ .build();
+
+ String report = MDNReport.builder()
+ .reportingUserAgentField(new ReportingUserAgent(
+ "UA_name",
+ Optional.of("UA_product")))
+ .finalRecipientField(new FinalRecipient("final_recipient"))
+ .originalRecipientField(new OriginalRecipient("originalRecipient"))
+ .originalMessageIdField(new OriginalMessageId("original_message_id"))
+ .dispositionField(disposition)
+ .errorField(new Error(Text.fromRawText("An error message")))
+ .build()
+ .formattedValue();
+
+ assertThat(report)
+ .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
+ "Original-Recipient: rfc822; originalRecipient\r\n" +
+ "Final-Recepient: rfc822; final_recipient\r\n" +
+ "Original-Message-ID: original_message_id\r\n" +
+ "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n" +
+ "Error: An error message\r\n");
+ }
+
+ @Test
+ public void generateMDNReportShouldFormatErrorFieldsOnSeveralLines() {
+ Disposition disposition = Disposition.builder()
+ .actionMode(DispositionActionMode.Automatic)
+ .sendingMode(DispositionSendingMode.Automatic)
+ .type(DispositionType.Processed)
+ .addModifier(DispositionModifier.Error)
+ .addModifier(DispositionModifier.Failed)
+ .build();
+
+ String report = MDNReport.builder()
+ .reportingUserAgentField(new ReportingUserAgent(
+ "UA_name",
+ Optional.of("UA_product")))
+ .finalRecipientField(new FinalRecipient("final_recipient"))
+ .originalRecipientField(new OriginalRecipient("originalRecipient"))
+ .originalMessageIdField(new OriginalMessageId("original_message_id"))
+ .dispositionField(disposition)
+ .errorField(new Error(Text.fromRawText("An error message\non several lines")))
+ .build()
+ .formattedValue();
+
+ assertThat(report)
+ .isEqualTo("Reporting-UA: UA_name; UA_product\r\n" +
+ "Original-Recipient: rfc822; originalRecipient\r\n" +
+ "Final-Recepient: rfc822; final_recipient\r\n" +
+ "Original-Message-ID: original_message_id\r\n" +
+ "Disposition: automatic-action/MDN-sent-automatically;processed/error,failed\r\n" +
+ "Error: An error message\r\n" +
+ " on several lines\r\n");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org