/*
* utils - Command.java - Copyright © 2008-2009 David Roden
*
* 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 <http://www.gnu.org/licenses/>.
*/
package net.pterodactylus.util.telnet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Basic structure of a command that can be sent to a {@link TelnetControl}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public interface Command {
/**
* Returns the name of this command. The name is parsed case-insensitively.
*
* @return The name of this command
*/
public String getName();
/**
* Returns a brief description of this command.
*
* @return The brief description of this command
*/
public String getBriefDescription();
/**
* Returns a detailed description of this command.
*
* @return The detailed description of this command
*/
public List<String> getDetailedDescription();
/**
* Executes the command.
*
* @param parameters
* The parameter of this command
* @return The reply of the command
*/
public Reply execute(List<String> parameters);
/**
* A reply to a {@link Command}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class Reply {
/** The “OK” status. */
public static final int OK = 200;
/** The “multiple choices” status. */
public static final int MULTIPLE_CHOICES = 300;
/** The “bad request” status. */
public static final int BAD_REQUEST = 400;
/** The “not found” status. */
public static final int NOT_FOUND = 404;
/** The “internal server error” status. */
public static final int INTERNAL_SERVER_ERROR = 500;
/** The status of the reply. */
private final int status;
/** The lines that make up the reply. */
private final List<String> lines = new ArrayList<String>();
/**
* Creates a new reply with the given status.
*
* @param status
* The status of the reply
*/
public Reply(int status) {
this.status = status;
}
/**
* Creates a new reply with the given status and line.
*
* @param status
* The status of the reply
* @param line
* The line of the reply
*/
public Reply(int status, String line) {
this(status, new String[] { line });
}
/**
* Creates a new reply with the given status and lines.
*
* @param status
* The status of the reply
* @param lines
* The lines of the reply
*/
public Reply(int status, String... lines) {
this(status, Arrays.asList(lines));
}
/**
* Creates a new reply with the given status and lines.
*
* @param status
* The status of the reply
* @param lines
* The lines of the reply
*/
public Reply(int status, List<String> lines) {
this.status = status;
this.lines.addAll(lines);
}
/**
* Adds a line to the reply.
*
* @param line
* The line to add
* @return This reply (for method invocation chaining)
*/
public Reply addLine(String line) {
lines.add(line);
return this;
}
/**
* Returns the status of this command.
*
* @return The status of this command
*/
public int getStatus() {
return status;
}
/**
* Returns the lines that make up this reply.
*
* @return The lines of this reply
*/
public List<String> getLines() {
return lines;
}
}
}