/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** $Id: ScapeWho.java,v 1.4 1997/07/21 15:09:54 snapper Exp subtle $
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 21Jul97 subtle created this command
** 22Jul97 snapper added percent codes
**
*/
package key.commands;
import key.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Enumeration;
public class ScapeWho extends Command
{
private static final long serialVersionUID = -7917221259650472207L;
public static final AtomicElement[] ELEMENTS =
{
AtomicElement.construct( ScapeWho.class, Scape.class, "scapeFor",
AtomicElement.PUBLIC_FIELD,
"the scape to list" ),
AtomicElement.construct( ScapeWho.class, String.class, "empty",
AtomicElement.PUBLIC_FIELD,
"the message if there isn't anyone" ),
AtomicElement.construct( ScapeWho.class, String.class, "singular",
AtomicElement.PUBLIC_FIELD,
"the footer if there is only one member" ),
AtomicElement.construct( ScapeWho.class, String.class, "footer",
AtomicElement.PUBLIC_FIELD,
"the footer" ),
AtomicElement.construct( ScapeWho.class, String.class, "doesntExist",
AtomicElement.PUBLIC_FIELD,
"the message if the scapeFor doesn't exist or is null" )
};
public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS );
public Reference scapeFor = Key.instance().getThis();
public String empty = "Nothing in the scape.";
public String singular = "1 only";
public String footer = "%n total";
public String doesntExist = "That scape doesn't exist.";
public static final char numberCode = 'n';
public ScapeWho()
{
setKey( "scapeWho" );
usage = "";
}
public AtomicStructure getDeclaredStructure()
{
return( STRUCTURE );
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
MultiParagraph.Generator para = new MultiParagraph.Generator();
para.append( LineParagraph.LINE );
ColumnParagraph.Generator columns = new ColumnParagraph.Generator( Player.MAX_NAME, 2 );
int numPlayers = 0;
Scape sf = null;
try
{
sf = (Scape) scapeFor.get();
}
catch( OutOfDateReferenceException e )
{
scapeFor = Reference.EMPTY;
disable();
Log.error( getId() + ".scapeFor", e );
return;
}
catch( ClassCastException e )
{
scapeFor = Reference.EMPTY;
disable();
Log.error( getId() + ".scapeFor", e );
return;
}
if( sf == null )
{
ic.sendFailure( doesntExist );
return;
}
Type t = Type.typeOf( sf );
for( Enumeration e = sf.players(); e.hasMoreElements(); )
{
Player o = (Player) e.nextElement();
QualifierList.Immutable ql = o.getImmutableQualifierList();
if( ql.check( t ) == Qualifiers.SUPPRESSION_CODE )
{
columns.appendEntry( "(" + o.getName() + ")" );
numPlayers++;
}
else
{
columns.appendEntry( o.getName() );
numPlayers++;
}
}
if( numPlayers == 0 )
{
ic.sendFeedback( empty );
}
else
{
para.append( columns.getParagraph() );
if( numPlayers == 1 )
{
para.append( new HeadingParagraph( singular ) );
}
else
{
p.putCode( numberCode, Integer.toString( numPlayers ) );
para.append( new HeadingParagraph( Grammar.substitute( footer, p.getCodes() ) ) );
}
ic.send( para.getParagraph() );
}
}
}