/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** $Id: Who.java,v 1.12 1997/07/29 08:51:45 subtle Exp subtle $
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 19Jul97 druss created this command
** 21Jul97 subtle tidied up a bit, fixed some hardcoded room
** dependancies, removed the swho style output
** for arguments (now uses the table always)
** 22Jul97 subtle tidied a little more
**
*/
package key.commands;
import key.*;
import key.primitive.*;
import key.util.Trie;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Enumeration;
public class Who extends Command
{
private static final long serialVersionUID = 967373524804005474L;
public Who()
{
setKey( "who" );
usage = "[<letters>]";
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
String targetClan = "";
if( args.hasMoreTokens() )
{
String pName = args.nextToken();
Object t = Key.instance().getPlayer( pName );
if( t == null )
{
ic.sendFeedback( "No players beginning with '" + pName + "' online." );
}
else if( t instanceof Atom )
{
Player o = (Player)t;
boolean seeThrough = o.permissionCheck( Player.seePrivateInfoAction, false, true );
ic.send( new HeadingParagraph( o.getName() ) );
StringBuffer sb = new StringBuffer();
{
String aka = o.getAka();
if( aka != null && aka.length() > 0 )
{
sb.append( "Also known as " );
sb.append( aka );
sb.append( ", " );
}
}
sb.append( o.getName() );
sb.append( " is " );
int age = o.getAge();
if( age != 0 )
{
sb.append( "a " );
sb.append( age );
sb.append( " year old " );
}
sb.append( o.maleFemale() );
sb.append( ".\n" );
// email addresses
{
String ea = o.getEmail().get();
if( ea != null && ( !o.isEmailPrivate() || seeThrough ) )
{
sb.append( o.HisHer() );
sb.append( " email address is: " );
sb.append( ea );
sb.append( '\n' );
}
}
// homepage
{
String hp = o.getWebpage().get();
if( hp != null )
{
sb.append( o.HisHer() );
sb.append( " homepage is: " );
sb.append( hp );
sb.append( '\n' );
}
}
// clan
{
Clan c = o.getClan();
if( c != null )
{
sb.append( o.HeShe() );
sb.append( " is in clan " );
sb.append( c.getName() );
sb.append( " [" );
boolean first = true;
for( Enumeration e = c.ranks.elements(); e.hasMoreElements(); )
{
Rank r = (Rank) e.nextElement();
if( r.contains( o ) )
{
if( first )
{
sb.append( ' ' );
first = false;
}
sb.append( r.getName() );
sb.append( ' ' );
}
}
sb.append( "]\n" );
}
else if( o.isLiberated() )
{
sb.append( o.HeShe() );
sb.append( " doesn't want to be in a clan.\n" );
}
}
sb.append( o.HeShe() );
sb.append( " has been idle for " );
sb.append( o.getIdle( new DateTime() ).toString() );
sb.append( '.' );
ic.sendFeedback( sb.toString() );
ic.sendLine();
}
else if( t instanceof Trie )
displayTable( ic, ((Trie)t).elements() );
}
else
displayTable( ic, Key.instance().players() );
}
public static final void displayTable( InteractiveConnection ic, Enumeration e )
{
StringBuffer sb = new StringBuffer();
Player scan;
TableParagraph.Generator table = new TableParagraph.Generator( columns );
DateTime now = new DateTime();
while( e.hasMoreElements() )
{
String rowContents[] = new String[ columns.length ];
scan = (Player)e.nextElement();
// the players name
rowContents[0] = (String)scan.getName();
// set up the players location...
if( scan.isHiding() )
rowContents[1] = "[hiding]";
else
{
Room current = scan.getLocation();
if( current == null )
rowContents[1] = "no-where";
else if( current == scan.getHome() )
rowContents[1] = "@home";
else
{
Object o = current.getParent();
if( o != null && !(o instanceof Player) )
rowContents[1] = current.getName();
}
}
// the clan
Clan tmpClan = scan.getClan();
if( tmpClan != null )
rowContents[2] = tmpClan.getName();
else if( scan.isLiberated() )
rowContents[2] = "no clan please";
else
rowContents[2] = "";
// the idle time
rowContents[3] = scan.getIdle( now ).toShortString();
rowContents[4] = scan.getRank();
// add the row
table.appendRow( rowContents );
}
int numPlayers = Key.instance().numberPlayers();
StringBuffer footer = new StringBuffer();
footer.append( "There ");
footer.append( Grammar.isAreCount( numPlayers ) );
footer.append( " " );
footer.append( Grammar.personPeople( numPlayers ) );
footer.append( " online." );
table.setFooter( footer.toString() );
ic.send( table.getParagraph() );
}
public static final TableParagraph.Column[] columns =
{
new TableParagraph.Column( "name", Player.MAX_NAME ),
new TableParagraph.Column( "location", 10 ),
new TableParagraph.Column( "clan", Clan.MAX_NAME ),
new TableParagraph.Column( "idle", 5 ),
new TableParagraph.Column( "rank", 8 )
};
}