org/sonews/daemon/command/OverCommand.java
changeset 12 bb6990c0dd1a
parent 1 6fceb66e1ad7
child 15 f2293e8566f5
     1.1 --- a/org/sonews/daemon/command/OverCommand.java	Fri Jun 26 16:48:50 2009 +0200
     1.2 +++ b/org/sonews/daemon/command/OverCommand.java	Thu Aug 20 14:31:19 2009 +0200
     1.3 @@ -19,13 +19,13 @@
     1.4  package org.sonews.daemon.command;
     1.5  
     1.6  import java.io.IOException;
     1.7 -import java.sql.SQLException;
     1.8  import java.util.List;
     1.9  import org.sonews.util.Log;
    1.10  import org.sonews.daemon.NNTPConnection;
    1.11 -import org.sonews.daemon.storage.Article;
    1.12 -import org.sonews.daemon.storage.ArticleHead;
    1.13 -import org.sonews.daemon.storage.Headers;
    1.14 +import org.sonews.storage.Article;
    1.15 +import org.sonews.storage.ArticleHead;
    1.16 +import org.sonews.storage.Headers;
    1.17 +import org.sonews.storage.StorageBackendException;
    1.18  import org.sonews.util.Pair;
    1.19  
    1.20  /**
    1.21 @@ -106,14 +106,15 @@
    1.22   * @author Christian Lins
    1.23   * @since sonews/0.5.0
    1.24   */
    1.25 -public class OverCommand extends AbstractCommand
    1.26 +public class OverCommand implements Command
    1.27  {
    1.28  
    1.29 -  public static final int MAX_LINES_PER_DBREQUEST = 100;
    1.30 -  
    1.31 -  public OverCommand(final NNTPConnection conn)
    1.32 +  public static final int MAX_LINES_PER_DBREQUEST = 200;
    1.33 +
    1.34 +  @Override
    1.35 +  public String[] getSupportedCommandStrings()
    1.36    {
    1.37 -    super(conn);
    1.38 +    return new String[]{"OVER", "XOVER"};
    1.39    }
    1.40  
    1.41    @Override
    1.42 @@ -123,12 +124,18 @@
    1.43    }
    1.44  
    1.45    @Override
    1.46 -  public void processLine(final String line)
    1.47 -    throws IOException, SQLException
    1.48 +  public boolean isStateful()
    1.49    {
    1.50 -    if(getCurrentGroup() == null)
    1.51 +    return false;
    1.52 +  }
    1.53 +
    1.54 +  @Override
    1.55 +  public void processLine(NNTPConnection conn, final String line, byte[] raw)
    1.56 +    throws IOException, StorageBackendException
    1.57 +  {
    1.58 +    if(conn.getCurrentChannel() == null)
    1.59      {
    1.60 -      printStatus(412, "No news group current selected");
    1.61 +      conn.println("412 no newsgroup selected");
    1.62      }
    1.63      else
    1.64      {
    1.65 @@ -138,20 +145,20 @@
    1.66        // the currently selected article(s)
    1.67        if(command.length == 1)
    1.68        {
    1.69 -        final Article art = getCurrentArticle();
    1.70 +        final Article art = conn.getCurrentArticle();
    1.71          if(art == null)
    1.72          {
    1.73 -          printStatus(420, "No article(s) selected");
    1.74 +          conn.println("420 no article(s) selected");
    1.75            return;
    1.76          }
    1.77  
    1.78 -        println(buildOverview(art, -1));
    1.79 +        conn.println(buildOverview(art, -1));
    1.80        }
    1.81        // otherwise print information about the specified range
    1.82        else
    1.83        {
    1.84 -        int artStart;
    1.85 -        int artEnd   = getCurrentGroup().getLastArticleNumber();
    1.86 +        long artStart;
    1.87 +        long artEnd   = conn.getCurrentChannel().getLastArticleNumber();
    1.88          String[] nums = command[1].split("-");
    1.89          if(nums.length >= 1)
    1.90          {
    1.91 @@ -167,7 +174,7 @@
    1.92          }
    1.93          else
    1.94          {
    1.95 -          artStart = getCurrentGroup().getFirstArticleNumber();
    1.96 +          artStart = conn.getCurrentChannel().getFirstArticleNumber();
    1.97          }
    1.98  
    1.99          if(nums.length >=2)
   1.100 @@ -186,41 +193,41 @@
   1.101          {
   1.102            if(command[0].equalsIgnoreCase("OVER"))
   1.103            {
   1.104 -            printStatus(423, "No articles in that range");
   1.105 +            conn.println("423 no articles in that range");
   1.106            }
   1.107            else
   1.108            {
   1.109 -            printStatus(224, "(empty) overview information follows:");
   1.110 -            println(".");
   1.111 +            conn.println("224 (empty) overview information follows:");
   1.112 +            conn.println(".");
   1.113            }
   1.114          }
   1.115          else
   1.116          {
   1.117 -          for(int n = artStart; n <= artEnd; n += MAX_LINES_PER_DBREQUEST)
   1.118 +          for(long n = artStart; n <= artEnd; n += MAX_LINES_PER_DBREQUEST)
   1.119            {
   1.120 -            int nEnd = Math.min(n + MAX_LINES_PER_DBREQUEST - 1, artEnd);
   1.121 -            List<Pair<Long, ArticleHead>> articleHeads = getCurrentGroup()
   1.122 +            long nEnd = Math.min(n + MAX_LINES_PER_DBREQUEST - 1, artEnd);
   1.123 +            List<Pair<Long, ArticleHead>> articleHeads = conn.getCurrentChannel()
   1.124                .getArticleHeads(n, nEnd);
   1.125              if(articleHeads.isEmpty() && n == artStart
   1.126                && command[0].equalsIgnoreCase("OVER"))
   1.127              {
   1.128                // This reply is only valid for OVER, not for XOVER command
   1.129 -              printStatus(423, "No articles in that range");
   1.130 +              conn.println("423 no articles in that range");
   1.131                return;
   1.132              }
   1.133              else if(n == artStart)
   1.134              {
   1.135                // XOVER replies this although there is no data available
   1.136 -              printStatus(224, "Overview information follows");
   1.137 +              conn.println("224 overview information follows");
   1.138              }
   1.139  
   1.140              for(Pair<Long, ArticleHead> article : articleHeads)
   1.141              {
   1.142                String overview = buildOverview(article.getB(), article.getA());
   1.143 -              println(overview);
   1.144 +              conn.println(overview);
   1.145              }
   1.146            } // for
   1.147 -          println(".");
   1.148 +          conn.println(".");
   1.149          }
   1.150        }
   1.151      }