package mit.util.ui ;

public abstract class Applet
extends mit.swing.xJApplet
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 ; }

	public abstract mit.util.ui.Panel getAppPanel() ;
	private mit.util.ui.Panel currentAppPanel = null ;
	public abstract java.awt.Component[] getInvisibleComponents() ;

	private mit.krb4.ui.LoginPanel loginPanel = new mit.krb4.ui.LoginPanel() ;
	private mit.comm.ui.ResultsPanel results = new mit.comm.ui.ResultsPanel() ;

	private mit.util.ui.ValidServiceComponent validService = new mit.util.ui.ValidServiceComponent() ;	

	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.krb4.event.ValidUserEvent )
			{
				HandleValidUserEvent( ( mit.krb4.event.ValidUserEvent ) e ) ;
			}
			else if( e instanceof mit.util.event.ExitEvent )
			{
				HandleExitEvent( ( mit.util.event.ExitEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleValidUserEvent( mit.krb4.event.ValidUserEvent e )
	{
		getListenerAdapter().removeHandled( mit.krb4.event.ValidUserEvent.class ) ;

		remove( loginPanel ) ;

		if( null != getAppPanel() )
		{
			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.BOTH ;

			currentAppPanel = getAppPanel() ;
			addAComponent( currentAppPanel , gbl , gbc ) ;

			currentAppPanel.invalidate() ;
			invalidate() ;
			validate() ;
			repaint() ;
		}
	}
	
	private void HandleExitEvent( mit.util.event.ExitEvent e )
	{
		System.exit( 0 ) ;
	}

	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			getContentPane().removeAll() ;
			getContentPane().add( validService ) ;

			if( null != getInvisibleComponents() )
			{
				java.awt.Component[] ic = getInvisibleComponents() ;
				for( int i = 0 ; ic.length != i ; i ++ )
				{
					getContentPane().add( ic[ i ] ) ;
				}
			}
			getContentPane().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.krb4.event.ValidUserEvent.class ) ;
			getListenerAdapter().addHandled( mit.util.event.ExitEvent.class ) ;

			getEventControlAdapter().addContained( mit.comm.event.HostEvent.class ) ;
			getEventControlAdapter().addContained( mit.krb4.event.ValidUserEvent.class ) ;
			getEventControlAdapter().addContained( mit.util.event.ValidServiceEvent.class ) ;
			getEventControlAdapter().addContained( mit.util.event.ActionEvent.class ) ;

			getEventControlAdapter().addExcluded( mit.comm.event.HostEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.krb4.event.ValidUserEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.util.event.ValidServiceEvent.class ) ;
			getEventControlAdapter().addExcluded( mit.util.event.ActionEvent.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 ) ;
		getContentPane().add( component ) ;
	}

}