package mit.mitid.comm.ui ;

public class CommComponent
extends mit.swing.xJComponent
implements	mit.comm.event.ResultRaiser
	,	mit.comm.event.DisplayResultRaiser
	,	mit.event.Listener
{
	private mit.event.RaiserAdapter raiserAdapter = new mit.event.RaiserAdapter( this ) ;
	public mit.event.RaiserAdapter getRaiserAdapter() { return this.raiserAdapter ; }
	public void setRaiserAdapter( mit.event.RaiserAdapter raiserAdapter ) { this.raiserAdapter = raiserAdapter ; }

	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 String getResult() { return com.getResult() ; }
	public void setResult( String result ) { com.setResult( result ) ; }

	private String status = null ;
	public String getStatus() { return this.status ; }
	public void setStatus( String status ) { this.status = status ; }

	private String statusMessage = null ;
	public String getStatusMessage() { return this.statusMessage ; }
	public void setStatusMessage( String statusMessage ) { this.statusMessage = statusMessage ; }

	private javax.swing.JComponent resultsComponent = null ;
	public javax.swing.JComponent getResultsComponent() { return this.resultsComponent ; }
	public void setResultsComponent( javax.swing.JComponent resultsComponent ) { this.resultsComponent = resultsComponent ; }

	private java.util.Vector criteriaComponents = null ;
	public java.util.Vector getCriteriaComponents() { return this.criteriaComponents ; }
	void setCriteriaComponents( java.util.Vector criteriaComponents ) { this.criteriaComponents = criteriaComponents ; }

	private javax.swing.JButton[] actionButtons = null ;
	public javax.swing.JButton[] getActionButtons() { return this.actionButtons ; }
	public void setActionButtons( javax.swing.JButton[] actionButtons ) { this.actionButtons = actionButtons ; }

	private mit.mitid.comm.Communications com = new mit.mitid.comm.Communications() ;

	public void eventRaised( mit.event.Event e )
	{
		java.awt.Cursor oldCursor = getCursor() ;
		setCursor( java.awt.Cursor.getPredefinedCursor( java.awt.Cursor.WAIT_CURSOR ) ) ;
		try
		{
			if( e instanceof mit.comm.event.HostEvent )
			{
				HandleHostEvent( ( mit.comm.event.HostEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.comm.event.MessageEvent )
			{
				HandleMessageEvent( ( mit.mitid.comm.event.MessageEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.comm.event.AuthenticatorEvent )
			{
				HandleAuthenticatorEvent( ( mit.mitid.comm.event.AuthenticatorEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
		setCursor( oldCursor ) ;
	}

	private void HandleHostEvent( mit.comm.event.HostEvent e )
	{
		mit.comm.event.HostRaiser r = ( mit.comm.event.HostRaiser ) e.getSource() ;
		com.setHost( r.getHost() ) ;
		com.setPort( r.getPort() ) ;
		com.readMessage() ;
		if( null != getResult() )
		{
			setStatus( getResult() ) ;
			( new mit.comm.event.DisplayResultEvent( this ) ).raise() ;
		}
	}
	
	private void HandleMessageEvent( mit.mitid.comm.event.MessageEvent e )
	{
		mit.mitid.comm.event.MessageRaiser r = ( mit.mitid.comm.event.MessageRaiser ) e.getSource() ;
		com.writeMessage( r.getMessage() ) ;
		if( null != getResult() )
		{
			setStatus( getResult() ) ;
			( new mit.comm.event.DisplayResultEvent( this ) ).raise() ;
		}
		else
		{
			com.readMessage() ;
			if( null != getResult() )
			{
				( new mit.comm.event.ResultEvent( this ) ).raise() ;
			}
		}
	}
	
	private void HandleAuthenticatorEvent( mit.mitid.comm.event.AuthenticatorEvent e )
	{
		mit.mitid.comm.event.AuthenticatorRaiser r = ( mit.mitid.comm.event.AuthenticatorRaiser ) e.getSource() ;
		com.writeMessage( r.getHeader() , r.getServiceTicket() ) ;
		if( null != getResult() )
		{
			setStatus( getResult() ) ;
			( new mit.comm.event.DisplayResultEvent( this ) ).raise() ;
		}
		else
		{
			com.readMessage() ;
			if( null != getResult() )
			{
				( new mit.comm.event.ResultEvent( this ) ).raise() ;
			}
		}
	}
	
	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			setVisible( false ) ;
			getListenerAdapter().addHandled( mit.comm.event.HostEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.comm.event.MessageEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.comm.event.AuthenticatorEvent.class ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

}