key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
/*
**               j###t  ########## ####   ####
**              j###t   ########## ####   ####
**             j###T               "###L J###"
**          ######P'    ##########  #########
**          ######k,    ##########   T######T
**          ####~###L   ####
**          #### q###L  ##########   .#####
**          ####  \###L ##########   #####"
**
**  $Id: Newbies.java,v 1.2 1997/07/29 08:51:45 subtle Exp subtle $
**
**  Class History
**  
**  Date        Name         Description
**  ---------|------------|-----------------------------------------------
**  29Jul97     subtle      created this command
**  06Dec97     subtle      fixed the number of newbies online number
**
*/

package key.commands;

import key.*;
import key.primitive.DateTime;

import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Enumeration;

public class Newbies extends Command
{
	public Newbies()
	{
		setKey( "newbies" );
		usage = "";
	}
	
	public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
	{
		displayTable( ic, Key.instance().players() );
	}
	
	private static final void displayTable( InteractiveConnection ic, Enumeration e )
	{
		StringBuffer sb = new StringBuffer();
		Player scan;
		int count = 0;
		
		TableParagraph.Generator table = new TableParagraph.Generator( columns );
		
		DateTime now = new DateTime();
		
		while( e.hasMoreElements() )
		{
			scan = (Player) e.nextElement();
			
			if( scan.willSync() )
				continue;
			
			count++;
			
			String rowContents[] = new String[ columns.length ];
			
				//  the players name
			rowContents[0] = (String)scan.getName();
			
			Room current = scan.getLocation();
			
			if( current != null )
			{	
				if( current.getParent() instanceof Player )
					rowContents[1] = "-players-";
				else
					rowContents[1] = current.getName();
			}
			else
				rowContents[1] = "?nowhere?";
			
			try
			{
				rowContents[2] = scan.getConnection().getSiteName();
			}
			catch( PlayerNotConnectedException except )
			{
				rowContents[2] = "not online";
			}
			
				//  the idle time
			rowContents[3] = scan.getIdle( now ).toShortString();
			
			if( scan.hasPassword() )
				rowContents[4] = " # ";
			else
				rowContents[4] = "";

			if( scan.getCanSave() )
				rowContents[5] = " # ";
			else
				rowContents[5] = "";
			
				//  add the row
			table.appendRow( rowContents );
		}
		
		StringBuffer footer = new StringBuffer();
		footer.append( "There ");
		footer.append( Grammar.isAreCount( count ) );
		footer.append( " " );
		footer.append( Grammar.newbieNewbies( count ) );
		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( "site", 40 ),
		new TableParagraph.Column( "idle", 5 ),
		new TableParagraph.Column( "pwd", 3 ),
		new TableParagraph.Column( "res", 3 )
	};
}