/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
*/
package key;
import key.collections.NumberedCollection;
import key.primitive.DateTime;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.io.*;
/**
* A messageBox is a type of specialised container for
* containing letters
*/
public class MessageBox extends MaterialContainer
{
private static final long serialVersionUID = -1619021870941708968L;
public static final TableParagraph.Column[] columns =
{
new TableParagraph.Column( "[##]", 4 ),
new TableParagraph.Column( "From", Player.MAX_NAME ),
new TableParagraph.Column( "Subject", Letter.MAX_SUBJECT )
};
public MessageBox()
{
contained = new NumberedCollection();
setConstraint( Type.LETTER );
}
public MessageBox( int newLimit )
{
this();
setLimit( newLimit );
}
public int countUnread()
{
int c = 0;
for( Enumeration e = elements(); e.hasMoreElements(); )
{
Letter t = (Letter) e.nextElement();
if( t.readCount == 0 )
c++;
}
return( c );
}
public void read( Player p, StringTokenizer args, InteractiveConnection ic, Flags flags, Atom th )
{
if( args.hasMoreTokens() )
{
String fa = args.nextToken();
int number = 0;
try
{
number = Integer.parseInt( fa );
}
catch( NumberFormatException e )
{
ic.send( "'" + fa + "' is not a number" );
return;
}
if( number < 1 )
{
ic.send( "You want to read *which* number?" );
}
else
{
Letter t = (Letter) getElementAt( number - 1 );
if( t == null )
ic.send( "Can't find that message..." );
else
{
t.read( p, args, ic, flags, t );
}
}
return;
}
if( count() == 0 )
{
ic.send( "There aren't any messages in " + getName() );
return;
}
TableParagraph.Generator tp = new TableParagraph.Generator( columns );
int i = 1;
for( Enumeration e = elements(); e.hasMoreElements(); )
{
Letter t = (Letter) e.nextElement();
String rowContents[] = new String[ columns.length ];
rowContents[0] = Integer.toString( i );
rowContents[1] = t.from;
rowContents[2] = t.description;
tp.appendRow( rowContents );
i++;
}
// decrement i to account for the initial 1
i--;
tp.setFooter( Integer.toString( i ) + " message" + ((i==1)?"":"s") );
ic.send( tp.getParagraph() );
}
}