/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
*/
package key;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.Enumeration;
import java.io.IOException;
public class CommandCategoryReferenceContainer extends CommandCategory
{
public static final AtomicElement[] ELEMENTS =
{
AtomicElement.construct( CommandCategoryReferenceContainer.class, CommandList.class, "commands",
AtomicElement.PUBLIC_FIELD,
"the sub-commands for this command" )
};
public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS );
public Reference commands = Reference.EMPTY;
public CommandCategoryReferenceContainer()
{
}
public final CommandList getCommandList()
{
try
{
return( (CommandList) commands.get() );
}
catch( OutOfDateReferenceException e )
{
commands = Reference.EMPTY;
return( null );
}
}
public AtomicStructure getDeclaredStructure()
{
return( STRUCTURE );
}
/**
* @see key.Command.getMatch
*/
public Commandable getMatch( final Player p, key.util.StringTokenizer st )
{
if( st.hasMoreTokens() )
{
String command = st.nextToken();
return( (Command) getCommandList().getExactElement( command ) );
}
else
return( this );
}
public Command.Match getFinalMatch( final Player p, key.util.StringTokenizer st )
{
if( st.hasMoreTokens() )
{
final String command = st.nextToken();
return( new Command.Match()
{
{
match = (Commandable) getCommandList().getExactElement( command );
}
public String getErrorString()
{
return( "No such command '" + command + "' in " + CommandCategoryReferenceContainer.this.getName() );
}
} );
}
else
return( super.getFinalMatch( p, st ) );
}
}