package mit.mitid.ui ;

public class MitidApp
extends mit.swing.xJPanel
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.krb4.ui.LoginPanel loginPanel = new mit.krb4.ui.LoginPanel() ;
	private mit.mitid.ui.MitidPanel mitidPanel = new mit.mitid.ui.MitidPanel() ;
	private mit.comm.ui.ResultsPanel results = new mit.comm.ui.ResultsPanel() ;

	private mit.mitid.comm.ui.CommComponent comm = new mit.mitid.comm.ui.CommComponent() ;
	private mit.mitid.ui.AuthenServiceComponent authenService = new mit.mitid.ui.AuthenServiceComponent() ;	
	private mit.mitid.ui.TerminateServiceComponent terminateService = new mit.mitid.ui.TerminateServiceComponent() ;	
	private mit.mitid.ui.AssignComponent assign = new mit.mitid.ui.AssignComponent() ;	
	private mit.mitid.ui.SearchComponent search = new mit.mitid.ui.SearchComponent() ;	

	private java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints() ;
	private java.awt.GridBagLayout gbl = new java.awt.GridBagLayout() ;

	public void eventRaised( mit.event.Event e )
	{
		try
		{
			if( e instanceof mit.mitid.event.AuthenServiceEvent )
			{
				HandleAuthenServiceEvent( ( mit.mitid.event.AuthenServiceEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.ExitEvent )
			{
				HandleExitEvent( ( mit.mitid.event.ExitEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleAuthenServiceEvent( mit.mitid.event.AuthenServiceEvent e )
	{
		mit.mitid.event.AuthenServiceRaiser r = ( mit.mitid.event.AuthenServiceRaiser ) e.getSource() ;
		mitidPanel.setAssignable( r.isAssignable() ) ;
		mitidPanel.setSearchable( r.isSearchable() ) ;
		getListenerAdapter().removeHandled( mit.mitid.event.AuthenServiceEvent.class ) ;

		remove( loginPanel ) ;

		gbc.gridx = 1 ;
		gbc.gridy = 1 ;
		gbc.gridwidth = java.awt.GridBagConstraints.RELATIVE ;
		gbc.gridheight = java.awt.GridBagConstraints.RELATIVE ;
		gbc.weightx = 1.0 ;
		gbc.weighty = 1.0 ;
		gbc.anchor = java.awt.GridBagConstraints.WEST ;
		gbc.fill = java.awt.GridBagConstraints.HORIZONTAL ;

		addAComponent( mitidPanel , gbl , gbc ) ;

		mitidPanel.invalidate() ;
		invalidate() ;
		validate() ;
		repaint() ;
	}
	
	private void HandleExitEvent( mit.mitid.event.ExitEvent e )
	{
		System.exit( 0 ) ;
	}

	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			removeAll() ;
			add( comm ) ;
			add( authenService ) ;
			add( terminateService ) ;
			add( assign ) ;
			add( search ) ;

			setLayout( gbl ) ;

			gbc.gridx = 1 ;
			gbc.gridy = 1 ;
			gbc.gridwidth = java.awt.GridBagConstraints.RELATIVE ;
			gbc.gridheight = java.awt.GridBagConstraints.RELATIVE ;
			gbc.weightx = 1.0 ;
			gbc.weighty = 1.0 ;
			gbc.anchor = java.awt.GridBagConstraints.WEST ;
			gbc.fill = java.awt.GridBagConstraints.HORIZONTAL ;

			addAComponent( loginPanel , gbl , gbc ) ;

			gbc.gridx = 1 ;
			gbc.gridy = 2 ;
			gbc.gridheight = java.awt.GridBagConstraints.REMAINDER ;
			gbc.weightx = 2.0 ;
			gbc.weighty = 2.0 ;
			gbc.fill = java.awt.GridBagConstraints.BOTH ;

			addAComponent( results , gbl , gbc ) ;

			getListenerAdapter().addHandled( mit.mitid.event.AuthenServiceEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.ExitEvent.class ) ;

			getEventControlAdapter().addContained( mit.krb4.event.ValidUserEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.event.ValidServiceEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.comm.event.AuthenticatorEvent.class ) ;
			getEventControlAdapter().addContained( mit.comm.event.HostEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.comm.event.MessageEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.event.ActionEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.event.AuthenServiceEvent.class ) ;
			getEventControlAdapter().addContained( mit.mitid.event.TextEvent.class ) ;

			getEventControlAdapter().addExcluded( mit.krb4.event.ValidUserEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.event.ValidServiceEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.comm.event.AuthenticatorEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.comm.event.HostEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.comm.event.MessageEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.event.ActionEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.event.AuthenServiceEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.mitid.event.TextEvent.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 ) ;
	}

	public static void main( String[] args )
	{
		try
		{
			mit.swing.xJFrame f = new mit.swing.xJFrame( null , "MITID Application" ) ;
			f.getContentPane().setLayout( new java.awt.BorderLayout() ) ;
			f.setBackground( java.awt.Color.green ) ;

			mit.mitid.ui.MitidApp p = new mit.mitid.ui.MitidApp() ;
			p.setBackground( java.awt.Color.pink ) ;

			f.getContentPane().add( p , java.awt.BorderLayout.CENTER ) ;
			f.setSize( 450 , 300 ) ;
			f.show() ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}
}