Author: sebb Date: Tue Mar 8 22:22:04 2011 New Revision: 1079579 URL: http://svn.apache.org/viewvc?rev=1079579&view=rev Log: NET-364 nntp.Article is very inefficient and incorrect.
Modified: commons/proper/net/trunk/src/changes/changes.xml commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java Modified: commons/proper/net/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/changes/changes.xml?rev=1079579&r1=1079578&r2=1079579&view=diff ============================================================================== --- commons/proper/net/trunk/src/changes/changes.xml (original) +++ commons/proper/net/trunk/src/changes/changes.xml Tue Mar 8 22:22:04 2011 @@ -57,6 +57,9 @@ The <action> type attribute can be add,u <body> <release version="3.0" date="TBA" description="TBA"> + <action issue="NET-364" dev="sebb" type="fix"> + nntp.Article is very inefficient and incorrect. + </action> <action issue="NET-314" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl"> The FTP client should autodetect the control encoding. </action> Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java?rev=1079579&r1=1079578&r2=1079579&view=diff ============================================================================== --- commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java (original) +++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/nntp/Article.java Tue Mar 8 22:22:04 2011 @@ -18,13 +18,12 @@ package org.apache.commons.net.nntp; import java.util.ArrayList; -import java.util.StringTokenizer; +import java.util.Arrays; /** * This is a class that contains the basic state needed for message retrieval and threading. * With thanks to Jamie Zawinski <j...@jwz.org> * @author rwinston <rwins...@apache.org> - * */ public class Article implements Threadable { private int articleNumber; @@ -34,7 +33,7 @@ public class Article implements Threadab private String simplifiedSubject; private String from; private StringBuffer header; - private StringBuffer references; + private ArrayList<String> references; private boolean isReply = false; public Article kid, next; @@ -60,12 +59,16 @@ public class Article implements Threadab * @param msgId */ public void addReference(String msgId) { + if (msgId == null || msgId.length() == 0) { + return; + } if (references == null) { - references = new StringBuffer(); - references.append("References: "); + references = new ArrayList<String>(); + } + isReply = true; + for(String s : msgId.split(" ")) { + references.add(s); } - references.append(msgId); - references.append("\t"); } /** @@ -73,16 +76,10 @@ public class Article implements Threadab * @return an array of message-ids */ public String[] getReferences() { - if (references == null) + if (references == null) { return new String[0]; - ArrayList<String> list = new ArrayList<String>(); - int terminator = references.toString().indexOf(':'); - StringTokenizer st = - new StringTokenizer(references.substring(terminator), "\t"); - while (st.hasMoreTokens()) { - list.add(st.nextToken()); } - return list.toArray(new String[list.size()]); + return references.toArray(new String[references.size()]); } /** @@ -111,7 +108,6 @@ public class Article implements Threadab if (subject.charAt(start + 2) == ':') { start += 3; // Skip "Re:" - isReply = true; done = false; } else if ( start < (len - 2) @@ -127,7 +123,6 @@ public class Article implements Threadab && (subject.charAt(i) == ']' || subject.charAt(i) == ')') && subject.charAt(i + 1) == ':') { start = i + 2; - isReply = true; done = false; } } @@ -225,8 +220,6 @@ public class Article implements Threadab public boolean subjectIsReply() { - if(simplifiedSubject == null) - simplifySubject(); return isReply; } @@ -250,4 +243,9 @@ public class Article implements Threadab public Threadable makeDummy() { return new Article(); } + + @Override + public String toString(){ // Useful for Eclipse debugging + return articleNumber + " " +articleId + " " + subject; + } }