diff -r 9f0b95aafaa3 -r ed84c8bdd87b src/org/sonews/daemon/command/HelpCommand.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/sonews/daemon/command/HelpCommand.java Sun Aug 29 17:28:58 2010 +0200 @@ -0,0 +1,100 @@ +/* + * SONEWS News Server + * see AUTHORS for the list of contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sonews.daemon.command; + +import java.io.IOException; +import java.util.Set; +import org.sonews.daemon.CommandSelector; +import org.sonews.daemon.NNTPConnection; +import org.sonews.util.io.Resource; + +/** + * This command provides a short summary of the commands that are + * understood by this implementation of the server. The help text will + * be presented as a multi-line data block following the 100 response + * code (taken from RFC). + * @author Christian Lins + * @since sonews/0.5.0 + */ +public class HelpCommand implements Command +{ + + @Override + public boolean hasFinished() + { + return true; + } + + @Override + public String impliedCapability() + { + return null; + } + + @Override + public boolean isStateful() + { + return true; + } + + @Override + public String[] getSupportedCommandStrings() + { + return new String[]{"HELP"}; + } + + @Override + public void processLine(NNTPConnection conn, final String line, byte[] raw) + throws IOException + { + final String[] command = line.split(" "); + conn.println("100 help text follows"); + + if(line.length() <= 1) + { + final String[] help = Resource + .getAsString("helpers/helptext", true).split("\n"); + for(String hstr : help) + { + conn.println(hstr); + } + + Set commandNames = CommandSelector.getCommandNames(); + for(String cmdName : commandNames) + { + conn.println(cmdName); + } + } + else + { + Command cmd = CommandSelector.getInstance().get(command[1]); + if(cmd instanceof HelpfulCommand) + { + conn.println(((HelpfulCommand)cmd).getHelpString()); + } + else + { + conn.println("No further help information available."); + } + } + + conn.println("."); + } + +}