/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** Class: add
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 14Jul97 snapper creation
** 20Jul97 snapper added logging
** 21Jul97 subtle added limit exception catching
*/
package key.commands.clan;
import key.*;
import java.util.StringTokenizer;
import java.io.IOException;
import java.util.Enumeration;
public class Add extends Command
{
public Add()
{
setKey( "add" );
usage = "<command> [<alternate name>]";
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
// if they supply any arguments.
if( !args.hasMoreTokens() )
usage( ic );
else
{
// get the current context, off the player, it should be a rank
// so a command can be created within. If not, spit.
Object o = p.getContext();
if( o != null )
{
// is the current context a rank?
if( o instanceof Rank )
{
// the token they supply is the command they wish
// to insert into the rank!
String commandName = args.nextToken();
Container l = (Container)o;
String newId = "";
try
{
// create the new command
Atom r = (Atom) Factory.makeAtom( Class.forName( "key.commands.clan." + commandName ) );
if( args.hasMoreTokens() )
newId = (String) args.nextToken();
else
newId = commandName.toLowerCase();
r.setKey( newId );
Rank rank = (Rank) o;
CommandList cl = (CommandList) new Search( ".commands/clan.commands", rank ).result;
if( cl == null )
{
ic.sendFailure( "Could not find clan command in rank" );
//cl = new CommandList();
//rank.setProperty( "commands", cl );
return;
}
cl.add( r );
String out = Type.typeOf( r ).getName() + " '" + r.getName() +"' to " + l.getId();
ic.sendFeedback( "Added new " + out );
//logging
Log.log( "clans/" + p.getClan().getName() + ".notes", "'" + p.getName() + "' added command '" + out);
}
catch( ClassNotFoundException e )
{
ic.sendError( "Could not find that clan command (don't forget to capitalise the first letter!)" );
}
catch( BadKeyException e )
{
ic.sendError( "'" + commandName + "' should contain only alphabetic characters" );
}
catch( NonUniqueKeyException e )
{
ic.sendError( "There is already an atom with this identifier ('" + newId + "')" );
}
catch( LimitExceededException e )
{
ic.sendError( "There is actually a limit on the number of ranks you can have, and this would be one too many." );
}
}
else
ic.sendError( "You are not referencing a rank. Use: rank <rank> first!" );
}
else
ic.sendError( "Could not find the rank?" );
}
}
}