/***************************************************************************
* *
* Command.java *
* ------------------- *
* date : 16. Mai 2003, 18:30 *
* copyright : (C) 2004 Distributed and Mobile Systems Group *
* Lehrstuhl fuer Praktische Informatik *
* Universitaet Bamberg *
* http://www.uni-bamberg.de/pi/ *
* email : sven.kaffille@uni-bamberg.de *
* *
* *
***************************************************************************/
/***************************************************************************
* *
* 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 2 of the License, or *
* (at your option) any later version. *
* *
* A copy of the license can be found in the license.txt file supplied *
* with this software or at: http://www.gnu.org/copyleft/gpl.html *
* *
***************************************************************************/
package de.uniba.wiai.lspi.util.console;
import java.util.*;
import java.io.PrintStream;
/**
* @author sven
* @version 1.0.5
*/
public abstract class Command {
/**
* The instances to execute the commands on.
*/
protected Object[] toCommand;
/**
* The parameters passed to this command are contained within this
* Hashtable.
*/
protected Map<String, String> parameters;
/**
* Standard argument for displaying help of this command. If supplied all
* other parameters are ignored.
*/
protected final String HELP_ARG1 = "help";
/**
* Alternative standard argument for displaying help of this command. If
* supplied all other parameters are ignored.
*/
protected final String HELP_ARG2 = "h";
/**
* The PrintStream to print the command's output to.
*/
protected PrintStream out;
/**
* Creates a new instance of Command.
*
* @param out
* The java.io.PrintStream to that the command's output is
* printed.
* @param toCommand
* The instance to execute the command on.
*/
public Command(Object[] toCommand, PrintStream out) {
this.toCommand = new Object[toCommand.length];
System.arraycopy(toCommand, 0, this.toCommand, 0, this.toCommand.length);
this.out = out;
this.parameters = new HashMap<String, String>();
}
/**
* Set the <code>PrintStream</code>, to that this command prints its
* output.
*
* @param out
* The <code>PrintStream</code>.
*/
public void setPrintStream(PrintStream out) {
this.out = out;
}
/**
* Add a command line parameter.
*
* @param paramName
* The parameters name. Cannot contain spaces.
* @param paramValue
* The parameters value. Cannot contain spaces.
*/
public final void addParameter(String paramName, String paramValue) {
this.parameters.put(paramName, paramValue);
}
/**
* Executes the command.
*
* @throws ConsoleException
* Exception during execution of command.
*/
public final void execute() throws ConsoleException {
if (this.parameters.containsKey(this.HELP_ARG1)
|| this.parameters.containsKey(this.HELP_ARG2)) {
printOutHelp();
} else {
exec();
}
}
/**
* To be overwritten by subclasses for command execution. The work of a
* command implementation is done in this method.
*
* @throws ConsoleException
* Exception during execution.
*/
public abstract void exec() throws ConsoleException;
/**
* To be overwritten. Display the help text of the Command.
*/
public abstract void printOutHelp();
/**
* Return the name of the command. Must not contain spaces. To be
* overwritten by subclasses.
*
* @return The commands name. For example: <CODE>exit</CODE>.
*/
public abstract String getCommandName();
/**
* Set the parameters for the Command.
*
* @param parameters
* Hashtable containing the parameter names as keys and the
* parameter values as values. Both represented as Strings. Both
* must not contain spaces.
*/
public void setParameters(Map<String, String> parameters) {
this.parameters = parameters;
}
}