3 * see AUTHORS for the list of contributors
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.
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.
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/>.
19 package org.sonews.daemon.command;
21 import java.io.IOException;
22 import java.util.List;
23 import org.sonews.daemon.NNTPConnection;
24 import org.sonews.storage.Channel;
25 import org.sonews.storage.StorageBackendException;
28 * Class handling the LIST command.
29 * @author Christian Lins
30 * @author Dennis Schwerdel
33 public class ListCommand implements Command
37 public String[] getSupportedCommandStrings()
39 return new String[]{"LIST"};
43 public boolean hasFinished()
49 public boolean isStateful()
55 public void processLine(NNTPConnection conn, final String line, byte[] raw)
56 throws IOException, StorageBackendException
58 final String[] command = line.split(" ");
60 if(command.length >= 2)
62 if(command[1].equalsIgnoreCase("OVERVIEW.FMT"))
64 conn.println("215 information follows");
65 conn.println("Subject:\nFrom:\nDate:\nMessage-ID:\nReferences:\nBytes:\nLines:\nXref");
68 else if(command[1].equalsIgnoreCase("NEWSGROUPS"))
70 conn.println("215 information follows");
71 final List<Channel> list = Channel.getAll();
72 for (Channel g : list)
74 conn.println(g.getName() + "\t" + "-");
78 else if(command[1].equalsIgnoreCase("SUBSCRIPTIONS"))
80 conn.println("215 information follows");
83 else if(command[1].equalsIgnoreCase("EXTENSIONS"))
85 conn.println("202 Supported NNTP extensions.");
86 conn.println("LISTGROUP");
87 conn.println("XDAEMON");
91 else if(command[1].equalsIgnoreCase("ACTIVE"))
93 // TODO: Implement wildcards for LIST ACTIVE
98 conn.println("500 unknown argument to LIST command");
103 printGroupInfo(conn);
107 private void printGroupInfo(NNTPConnection conn)
108 throws IOException, StorageBackendException
110 final List<Channel> groups = Channel.getAll();
113 conn.println("215 list of newsgroups follows");
114 for (Channel g : groups)
118 String writeable = g.isWriteable() ? " y" : " n";
119 // Indeed first the higher article number then the lower
120 conn.println(g.getName() + " " + g.getLastArticleNumber() + " " + g.getFirstArticleNumber() + writeable);
127 conn.println("500 server database malfunction");