1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.net.examples.nntp;
19
20 import java.io.IOException;
21 import java.io.PrintWriter;
22 import java.net.SocketException;
23
24 import org.apache.commons.net.PrintCommandListener;
25 import org.apache.commons.net.nntp.Article;
26 import org.apache.commons.net.nntp.NNTPClient;
27 import org.apache.commons.net.nntp.NewsgroupInfo;
28 import org.apache.commons.net.nntp.Threader;
29
30
31
32
33 public class MessageThreading {
34 public static void main(final String[] args) throws SocketException, IOException {
35
36 if (args.length != 2 && args.length != 4) {
37 System.out.println("Usage: MessageThreading <hostname> <groupname> [<user> <password>]");
38 return;
39 }
40
41 final String hostname = args[0];
42 final String newsgroup = args[1];
43
44 final NNTPClient client = new NNTPClient();
45 client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
46 client.connect(hostname);
47
48 if (args.length == 4) {
49 final String user = args[2];
50 final String password = args[3];
51 if (!client.authenticate(user, password)) {
52 System.out.println("Authentication failed for user " + user + "!");
53 System.exit(1);
54 }
55 }
56
57 final String[] fmt = client.listOverviewFmt();
58 if (fmt != null) {
59 System.out.println("LIST OVERVIEW.FMT:");
60 for (final String s : fmt) {
61 System.out.println(s);
62 }
63 } else {
64 System.out.println("Failed to get OVERVIEW.FMT");
65 }
66 final NewsgroupInfo group = new NewsgroupInfo();
67 client.selectNewsgroup(newsgroup, group);
68
69 final long lowArticleNumber = group.getFirstArticleLong();
70 final long highArticleNumber = lowArticleNumber + 5000;
71
72 System.out.println("Retrieving articles between [" + lowArticleNumber + "] and [" + highArticleNumber + "]");
73 final Iterable<Article> articles = client.iterateArticleInfo(lowArticleNumber, highArticleNumber);
74
75 System.out.println("Building message thread tree...");
76 final Threader threader = new Threader();
77 final Article root = (Article) threader.thread(articles);
78
79 Article.printThread(root, 0);
80 }
81
82 public MessageThreading() {
83 }
84
85 }