package key;
import java.io.*;
import java.util.Vector;
import java.util.Enumeration;
import java.util.StringTokenizer;
/**
*/
public final class TableParagraph extends Paragraph
{
// META: this is a security risk -
// do not allow direct access to the column array.
Column columns[];
private Vector rows;
private String footer;
TableParagraph( Generator p )
{
columns = p.columns;
rows = p.rows;
rows.trimToSize();
footer = p.footer;
}
public Column getColumnAt( int x )
{
return( columns[x] );
}
TableParagraph( TableParagraph p )
{
columns = p.columns;
rows = p.rows;
footer = p.footer;
}
public Enumeration elements()
{
return( rows.elements() );
}
public int count()
{
return( rows.size() );
}
public String getFooter()
{
return( footer );
}
// this isn't a security violation as it doesn't
// modify this table
public Paragraph substitute( String[] codes )
{
String s = Grammar.substitute( footer, codes );
if( s != footer )
{
TableParagraph tp = new TableParagraph( this );
tp.footer = s;
tp.footer = Grammar.substitute( footer, codes );
return( tp );
}
else
return( this );
}
public String toString()
{
return( "TableParagraph" );
}
public static class Column implements java.io.Serializable
{
private String heading;
private int width;
public Column( String heading, int width )
{
this.heading = heading;
this.width = width;
}
public int getWidth()
{ return( width ); }
public String getHeading()
{ return( heading ); }
}
public static class Generator
{
Column columns[];
Vector rows;
String footer;
public Generator()
{
columns = new Column[0];
rows = new Vector( 60, 60 );
footer = "";
}
public Generator( TableParagraph p )
{
columns = p.columns;
rows = p.rows;
footer = p.footer;
}
public Generator( Column columnDefinition[] )
{
columns = columnDefinition;
rows = new Vector( 60, 60 );
}
public void setFooter( String f )
{
footer = f;
}
public void appendRow( String[] rowValues )
{
if( rowValues.length != columns.length )
throw new UnexpectedResult( "number of row values is not equal to the number of headings" );
rows.addElement( rowValues );
}
public int count()
{
return( rows.size() );
}
public TableParagraph getParagraph()
{
return( new TableParagraph( this ) );
}
}
}