package mit.comm.ui ;

public class ResultsPanel
extends mit.swing.ui.LabeledPanel
implements	mit.event.Listener
{
	private mit.event.ListenerAdapter listenerAdapter = new mit.event.ListenerAdapter( this ) ;
	public mit.event.ListenerAdapter getListenerAdapter() { return this.listenerAdapter ; }
	public void setListenerAdapter( mit.event.ListenerAdapter listenerAdapter ) { this.listenerAdapter = listenerAdapter ; }

	private mit.swing.xJTextArea status = new mit.swing.xJTextArea() ;
	private mit.swing.xJTextArea statusMessage = new mit.swing.xJTextArea() ;
	private mit.swing.xJComponent emptyComponent = new mit.swing.xJComponent() ;

	public void eventRaised( mit.event.Event e )
	{
		try
		{
			if( e instanceof mit.comm.event.DisplayResultEvent )
			{
				HandleDisplayResultEvent( ( mit.comm.event.DisplayResultEvent ) e ) ;
			}
			else if( e instanceof mit.util.event.ClearEvent )
			{
				HandleClearEvent( ( mit.util.event.ClearEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleDisplayResultEvent( mit.comm.event.DisplayResultEvent e )
	{
		removeAll() ;
		mit.comm.event.DisplayResultRaiser r = ( mit.comm.event.DisplayResultRaiser ) e.getSource() ;
		status.setText( "" ) ;
		if( null != r.getStatus() )
		{
			status.setText( r.getStatus() ) ;
		}
		if( null != r.getResultsComponent() )
		{
			add( r.getResultsComponent() , java.awt.BorderLayout.CENTER ) ;
		}
		else
		{
			add( emptyComponent , java.awt.BorderLayout.CENTER ) ;	
		}
		statusMessage.setText( "" ) ;
		if( null != r.getStatusMessage() )
		{
			statusMessage.setText( r.getStatusMessage() ) ;
		}
		add( status , java.awt.BorderLayout.NORTH ) ;
		add( statusMessage , java.awt.BorderLayout.SOUTH ) ;
		invalidate() ;
		validate() ;
		repaint() ;
	}

	private void HandleClearEvent( mit.util.event.ClearEvent e )
	{
		removeAll() ;
		status.setText( "" ) ;
		statusMessage.setText( "" ) ;

		add( status , java.awt.BorderLayout.NORTH ) ;
		add( emptyComponent , java.awt.BorderLayout.CENTER ) ;	
		add( statusMessage , java.awt.BorderLayout.SOUTH ) ;

		invalidate() ;
		validate() ;
		repaint() ;
	}

	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			setLabel( "Results" ) ;
			setLayout( new java.awt.BorderLayout() ) ;

			status.setEditable( false ) ;
			statusMessage.setEditable( false ) ;

			getListenerAdapter().addHandled( mit.util.event.ClearEvent.class ) ;
			getListenerAdapter().addHandled( mit.comm.event.DisplayResultEvent.class ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

}