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