Author: sebb
Date: Tue Mar  8 22:19:45 2011
New Revision: 1079576

URL: http://svn.apache.org/viewvc?rev=1079576&view=rev
Log:
Fix bug - not saving references correctly
Also Tokenize was not detecting missing references - adjacent tabs did not 
generate null token.
Improve efficiency by not converting to string and back again

Modified:
    commons/proper/net/trunk/src/main/java/examples/nntp/NNTPUtils.java

Modified: commons/proper/net/trunk/src/main/java/examples/nntp/NNTPUtils.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/examples/nntp/NNTPUtils.java?rev=1079576&r1=1079575&r2=1079576&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/examples/nntp/NNTPUtils.java 
(original)
+++ commons/proper/net/trunk/src/main/java/examples/nntp/NNTPUtils.java Tue Mar 
 8 22:19:45 2011
@@ -21,9 +21,6 @@ import java.io.IOException;
 import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-
 import org.apache.commons.net.nntp.Article;
 import org.apache.commons.net.nntp.NNTPClient;
 
@@ -53,60 +50,29 @@ public class NNTPUtils {
                     highArticleNumber);
 
         if (reader != null) {
-            String theInfo = readerToString(reader);
-            StringTokenizer st = new StringTokenizer(theInfo, "\n");
+            BufferedReader bufReader = new BufferedReader(reader);
 
             // Extract the article information
             // Mandatory format (from NNTP RFC 2980) is :
-            // Subject\tAuthor\tDate\tID\tReference(s)\tByte Count\tLine Count
+            // articleNumber\tSubject\tAuthor\tDate\tID\tReference(s)\tByte 
Count\tLine Count
 
-            while (st.hasMoreTokens()) {
-                String msg = st.nextToken();
+            String msg;
+            while ((msg=bufReader.readLine()) != null) {
                 System.out.println("Message:" + msg);
-                StringTokenizer stt = new StringTokenizer(msg, "\t");
-
-                try {
+                String parts[] = msg.split("\t");
+                if (parts.length > 6) {
+                    int i = 0;
                     Article article = new Article();
-                    
article.setArticleNumber(Integer.parseInt(stt.nextToken()));
-                    article.setSubject(stt.nextToken());
-                    article.setFrom(stt.nextToken());
-                    article.setDate(stt.nextToken());
-                    article.setArticleId(stt.nextToken());
-                    article.addHeaderField("References", stt.nextToken());
+                    article.setArticleNumber(Integer.parseInt(parts[i++]));
+                    article.setSubject(parts[i++]);
+                    article.setFrom(parts[i++]);
+                    article.setDate(parts[i++]);
+                    article.setArticleId(parts[i++]);
+                    article.addReference(parts[i++]);
                     articles.add(article);
                 }
-                catch (NoSuchElementException nse) {
-                    // ignore this message
-                }
             }
-        } else {
-            return null;
         }
-
         return articles;
     }
-
-
-    /**
-     * Convert a {@link Reader} instance to a String
-     * @param reader The Reader instance
-     * @return String
-     */
-    public static String readerToString(Reader reader) {
-        String temp = null;
-        BufferedReader bufReader = new BufferedReader(reader);
-        StringBuilder sb = new StringBuilder();
-        try {
-            temp = bufReader.readLine();
-            while (temp != null) {
-                sb.append(temp);
-                sb.append("\n");
-                temp = bufReader.readLine();
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        return sb.toString();
-    }
 }


Reply via email to