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$
**
**  Class History
**
**  Date        Name         Description
**  ---------|------------|-----------------------------------------------
**  19Aug98     subtle       start of recorded history
**
*/

package key;

import key.primitive.*;
import java.util.Enumeration;
import java.io.*;
import java.util.StringTokenizer;

public class Screen extends Atom implements WebAccessible
{
	public static final AtomicElement[] ELEMENTS =
	{
			//  String getName();
		AtomicElement.construct( Screen.class, Paragraph.class, "text",
			AtomicElement.PUBLIC_FIELD,
			"the body of the screen" ),
		AtomicElement.construct( Screen.class, String.class, "title",
			AtomicElement.PUBLIC_FIELD,
			"the title of the screen" ),
		AtomicElement.construct( Screen.class, String.class, "author",
			AtomicElement.PUBLIC_FIELD,
			"the author of this screen" ),
		AtomicElement.construct( Screen.class, DateTime.class, "modified",
			AtomicElement.PUBLIC_FIELD,
			"the last modified date of this screen (not automatic)" ),
	};
	
	public static final AtomicStructure STRUCTURE = new AtomicStructure( Atom.STRUCTURE, ELEMENTS );
	
	Paragraph text = new TextParagraph( "" );
	String title = "";
	String author = "";
	DateTime modified = new DateTime();
	
	public Screen()
	{
	}
	
	public Screen( Paragraph p )
	{
		text = p;
	}
	
	public Paragraph getParagraph()
	{
		return( text );
	}
	
	public void setParagraph( Paragraph p )
	{
		permissionList.check( modifyAction );
		text = p;
		modify();
	}
	
	public void modify()
	{
		modified = new DateTime();
	}

	public boolean isModifiedAfter( DateTime dt )
	{
		return( modified.after( dt ) );
	}
	
	public boolean isEmpty()
	{
		return( text.isEmpty() );
	}
	
	public AtomicStructure getDeclaredStructure()
	{
		return( STRUCTURE );
	}
	
		/**  An aspect is its description when looked at */
	public Paragraph aspect()
	{
		MultiParagraph.Generator p = new MultiParagraph.Generator();
		
		p.append( new HeadingParagraph( getKey().toString() + " - " + title ) );
		p.append( text );
		p.append( new HeadingParagraph( "author: " + author, HeadingParagraph.RIGHT ) );
		
		return( p.getParagraph() );
	}

	public String getContentType()
	{
		return( "text/html" );
	}
	
	public Paragraph getContent( String line )
	{
		return( aspect() );
	}
}