/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package examples.nntp;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.SocketException;
import java.util.List;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.nntp.Article;
import org.apache.commons.net.nntp.NNTPClient;
import org.apache.commons.net.nntp.NewsgroupInfo;
import org.apache.commons.net.nntp.Threader;


public class MessageThreading {
    public MessageThreading() {
    }
    
    public static void main(String[] args) throws SocketException, IOException {
        
        if (args.length != 1 && args.length != 3)
            usage();
        
        String hostname = args[0];
        
        NNTPClient client = new NNTPClient();
        client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
        client.connect(hostname);
        
        if (args.length == 3) { // Optional auth       
            String user = args[1];
            String password = args[2];
            if(!client.authenticate(user, password)) {
                System.out.println("Authentication failed for user " + user + "!");
                System.exit(1);
            }
        }

        NewsgroupInfo group = new NewsgroupInfo();
        client.selectNewsgroup("alt.test", group);
        
        int lowArticleNumber = group.getFirstArticle();
        int highArticleNumber = lowArticleNumber + 5000;
        
        System.out.println("Retrieving articles between [" + lowArticleNumber + "] and [" + highArticleNumber + "]");
        List<Article> articles = NNTPUtils.getArticleInfo(client, lowArticleNumber, highArticleNumber);
        
        System.out.println("Building message thread tree...");
        Threader threader = new Threader();
        Article root = (Article)threader.thread(articles);
        
        Article.printThread(root, 0);
    }
    
    
    public static void usage() {
        System.out.println("Usage: MessageThreading <hostname> [<user> <password>]");
        System.exit(0);
    }
}

@@ -1367,17 +1367,17 @@
 ngth != 
-1
+2
  && args
@@ -1387,18 +1387,20 @@
 ngth != 
-3)
+4) %7B
 %0A       
@@ -1408,16 +1408,127 @@
     
-usage();
+System.out.println(%22Usage: MessageThreading %3Chostname%3E %3Cgroupname%3E %5B%3Cuser%3E %3Cpassword%3E%5D%22);%0A            return;%0A        %7D
 %0A   
@@ -1568,16 +1568,52 @@
 rgs%5B0%5D;%0A
+        String newsgroup = args%5B1%5D;%0A
         
@@ -1831,9 +1831,9 @@
  == 
-3
+4
 ) %7B 
@@ -1879,33 +1879,33 @@
 ing user = args%5B
-1
+2
 %5D;%0A            S
@@ -1918,33 +1918,33 @@
 password = args%5B
-2
+3
 %5D;%0A            i
@@ -2212,18 +2212,17 @@
 oup(
-%22alt.test%22
+newsgroup
 , gr
@@ -2812,165 +2812,11 @@
   %7D%0A
+
     %0A
-    %0A    public static void usage() %7B%0A        System.out.println(%22Usage: MessageThreading %3Chostname%3E %5B%3Cuser%3E %3Cpassword%3E%5D%22);%0A        System.exit(0);%0A    %7D%0A
 %7D%0A

Allow group name to be specified on command line