Merge pull request #40 from chibenwa/MIME4J-299
MIME4J-299 Access to the Header map
diff --git a/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java b/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java
index e883646..3b3690c 100644
--- a/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java
+++ b/core/src/main/java/org/apache/james/mime4j/codec/EncoderUtil.java
@@ -26,6 +26,7 @@
import java.nio.charset.Charset;
import java.util.BitSet;
import java.util.Locale;
+import java.util.regex.Pattern;
import org.apache.james.mime4j.Charsets;
import org.apache.james.mime4j.util.CharsetUtil;
@@ -55,6 +56,8 @@
private static final BitSet ATEXT_CHARS = initChars("()<>@.,;:\\\"[]");
+ private static final Pattern QUOTE = Pattern.compile("[\\\\\"]");
+
private static BitSet initChars(String specials) {
BitSet bs = new BitSet(128);
for (char ch = 33; ch < 127; ch++) {
@@ -526,8 +529,7 @@
// VCHAR = %x21-7E
// DQUOTE = %x22
- String escaped = str.replaceAll("[\\\\\"]", "\\\\$0");
- return "\"" + escaped + "\"";
+ return '"' + QUOTE.matcher(str).replaceAll("\\\\$0") + '"';
}
private static String encodeB(String prefix, String text,
diff --git a/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java b/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
index 59deb6a..fb07272 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/MimeUtil.java
@@ -218,7 +218,7 @@
int nextWspIdx = indexOfWsp(s, wspIdx + 1);
if (nextWspIdx - lastLineBreak > maxCharacters) {
- sb.append(s.substring(Math.max(0, lastLineBreak), wspIdx));
+ sb.append(s, Math.max(0, lastLineBreak), wspIdx);
sb.append("\r\n");
lastLineBreak = wspIdx;
}
@@ -260,7 +260,7 @@
StringBuilder sb = new StringBuilder(length);
if (crlfIdx > 0) {
- sb.append(s.substring(0, crlfIdx));
+ sb.append(s, 0, crlfIdx);
}
for (int idx = crlfIdx + 1; idx < length; idx++) {
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java
index 790dae1..aa27b00 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/ContentLocationFieldImpl.java
@@ -20,6 +20,7 @@
package org.apache.james.mime4j.field;
import java.io.StringReader;
+import java.util.regex.Pattern;
import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.dom.FieldParser;
@@ -32,6 +33,7 @@
* Represents a <code>Content-Location</code> field.
*/
public class ContentLocationFieldImpl extends AbstractField implements ContentLocationField {
+ private static final Pattern PATTERN = Pattern.compile("\\s");
private boolean parsed = false;
private String location;
@@ -56,7 +58,7 @@
* remaining material is the URL string.
* Read more: http://www.faqs.org/rfcs/rfc2017.html#ixzz0aufO9nRL
*/
- location = parser.parse().replaceAll("\\s", "");
+ location = PATTERN.matcher(parser.parse()).replaceAll("");
} catch (ParseException ex) {
parseException = ex;
}
diff --git a/dom/src/main/java/org/apache/james/mime4j/internal/AbstractEntityBuilder.java b/dom/src/main/java/org/apache/james/mime4j/internal/AbstractEntityBuilder.java
index e5e12b2..5561c5a 100644
--- a/dom/src/main/java/org/apache/james/mime4j/internal/AbstractEntityBuilder.java
+++ b/dom/src/main/java/org/apache/james/mime4j/internal/AbstractEntityBuilder.java
@@ -66,10 +66,11 @@
* @param field the field to add.
*/
public AbstractEntityBuilder addField(Field field) {
- List<Field> values = fieldMap.get(field.getName().toLowerCase(Locale.US));
+ String lowerCasedFieldName = field.getName().toLowerCase(Locale.US);
+ List<Field> values = fieldMap.get(lowerCasedFieldName);
if (values == null) {
values = new LinkedList<Field>();
- fieldMap.put(field.getName().toLowerCase(Locale.US), values);
+ fieldMap.put(lowerCasedFieldName, values);
}
values.add(field);
fields.add(field);
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/AbstractHeader.java b/dom/src/main/java/org/apache/james/mime4j/message/AbstractHeader.java
index 5ecc7d3..63ac5af 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/AbstractHeader.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/AbstractHeader.java
@@ -67,10 +67,11 @@
* @param field the field to add.
*/
public void addField(Field field) {
- List<Field> values = fieldMap.get(field.getName().toLowerCase(Locale.US));
+ String lowerCaseFieldName = field.getName().toLowerCase(Locale.US);
+ List<Field> values = fieldMap.get(lowerCaseFieldName);
if (values == null) {
values = new LinkedList<Field>();
- fieldMap.put(field.getName().toLowerCase(Locale.US), values);
+ fieldMap.put(lowerCaseFieldName, values);
}
values.add(field);
fields.add(field);