|
19 | 19 | import java.io.BufferedReader;
|
20 | 20 | import java.io.IOException;
|
21 | 21 | import java.io.Reader;
|
| 22 | +import java.util.ArrayList; |
| 23 | +import java.util.List; |
| 24 | +import java.util.NoSuchElementException; |
22 | 25 | import java.util.StringTokenizer;
|
23 | 26 |
|
24 | 27 | import org.apache.commons.net.io.DotTerminatedMessageReader;
|
|
33 | 36 | */
|
34 | 37 | public class NNTPUtils {
|
35 | 38 |
|
36 |
| - /** |
37 |
| - * Given an {@link NNTPClient} instance, and an integer range of messages, return |
38 |
| - * an array of {@link Article} instances. |
39 |
| - * @param client |
40 |
| - * @param lowArticleNumber |
41 |
| - * @param highArticleNumber |
42 |
| - * @return Article[] An array of Article |
43 |
| - * @throws IOException |
44 |
| - */ |
45 |
| - public static Article[] getArticleInfo(NNTPClient client, int lowArticleNumber, int highArticleNumber) |
46 |
| - throws IOException { |
47 |
| - Reader reader = null; |
48 |
| - Article[] articles = null; |
49 |
| - reader = |
50 |
| - (DotTerminatedMessageReader) client.retrieveArticleInfo( |
51 |
| - lowArticleNumber, |
52 |
| - highArticleNumber); |
| 39 | + /** |
| 40 | + * Given an {@link NNTPClient} instance, and an integer range of messages, return |
| 41 | + * an array of {@link Article} instances. |
| 42 | + * @param client |
| 43 | + * @param lowArticleNumber |
| 44 | + * @param highArticleNumber |
| 45 | + * @return Article[] An array of Article |
| 46 | + * @throws IOException |
| 47 | + */ |
| 48 | + public static List<Article> getArticleInfo(NNTPClient client, int lowArticleNumber, int highArticleNumber) |
| 49 | + throws IOException { |
| 50 | + Reader reader = null; |
| 51 | + List<Article> articles = new ArrayList<Article>(); |
| 52 | + reader = |
| 53 | + (DotTerminatedMessageReader) client.retrieveArticleInfo( |
| 54 | + lowArticleNumber, |
| 55 | + highArticleNumber); |
53 | 56 |
|
54 |
| - if (reader != null) { |
55 |
| - String theInfo = readerToString(reader); |
56 |
| - StringTokenizer st = new StringTokenizer(theInfo, "\n"); |
| 57 | + if (reader != null) { |
| 58 | + String theInfo = readerToString(reader); |
| 59 | + StringTokenizer st = new StringTokenizer(theInfo, "\n"); |
57 | 60 |
|
58 |
| - // Extract the article information |
59 |
| - // Mandatory format (from NNTP RFC 2980) is : |
60 |
| - // Subject\tAuthor\tDate\tID\tReference(s)\tByte Count\tLine Count |
| 61 | + // Extract the article information |
| 62 | + // Mandatory format (from NNTP RFC 2980) is : |
| 63 | + // Subject\tAuthor\tDate\tID\tReference(s)\tByte Count\tLine Count |
61 | 64 |
|
62 |
| - int count = st.countTokens(); |
63 |
| - articles = new Article[count]; |
64 |
| - int index = 0; |
| 65 | + int count = st.countTokens(); |
| 66 | + int index = 0; |
65 | 67 |
|
66 |
| - while (st.hasMoreTokens()) { |
67 |
| - StringTokenizer stt = new StringTokenizer(st.nextToken(), "\t"); |
68 |
| - Article article = new Article(); |
69 |
| - article.setArticleNumber(Integer.parseInt(stt.nextToken())); |
70 |
| - article.setSubject(stt.nextToken()); |
71 |
| - article.setFrom(stt.nextToken()); |
72 |
| - article.setDate(stt.nextToken()); |
73 |
| - article.setArticleId(stt.nextToken()); |
74 |
| - article.addHeaderField("References", stt.nextToken()); |
75 |
| - articles[index++] = article; |
76 |
| - } |
77 |
| - } else { |
78 |
| - return null; |
79 |
| - } |
| 68 | + while (st.hasMoreTokens()) { |
| 69 | + String msg = st.nextToken(); |
| 70 | + System.out.println("Message:" + msg); |
| 71 | + StringTokenizer stt = new StringTokenizer(msg, "\t"); |
80 | 72 |
|
81 |
| - return articles; |
82 |
| - } |
83 |
| - |
84 |
| - |
85 |
| - /** |
86 |
| - * Convert a {@link Reader} instance to a String |
87 |
| - * @param reader The Reader instance |
88 |
| - * @return String |
89 |
| - */ |
90 |
| - public static String readerToString(Reader reader) { |
91 |
| - String temp = null; |
92 |
| - StringBuffer sb = null; |
93 |
| - BufferedReader bufReader = new BufferedReader(reader); |
| 73 | + try { |
| 74 | + Article article = new Article(); |
| 75 | + article.setArticleNumber(Integer.parseInt(stt.nextToken())); |
| 76 | + article.setSubject(stt.nextToken()); |
| 77 | + article.setFrom(stt.nextToken()); |
| 78 | + article.setDate(stt.nextToken()); |
| 79 | + article.setArticleId(stt.nextToken()); |
| 80 | + article.addHeaderField("References", stt.nextToken()); |
| 81 | + articles.add(article); |
| 82 | + } |
| 83 | + catch (NoSuchElementException nse) { |
| 84 | + // ignore this message |
| 85 | + } |
| 86 | + } |
| 87 | + } else { |
| 88 | + return null; |
| 89 | + } |
94 | 90 |
|
95 |
| - sb = new StringBuffer(); |
96 |
| - try { |
97 |
| - temp = bufReader.readLine(); |
98 |
| - while (temp != null) { |
99 |
| - sb.append(temp); |
100 |
| - sb.append("\n"); |
101 |
| - temp = bufReader.readLine(); |
102 |
| - } |
103 |
| - } catch (IOException e) { |
104 |
| - e.printStackTrace(); |
105 |
| - } |
| 91 | + return articles; |
| 92 | + } |
106 | 93 |
|
107 |
| - return sb.toString(); |
108 |
| - } |
| 94 | + |
| 95 | + /** |
| 96 | + * Convert a {@link Reader} instance to a String |
| 97 | + * @param reader The Reader instance |
| 98 | + * @return String |
| 99 | + */ |
| 100 | + public static String readerToString(Reader reader) { |
| 101 | + String temp = null; |
| 102 | + StringBuffer sb = null; |
| 103 | + BufferedReader bufReader = new BufferedReader(reader); |
| 104 | + |
| 105 | + sb = new StringBuffer(); |
| 106 | + try { |
| 107 | + temp = bufReader.readLine(); |
| 108 | + while (temp != null) { |
| 109 | + sb.append(temp); |
| 110 | + sb.append("\n"); |
| 111 | + temp = bufReader.readLine(); |
| 112 | + } |
| 113 | + } catch (IOException e) { |
| 114 | + e.printStackTrace(); |
| 115 | + } |
| 116 | + |
| 117 | + return sb.toString(); |
| 118 | + } |
109 | 119 | }
|
0 commit comments