001 package examples.nntp;
002
003 import java.io.BufferedReader;
004 import java.io.IOException;
005 import java.io.Reader;
006 import java.util.StringTokenizer;
007
008 import org.apache.commons.net.io.DotTerminatedMessageReader;
009 import org.apache.commons.net.nntp.Article;
010 import org.apache.commons.net.nntp.NNTPClient;
011
012 /**
013 *
014 * Some convenience methods for NNTP example classes.
015 *
016 * @author Rory Winston <rwinston@checkfree.com>
017 */
018 public class NNTPUtils {
019
020 /**
021 * Given an {@link NNTPClient} instance, and an integer range of messages, return
022 * an array of {@link Article} instances.
023 * @param client
024 * @param lowArticleNumber
025 * @param highArticleNumber
026 * @return Article[] An array of Article
027 * @throws IOException
028 */
029 public static Article[] getArticleInfo(NNTPClient client, int lowArticleNumber, int highArticleNumber)
030 throws IOException {
031 Reader reader = null;
032 Article[] articles = null;
033 reader =
034 (DotTerminatedMessageReader) client.retrieveArticleInfo(
035 lowArticleNumber,
036 highArticleNumber);
037
038 if (reader != null) {
039 String theInfo = readerToString(reader);
040 StringTokenizer st = new StringTokenizer(theInfo, "\n");
041
042 // Extract the article information
043 // Mandatory format (from NNTP RFC 2980) is :
044 // Subject\tAuthor\tDate\tID\tReference(s)\tByte Count\tLine Count
045
046 int count = st.countTokens();
047 articles = new Article[count];
048 int index = 0;
049
050 while (st.hasMoreTokens()) {
051 StringTokenizer stt = new StringTokenizer(st.nextToken(), "\t");
052 Article article = new Article();
053 article.setArticleNumber(Integer.parseInt(stt.nextToken()));
054 article.setSubject(stt.nextToken());
055 article.setFrom(stt.nextToken());
056 article.setDate(stt.nextToken());
057 article.setArticleId(stt.nextToken());
058 article.addHeaderField("References", stt.nextToken());
059 articles[index++] = article;
060 }
061 } else {
062 return null;
063 }
064
065 return articles;
066 }
067
068
069 /**
070 * Convert a {@link Reader} instance to a String
071 * @param reader The Reader instance
072 * @return String
073 */
074 public static String readerToString(Reader reader) {
075 String temp = null;
076 StringBuffer sb = null;
077 BufferedReader bufReader = new BufferedReader(reader);
078
079 sb = new StringBuffer();
080 try {
081 temp = bufReader.readLine();
082 while (temp != null) {
083 sb.append(temp);
084 sb.append("\n");
085 temp = bufReader.readLine();
086 }
087 } catch (IOException e) {
088 e.printStackTrace();
089 }
090
091 return sb.toString();
092 }
093 }