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;
+    }
 }


Reply via email to