package mit.mitid.ui ;

public class AuthenServiceComponent
extends mit.swing.xJComponent
implements	mit.mitid.event.AuthenServiceRaiser
	,	mit.mitid.event.ValidServiceRaiser
	,	mit.comm.event.HostRaiser
	,	mit.comm.event.DisplayResultRaiser
	,	mit.mitid.comm.event.AuthenticatorRaiser
	,	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 ; }

	private mit.mitid.AUTHEN authen = new mit.mitid.AUTHEN() ;

	private String service = mit.mitid.PROTOCOL.DEFAULT_SERVICE ;
	public String getService() { return this.service ; }
	public void setService( String service ) { this.service = service ; }

	private String host = mit.mitid.PROTOCOL.TEST_HOST ;
	public String getHost() { return this.host ; }
	public void setHost( String host ) { this.host = host ; }

	private Integer port = new Integer( mit.mitid.PROTOCOL.TEST_PORT ) ;
	public Integer getPort() { return this.port ; }
	public void setPort( Integer port ) { this.port = port ; }

	private String header = null ;
	public String getHeader() { return this.header ; }
	public void setHeader( String header ) { this.header = header ; }

	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 ; }

	private boolean authenticated = false ;
	public boolean isAuthenticated() { return this.authenticated ; }
	public void setAuthenticated( boolean authenticated ) { this.authenticated = authenticated ; }

	private byte[] serviceTicket = null ;
	public byte[] getServiceTicket() { return this.serviceTicket ; }
	public void setServiceTicket( byte[] serviceTicket ) { this.serviceTicket = serviceTicket ; }

	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 ; }

	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.comm.event.ResultEvent )
			{
				HandleResultEvent( ( mit.comm.event.ResultEvent ) e ) ;
			}
		}
		catch( Throwable ex )
		{
			ex.printStackTrace() ;
		}
	}

	private void HandleValidUserEvent( mit.krb4.event.ValidUserEvent e )
	throws Throwable
	{
		( new mit.comm.event.HostEvent( this ) ).raise() ;
		mit.krb4.event.ValidUserRaiser r = ( mit.krb4.event.ValidUserRaiser ) e.getSource() ;
		krb4.lib.Krb4Creds clientCredentials = r.getCreds() ;
		if( null != clientCredentials )
		{
			setServiceTicket( mit.krb4.Authenticate.getServiceTicket( r.getCreds() , getService() , getHost() , r.getUserName() , r.getUserInst() ) ) ;
			if( null != getServiceTicket() )
			{
				authen.setLength( getServiceTicket().length ) ;
				setHeader( authen.serialize() ) ;
				( new mit.mitid.comm.event.AuthenticatorEvent( this ) ).raise() ;
			}
		}
	}

	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.AUTHENTICATED + mit.mitid.PROTOCOL.FIELD_DELIMITER_STRING ) )
		{
			authen.deserialize( r.getResult() ) ;
			setAuthenticated( authen.isAuthenticated() ) ;
			setStatus( authen.getStatus() ) ;
			setStatusMessage( authen.getStatusMessage() ) ;
			setSearchable( authen.isSearchable() ) ;
			setAssignable( authen.isAssignable() ) ;
			( new mit.mitid.event.AuthenServiceEvent( this ) ).raise() ;
			( new mit.comm.event.DisplayResultEvent( this ) ).raise() ;
		}
	}
	
	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			setVisible( false ) ;
			getListenerAdapter().addHandled( mit.krb4.event.ValidUserEvent.class ) ;
			getListenerAdapter().addHandled( mit.comm.event.ResultEvent.class ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}
}