org/sonews/daemon/command/StatCommand.java
author chris <chris@marvin>
Wed, 01 Jul 2009 10:48:22 +0200
changeset 2 1090e2141798
parent 1 6fceb66e1ad7
child 3 2fdc9cc89502
permissions -rw-r--r--
sonews/0.5.1 fixes merged
     1 /*
     2  *   SONEWS News Server
     3  *   see AUTHORS for the list of contributors
     4  *
     5  *   This program is free software: you can redistribute it and/or modify
     6  *   it under the terms of the GNU General Public License as published by
     7  *   the Free Software Foundation, either version 3 of the License, or
     8  *   (at your option) any later version.
     9  *
    10  *   This program is distributed in the hope that it will be useful,
    11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  *   GNU General Public License for more details.
    14  *
    15  *   You should have received a copy of the GNU General Public License
    16  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 
    19 package org.sonews.daemon.command;
    20 
    21 import java.io.IOException;
    22 import java.sql.SQLException;
    23 import org.sonews.daemon.storage.Article;
    24 import org.sonews.daemon.NNTPConnection;
    25 
    26 /**
    27  * Implementation of the STAT command.
    28  * @author Christian Lins
    29  * @since sonews/0.5.0
    30  */
    31 public class StatCommand extends AbstractCommand
    32 {
    33 
    34   public StatCommand(final NNTPConnection conn)
    35   {
    36     super(conn);
    37   }
    38 
    39   @Override
    40   public boolean hasFinished()
    41   {
    42     return true;
    43   }
    44 
    45   // TODO: Method has various exit points => Refactor!
    46   @Override
    47   public void processLine(final String line)
    48     throws IOException, SQLException
    49   {
    50     final String[] command = line.split(" ");
    51 
    52     Article article = null;
    53     if(command.length == 1)
    54     {
    55       article = getCurrentArticle();
    56       if(article == null)
    57       {
    58         printStatus(420, "no current article has been selected");
    59         return;
    60       }
    61     }
    62     else if(command[1].matches(NNTPConnection.MESSAGE_ID_PATTERN))
    63     {
    64       // Message-ID
    65       article = Article.getByMessageID(command[1]);
    66       if (article == null)
    67       {
    68         printStatus(430, "no such article found");
    69         return;
    70       }
    71     }
    72     else
    73     {
    74       // Message Number
    75       try
    76       {
    77         long aid = Long.parseLong(command[1]);
    78         article = Article.getByArticleNumber(aid, getCurrentGroup());
    79       }
    80       catch(NumberFormatException ex)
    81       {
    82         ex.printStackTrace();
    83       }
    84       catch(SQLException ex)
    85       {
    86         ex.printStackTrace();
    87       }
    88       if (article == null)
    89       {
    90         printStatus(423, "no such article number in this group");
    91         return;
    92       }
    93       setCurrentArticle(article);
    94     }
    95     
    96     printStatus(223, article.getIndexInGroup(getCurrentGroup()) + " " + article.getMessageID()
    97           + " article retrieved - request text separately");
    98   }
    99   
   100 }