/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** Class: contents
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 22Jul97 snapper created this command
**
*/
package key.commands;
import key.*;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Enumeration;
public class Contents extends Command
{
public static final AtomicElement[] ELEMENTS =
{
AtomicElement.construct( Contents.class, Container.class, "containerFor",
AtomicElement.PUBLIC_FIELD,
"the container to list the contents of" ),
AtomicElement.construct( Contents.class, String.class, "empty",
AtomicElement.PUBLIC_FIELD,
"the string to send if there is nothing in the container" ),
AtomicElement.construct( Contents.class, String.class, "footer",
AtomicElement.PUBLIC_FIELD,
"the footer of the listing" ),
AtomicElement.construct( Contents.class, String.class, "singular",
AtomicElement.PUBLIC_FIELD,
"the footer if there is only one element in the container" )
};
public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS );
public Reference containerFor = Key.instance().getThis();
public String empty = "Nothing in container.";
public String footer = "%n total";
public String singular = "only one";
public static final char numberCode = 'n';
public Contents()
{
setKey( "contents" );
usage = "<name or name segment>";
}
public AtomicStructure getDeclaredStructure()
{
return( STRUCTURE );
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
ColumnParagraph.Generator columns = new ColumnParagraph.Generator( Player.MAX_NAME, 2 );
int numElements = 0;
Container cf = (Container) containerFor.get();
for( Enumeration e = cf.referenceElements(); e.hasMoreElements(); )
{
Reference o = (Reference) e.nextElement();
// META: commented out this code, I honestly don't know
// what it was meant to do... can't think of a reason
// to do this... subtle Oct 10, 1998
//QualifierList ql = p.getQualifierList();
//Type t = Type.typeOf( cf );
//if( ql.check( t ) != Qualifiers.SUPPRESSION_CODE )
//{
columns.appendEntry( o.getName() );
numElements++;
//}
}
if( numElements == 0 )
{
ic.sendFeedback( empty );
}
else
{
ic.send( LineParagraph.LINE );
ic.send( columns.getParagraph() );
if( numElements == 1 )
{
ic.send( new HeadingParagraph( Grammar.substitute( singular ) ) );
}
else
{
p.putCode( numberCode, Integer.toString( numElements ) );
String foot = Grammar.substitute( footer, p.getCodes() );
ic.send( new HeadingParagraph( foot ) );
}
}
}
}