Author: rdonkin
Date: Fri Nov 9 10:48:09 2007
New Revision: 593622
URL: http://svn.apache.org/viewvc?rev=593622&view=rev
Log:
Prepared for FETCH ENVELOPE implementation by replacing Headers with Header.
Added:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResultUtils.java
james/server/trunk/core-library/src/test/java/org/
james/server/trunk/core-library/src/test/java/org/apache/
james/server/trunk/core-library/src/test/java/org/apache/james/
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/MessageResultUtilsTest.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResult.java
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResult.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResult.java?rev=593622&r1=593621&r2=593622&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResult.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResult.java
Fri Nov 9 10:48:09 2007
@@ -20,6 +20,7 @@
package org.apache.james.mailboxmanager;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
import javax.mail.Flags;
@@ -141,42 +142,29 @@
/**
* Gets headers for the message.
- * @return <code>Headers</code>,
+ * @return <code>Header</code> <code>Iterator</code>,
* or null if [EMAIL PROTECTED] #HEADERS} was not fetched
*/
- Headers getHeaders();
+ Iterator iterateHeaders();
/**
- * Details of the mail headers for this result.
+ * A header.
*/
- public interface Headers {
- /**
- * Gets all header lines.
- * @return <code>List</code> of <code>String</code> header lines,
- * in their natural order
- * @throws MessagingException
- */
- List getAllLines() throws MessagingException;
+ public interface Header extends Content{
/**
- * Gets header lines whose header names matches (ignoring case)
- * any of those given.
- * @param names header names to be matched, not null
- * @return <code>List</code> of <code>String</code> header lines,
- * in their natural order
- * @throws MessagingException
+ * Gets the name of this header.
+ * @return name of this header
+ * @throws MessagingException
*/
- List getMatchingLines(String[] names) throws MessagingException;
+ public String getName() throws MessagingException;
/**
- * Gets header lines whose header name fails to match (ignoring case)
- * all of the given names.
- * @param names header names, not null
- * @return <code>List</code> of <code>String</code> header lines,
- * in their natural order
+ * Gets the (unparsed) value of this header.
+ * @return value of this header
* @throws MessagingException
*/
- List getOtherLines(String[] names) throws MessagingException;
+ public String getValue() throws MessagingException;
}
/**
Added:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResultUtils.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResultUtils.java?rev=593622&view=auto
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResultUtils.java
(added)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/MessageResultUtils.java
Fri Nov 9 10:48:09 2007
@@ -0,0 +1,108 @@
+/****************************************************************
+ * 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.mailboxmanager;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.mail.MessagingException;
+
+import org.apache.commons.collections.IteratorUtils;
+
+public class MessageResultUtils {
+
+ /**
+ * Gets all header lines.
+ * @param iterator [EMAIL PROTECTED] MessageResult.Header}
<code>Iterator</code>
+ * @return <code>List</code> of <code>MessageResult.Header<code>'s,
+ * in their natural order
+ *
+ * @throws MessagingException
+ */
+ public static List getAll(final Iterator iterator) throws
MessagingException {
+ List results = IteratorUtils.toList(iterator);
+ return results;
+ }
+
+ /**
+ * Gets header lines whose header names matches (ignoring case)
+ * any of those given.
+ * @param names header names to be matched, not null
+ * @param iterator [EMAIL PROTECTED] MessageResult.Header}
<code>Iterator</code>
+ * @return <code>List</code> of <code>MessageResult.Header</code>'s,
+ * in their natural order
+ * @throws MessagingException
+ */
+ public static List getMatching(final String[] names, final Iterator
iterator) throws MessagingException {
+ final List results = new ArrayList(20);
+ if (iterator != null) {
+ while(iterator.hasNext()) {
+ MessageResult.Header header = (MessageResult.Header)
iterator.next();
+ final String headerName = header.getName();
+ if (headerName != null) {
+ final int length = names.length;
+ for (int i=0;i<length;i++) {
+ final String name = names[i];
+ if (headerName.equalsIgnoreCase(name)) {
+ results.add(header);
+ break;
+ }
+ }
+ }
+ }
+ }
+ return results;
+ }
+
+ /**
+ * Gets header lines whose header name fails to match (ignoring case)
+ * all of the given names.
+ * @param names header names, not null
+ * @param iterator [EMAIL PROTECTED] MessageResult.Header}
<code>Iterator</code>
+ * @return <code>List</code> of <code>@MessageResult.Header</code>'s,
+ * in their natural order
+ * @throws MessagingException
+ */
+ public static List getNotMatching(final String[] names, final Iterator
iterator) throws MessagingException {
+ final List results = new ArrayList(20);
+ if (iterator != null) {
+ while(iterator.hasNext()) {
+ MessageResult.Header header = (MessageResult.Header)
iterator.next();
+ final String headerName = header.getName();
+ if (headerName != null) {
+ final int length = names.length;
+ boolean match = false;
+ for (int i=0;i<length;i++) {
+ final String name = names[i];
+ if (headerName.equalsIgnoreCase(name)) {
+ match = true;
+ break;
+ }
+ }
+ if (!match) {
+ results.add(header);
+ }
+ }
+ }
+ }
+ return results;
+ }
+}
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java?rev=593622&r1=593621&r2=593622&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
Fri Nov 9 10:48:09 2007
@@ -20,6 +20,8 @@
package org.apache.james.mailboxmanager.impl;
import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
@@ -37,7 +39,7 @@
private int size;
private Date internalDate;
private String key;
- private Headers headers;
+ private List headers;
private Content messageBody;
private Content fullMessage;
@@ -187,11 +189,15 @@
this.key=key;
}
- public Headers getHeaders() {
+ public Iterator iterateHeaders() {
+ return headers.iterator();
+ }
+
+ public List getHeaders() {
return headers;
}
- public void setHeaders(Headers headers) {
+ public void setHeaders(List headers) {
this.headers = headers;
}
Added:
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/MessageResultUtilsTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/MessageResultUtilsTest.java?rev=593622&view=auto
==============================================================================
---
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/MessageResultUtilsTest.java
(added)
+++
james/server/trunk/core-library/src/test/java/org/apache/james/mailboxmanager/MessageResultUtilsTest.java
Fri Nov 9 10:48:09 2007
@@ -0,0 +1,102 @@
+/****************************************************************
+ * 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.mailboxmanager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.mail.MessagingException;
+
+import junit.framework.TestCase;
+
+public class MessageResultUtilsTest extends TestCase {
+
+ private static final String[] NAMES = {"One", "Three"};
+
+ Header headerOne;
+ Header headerTwo;
+ Header headerThree;
+ List headers;
+
+ private static class Header implements MessageResult.Header {
+
+ public String name;
+ public String value;
+
+ public Header(String name) {
+ this.name = name;
+ value = "Value";
+ }
+
+ public long size() throws MessagingException {
+ return 0;
+ }
+
+ public void writeTo(StringBuffer buffer) throws MessagingException {
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ headerOne = new Header("One");
+ headerTwo = new Header("Two");
+ headerThree = new Header("Three");
+ headers = new ArrayList();
+ headers.add(headerOne);
+ headers.add(headerTwo);
+ headers.add(headerThree);
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testGetAllContent() throws Exception {
+ List results = MessageResultUtils.getAll(headers.iterator());
+ assertEquals(3, results.size());
+ assertEquals(headerOne, results.get(0));
+ assertEquals(headerTwo, results.get(1));
+ assertEquals(headerThree, results.get(2));
+ }
+
+ public void testGetMatching() throws Exception {
+
+ List results = MessageResultUtils.getMatching(NAMES,
headers.iterator());
+ assertEquals(2, results.size());
+ assertEquals(headerOne, results.get(0));
+ assertEquals(headerThree, results.get(1));
+ }
+
+ public void testGetNotMatching() throws Exception {
+
+ List results = MessageResultUtils.getNotMatching(NAMES,
headers.iterator());
+ assertEquals(1, results.size());
+ assertEquals(headerTwo, results.get(0));
+ }
+}
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java?rev=593622&r1=593621&r2=593622&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
Fri Nov 9 10:48:09 2007
@@ -19,8 +19,6 @@
package org.apache.james.imapserver.processor.imap4rev1;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -28,7 +26,6 @@
import javax.mail.Flags;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapConstants;
@@ -43,8 +40,6 @@
import
org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
import org.apache.james.api.imap.process.ImapProcessor;
import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.imap.process.ImapProcessor.Responder;
-import org.apache.james.core.MimeMessageWrapper;
import org.apache.james.imap.message.request.imap4rev1.FetchRequest;
import org.apache.james.imap.message.response.imap4rev1.legacy.FetchResponse;
import org.apache.james.imapserver.codec.encode.EncoderUtils;
@@ -56,11 +51,9 @@
import org.apache.james.mailboxmanager.GeneralMessageSet;
import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.MessageResultUtils;
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
-import org.apache.mailet.dates.RFC822DateFormat;
-
-import com.sun.mail.util.CRLFOutputStream;
public class FetchProcessor extends AbstractImapRequestProcessor {
@@ -286,20 +279,20 @@
addLiteralContent(fullMessage, response);
}
else if ( sectionSpecifier.equalsIgnoreCase( "HEADER" ) ) {
- final MessageResult.Headers headers = result.getHeaders();
- List lines = headers.getAllLines();
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getAll(headers);
addHeaders( lines, response );
}
else if ( sectionSpecifier.startsWith( "HEADER.FIELDS.NOT " ) ) {
String[] excludeNames = extractHeaderList( sectionSpecifier,
"HEADER.FIELDS.NOT ".length() );
- final MessageResult.Headers headers = result.getHeaders();
- List lines = headers.getOtherLines(excludeNames);
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getMatching(excludeNames, headers);
addHeaders( lines, response );
}
else if ( sectionSpecifier.startsWith( "HEADER.FIELDS " ) ) {
String[] includeNames = extractHeaderList( sectionSpecifier,
"HEADER.FIELDS ".length() );
- final MessageResult.Headers headers = result.getHeaders();
- List lines = headers.getMatchingLines(includeNames);
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getMatching(includeNames, headers);
addHeaders( lines, response );
} else if (sectionSpecifier.equalsIgnoreCase("MIME")) {
// TODO implement
@@ -367,12 +360,12 @@
return (String[]) strings.toArray(new String[0]);
}
- private void addHeaders( List headerLines, StringBuffer response )
+ private void addHeaders( List headerLines, StringBuffer response ) throws
MessagingException
{
int count = 0;
for (final Iterator it=headerLines.iterator();it.hasNext();) {
- String line = (String) it.next();
- count += line.length() + 2;
+ MessageResult.Header header = (MessageResult.Header) it.next();
+ count += header.size() + 2;
}
response.append( '{' );
response.append( count + 2 );
@@ -380,8 +373,8 @@
response.append("\r\n");
for (final Iterator it=headerLines.iterator();it.hasNext();) {
- String line = (String) it.next();
- response.append(line);
+ MessageResult.Header header = (MessageResult.Header) it.next();
+ header.writeTo(response);
response.append("\r\n");
}
response.append("\r\n");
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java?rev=593622&r1=593621&r2=593622&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/commands/FetchCommand.java
Fri Nov 9 10:48:09 2007
@@ -19,11 +19,8 @@
package org.apache.james.imapserver.commands;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -31,10 +28,8 @@
import javax.mail.Flags;
import javax.mail.MessagingException;
-import javax.mail.internet.MimeMessage;
import org.apache.james.api.imap.message.MessageFlags;
-import org.apache.james.core.MimeMessageWrapper;
import org.apache.james.imapserver.ImapRequestLineReader;
import org.apache.james.imapserver.ImapResponse;
import org.apache.james.imapserver.ImapSession;
@@ -44,13 +39,12 @@
import org.apache.james.mailboxmanager.GeneralMessageSet;
import org.apache.james.mailboxmanager.MailboxManagerException;
import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.MessageResultUtils;
import org.apache.james.mailboxmanager.MessageResult.Content;
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
import org.apache.mailet.dates.RFC822DateFormat;
-import com.sun.mail.util.CRLFOutputStream;
-
/**
* Handles processeing for the FETCH imap command.
*
@@ -221,17 +215,20 @@
addLiteralContent(fullMessage, response);
}
else if ( sectionSpecifier.equalsIgnoreCase( "HEADER" ) ) {
- final List lines = result.getHeaders().getAllLines();
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getAll(headers);
addHeaders( lines, response );
}
else if ( sectionSpecifier.startsWith( "HEADER.FIELDS.NOT " ) ) {
String[] excludeNames = extractHeaderList( sectionSpecifier,
"HEADER.FIELDS.NOT ".length() );
- final List lines = result.getHeaders().getOtherLines( excludeNames
);
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getMatching(excludeNames, headers);
addHeaders( lines, response );
}
else if ( sectionSpecifier.startsWith( "HEADER.FIELDS " ) ) {
String[] includeNames = extractHeaderList( sectionSpecifier,
"HEADER.FIELDS ".length() );
- final List lines = result.getHeaders().getMatchingLines(
includeNames );
+ final Iterator headers = result.iterateHeaders();
+ List lines = MessageResultUtils.getMatching(includeNames, headers);
addHeaders( lines, response );
}
else if ( sectionSpecifier.equalsIgnoreCase( "MIME" ) ) {
@@ -295,12 +292,12 @@
return (String[]) strings.toArray(new String[0]);
}
- private void addHeaders( final List headers, final StringBuffer response )
+ private void addHeaders( final List headers, final StringBuffer response )
throws MessagingException
{
int count = 0;
for (final Iterator it=headers.iterator();it.hasNext();) {
- final String line = (String) it.next();
- count += line.length() + 2;
+ final MessageResult.Header header = (MessageResult.Header)
it.next();
+ count += header.size() + 2;
}
response.append( '{' );
@@ -309,8 +306,8 @@
response.append("\r\n");
for (final Iterator it=headers.iterator();it.hasNext();) {
- final String line = (String) it.next();
- response.append( line );
+ final MessageResult.Header line = (MessageResult.Header) it.next();
+ line.writeTo(response);
response.append( "\r\n" );
}
response.append("\r\n");
Modified:
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=593622&r1=593621&r2=593622&view=diff
==============================================================================
---
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
(original)
+++
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
Fri Nov 9 10:48:09 2007
@@ -373,21 +373,19 @@
private final List headers;
private final long size;
- public FullContent(final byte[] contents, final List headers) {
+ public FullContent(final byte[] contents, final List headers) throws
MessagingException {
this.contents = contents;
this.headers = headers;
this.size = caculateSize();
}
- private long caculateSize(){
+ private long caculateSize() throws MessagingException{
long result = contents.length +
MessageUtils.countUnnormalLines(contents);
result += 2;
for (final Iterator it=headers.iterator(); it.hasNext();) {
- final String line = (String) it.next();
- if (line != null) {
- // we don't know the appropriate encoding for the headers
- // TODO: sort out on entry (if possible)
- result += line.getBytes().length;
+ final MessageResult.Header header = (MessageResult.Header)
it.next();
+ if (header != null) {
+ result += header.size();
result += 2;
}
}
@@ -396,14 +394,9 @@
public void writeTo(StringBuffer buffer) throws MessagingException {
for (final Iterator it=headers.iterator(); it.hasNext();) {
- final String line = (String) it.next();
- if (line != null) {
- // we don't know the appropriate encoding for the headers
- // TODO: sort out on entry (if possible)
- byte[] bytes = line.getBytes();
- for (int i=0;i<bytes.length;i++) {
- buffer.append((char) bytes[i]);
- }
+ final MessageResult.Header header = (MessageResult.Header)
it.next();
+ if (header != null) {
+ header.writeTo(buffer);
}
buffer.append('\r');
buffer.append('\n');
@@ -418,14 +411,13 @@
}
}
- private Content createFullContent(final MessageRow messageRow,
MessageResult.Headers headers) throws TorqueException, MessagingException {
+ private Content createFullContent(final MessageRow messageRow, List
headers) throws TorqueException, MessagingException {
if (headers == null) {
headers = createHeaders(messageRow);
}
final MessageBody body = (MessageBody)
messageRow.getMessageBodys().get(0);
final byte[] bytes = body.getBody();
- final List lines = headers.getAllLines();
- final FullContent results = new FullContent(bytes, lines);
+ final FullContent results = new FullContent(bytes, headers);
return results;
}
@@ -454,7 +446,7 @@
}
}
- private MessageResult.Headers createHeaders(MessageRow messageRow) throws
TorqueException {
+ private List createHeaders(MessageRow messageRow) throws TorqueException {
final List headers=messageRow.getMessageHeaders();
Collections.sort(headers, new Comparator() {
@@ -463,56 +455,53 @@
}
});
- final MessageResult.Headers results = new HeaderRows(headers);
+
+ final List results = new ArrayList(headers.size());
+ for (Iterator it=headers.iterator();it.hasNext();) {
+ final MessageHeader messageHeader = (MessageHeader) it.next();
+ final Header header = new Header(messageHeader);
+ results.add(header);
+ }
return results;
}
-
- private static final class HeaderRows implements MessageResult.Headers {
- private static final String[] EMPTY_STRING_ARRAY={};
- private final List messageHeaders;
- public HeaderRows(final List messageHeaders) {
- this.messageHeaders = messageHeaders;
- }
+
+ private static final class Header implements MessageResult.Header,
MessageResult.Content {
+ private final String name;
+ private final String value;
+ private final long size;
- public List getAllLines() throws MessagingException {
- final ArrayList results = new ArrayList(messageHeaders.size());
- int i = 0;
- for (final Iterator it =
messageHeaders.iterator();it.hasNext();i++) {
- MessageHeader header = (MessageHeader) it.next();
- final String line = toHeaderLine(header);
- results.add(line);
- }
- return results;
+ public Header(final MessageHeader header) {
+ this.name = header.getField();
+ this.value = header.getValue();
+ size = name.length() + value.length() + 2;
}
- private String toHeaderLine(MessageHeader header) {
- return header.getField() + ": " + header.getValue();
+ public Content getContent() throws MessagingException {
+ return this;
}
-
- public List getMatchingLines(String[] names) throws MessagingException
{
- final ArrayList results = new ArrayList(messageHeaders.size());
- for (final Iterator it = messageHeaders.iterator();it.hasNext();) {
- MessageHeader header = (MessageHeader) it.next();
- for (int i=0;i<names.length;i++) {
- if (names[i].equalsIgnoreCase(header.getField())) {
- results.add(toHeaderLine(header));
- }
- }
- }
- return results;
+
+ public String getName() throws MessagingException {
+ return name;
}
-
- public List getOtherLines(String[] names) throws MessagingException {
- final ArrayList results = new ArrayList(messageHeaders.size());
- for (final Iterator it = messageHeaders.iterator();it.hasNext();) {
- MessageHeader header = (MessageHeader) it.next();
- for (int i=0;i<names.length;i++) {
- if (!names[i].equalsIgnoreCase(header.getField())) {
- results.add(toHeaderLine(header));
- }
- }
+
+ public String getValue() throws MessagingException {
+ return value;
+ }
+
+ public long size() throws MessagingException {
+ return size;
+ }
+
+ public void writeTo(StringBuffer buffer) throws MessagingException {
+// TODO: sort out encoding
+ for (int i=0; i<name.length();i++) {
+ buffer.append((char)(byte) name.charAt(i));
+ }
+ buffer.append(':');
+ buffer.append(' ');
+ for (int i=0; i<value.length();i++) {
+ buffer.append((char)(byte) value.charAt(i));
}
- return results;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]