package mit.mitid.ui ;

public class ActionPanel
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 boolean searchable = false ;
	public boolean isSearchable() { return this.searchable ; }
	public void setSearchable( boolean searchable ) { this.searchable = searchable ; }

	private boolean assignable = false ;
	public boolean isAssignable() { return this.assignable ; }
	public void setAssignable( boolean assignable ) { this.assignable = assignable ; }

	mit.mitid.ui.AssignButton assign = new mit.mitid.ui.AssignButton() ;
	mit.mitid.ui.ClearButton clear = new mit.mitid.ui.ClearButton() ;
	mit.mitid.ui.ExitButton exit = new mit.mitid.ui.ExitButton() ;
	mit.mitid.ui.SearchButton search = new mit.mitid.ui.SearchButton() ;

	java.awt.GridBagLayout gbl = new java.awt.GridBagLayout() ;
	java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints() ;

	public void eventRaised( mit.event.Event e )
	{
		try
		{
			if( e instanceof mit.mitid.event.ClearEvent )
			{
				HandleClearEvent( ( mit.mitid.event.ClearEvent ) e ) ;
			}
			else if( e instanceof mit.comm.event.ResultEvent )
			{
				HandleResultEvent( ( mit.comm.event.ResultEvent ) e ) ;
			}
			else
			{
				HandleOtherEvents() ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleClearEvent( mit.mitid.event.ClearEvent e )
	{
		if( isSearchable() )
		{
			search.setEnabled( false ) ;
		}
		if( isAssignable() )
		{
			if( isAncestorOf( assign ) )
			{
				remove( assign ) ;
			}
		} 
		invalidate() ;
		validate() ;
		repaint() ;
	}

	private void HandleResultEvent( mit.comm.event.ResultEvent e )
	{
		mit.comm.event.ResultRaiser r = ( mit.comm.event.ResultRaiser ) e.getSource() ;
		if( r.getResult().startsWith( mit.mitid.PROTOCOL.SEARCH_NONE + mit.mitid.PROTOCOL.FIELD_DELIMITER_STRING ) )
		{
			if( isAssignable() )
			{
				if( ! isAncestorOf( assign ) )
				{
					gbc.gridy = 3 ;
					addAComponent( assign , gbl , gbc ) ;
					assign.setEnabled( true ) ;
					invalidate() ;
					getParent().validate() ;
					repaint() ;
				}
			}
		}
	}

	private void HandleOtherEvents()
	{
		if( isSearchable() )
		{
			search.setEnabled( true ) ;
			clear.setEnabled( true ) ;
		}
		if( isAssignable() )
		{
			if( isAncestorOf( assign ) )
			{
				remove( assign ) ;
			}
		}
		invalidate() ;
		validate() ;
		repaint() ;
	}

	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			removeAll() ;
			setLabel( "Action" ) ;

			gbc.gridx = 1 ;
			gbc.gridy = 1 ;
			gbc.gridwidth = java.awt.GridBagConstraints.REMAINDER ;
			gbc.gridheight = 1 ;
			gbc.weightx = 1.0 ;
			gbc.weighty = 0.0 ;
			gbc.anchor = java.awt.GridBagConstraints.WEST ;
			gbc.fill = java.awt.GridBagConstraints.HORIZONTAL ;
			gbc.insets = new java.awt.Insets( 0 , 0 , 0 , 0 ) ;
			gbc.ipadx = 5 ;
			gbc.ipady = 3 ;

			setLayout( gbl ) ;

			addAComponent( clear , gbl , gbc ) ;

			gbc.gridy = 2 ;
			addAComponent( search , gbl , gbc ) ;

			gbc.gridy = 4 ;
			addAComponent( exit , gbl , gbc ) ;

			clear.setEnabled( false ) ;
			exit.setEnabled( true ) ;
			search.setEnabled( false ) ;

			getRootPane().setDefaultButton( search ) ;

			getListenerAdapter().addHandled( mit.comm.event.ResultEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.ClearEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.FirstNameEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.MiddleNameEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.LastNameEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.SsnEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.DobEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.MitidEvent.class ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void addAComponent
	( javax.swing.JComponent component
	, java.awt.GridBagLayout layout
	, java.awt.GridBagConstraints constraints
	)
	{
		layout.setConstraints( component , constraints ) ;
		add( component ) ;
	}

}