package mit.mitid.ui ;

public class AssignComponent
extends mit.swing.xJComponent
implements	mit.mitid.comm.event.MessageRaiser
	,	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 ; }

	private mit.mitid.ASSIGN assign = new mit.mitid.ASSIGN() ;
	private mit.mitid.SEARCH search = new mit.mitid.SEARCH() ;

	private String firstName = null ;
	public String getFirstName() { return this.firstName ; }
	public void setFirstName( String firstName ) { this.firstName = firstName ; }

	private boolean assignable = false ;
	public boolean isAssignable() { return this.assignable ; }
	public void setAssignable( boolean assignable ) { this.assignable = assignable ; }

	private String middleName = null ;
	public String getMiddleName() { return this.middleName ; }
	public void setMiddleName( String middleName ) { this.middleName = middleName ; }

	private String lastName = null ;
	public String getLastName() { return this.lastName ; }
	public void setLastName( String lastName ) { this.lastName = lastName ; }

	private String ssn = null ;
	public String getSsn() { return this.ssn ; }
	public void setSsn( String ssn ) { this.ssn = ssn ; }

	private String dob = null ;
	public String getDob() { return this.dob ; }
	public void setDob( String dob ) { this.dob = dob ; }

	private String serverTag = null ;
	public String getServerTag() { return this.serverTag ; }
	public void setServerTag( String serverTag ) { this.serverTag = serverTag ; }

	private String message = null ;
	public String getMessage() { return this.message ; }
	public void setMessage( String message ) { this.message = message ; }

	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.mitid.event.AssignEvent )
			{
				HandleAssignEvent( ( mit.mitid.event.AssignEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.ClearEvent )
			{
				HandleClearEvent( ( mit.mitid.event.ClearEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.FirstNameEvent )
			{
				HandleFirstNameEvent( ( mit.mitid.event.FirstNameEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.MiddleNameEvent )
			{
				HandleMiddleNameEvent( ( mit.mitid.event.MiddleNameEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.LastNameEvent )
			{
				HandleLastNameEvent( ( mit.mitid.event.LastNameEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.SsnEvent )
			{
				HandleSsnEvent( ( mit.mitid.event.SsnEvent ) e ) ;
			}
			else if( e instanceof mit.mitid.event.DobEvent )
			{
				HandleDobEvent( ( mit.mitid.event.DobEvent ) e ) ;
			}
			else if( e instanceof mit.comm.event.ResultEvent )
			{
				HandleResultEvent( ( mit.comm.event.ResultEvent ) e ) ;
			}
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}

	private boolean allSet()
	{
		if 
		(	( null != getFirstName() )
		&&	( null != getMiddleName() )
		&&	( null != getLastName() )
		&&	( null != getSsn() )
		&&	( null != getDob() )
		)
		{
			return true ;
		}
		return false ;
	}

	private void resetAll()
	{
		setFirstName( null ) ;
		setMiddleName( null ) ;
		setLastName( null ) ;
		setSsn( null ) ;
		setDob( null ) ;
		setMessage( null ) ;
	}

	private void HandleAssignEvent( mit.mitid.event.AssignEvent e )
	{
		assign.setFirstName( getFirstName() ) ;
		assign.setMiddleName( getMiddleName() ) ;
		assign.setLastName( getLastName() ) ;
		assign.setSsn( getSsn() ) ;
		assign.setDob( getDob() ) ;
		assign.setServerTag( getServerTag() ) ;
		resetAll() ;
		setMessage( assign.serialize() ) ;
		if( null != getMessage() )
		{
			( new mit.mitid.comm.event.MessageEvent( this ) ).raise() ;
		}
	}
	
	private void HandleClearEvent( mit.mitid.event.ClearEvent e )
	{
		resetAll() ;
	}
	
	private void HandleFirstNameEvent( mit.mitid.event.FirstNameEvent e )
	{
		mit.mitid.event.FirstNameRaiser r = ( mit.mitid.event.FirstNameRaiser ) e.getSource() ;
		setFirstName( r.getFirstName() ) ;
	}
	
	private void HandleMiddleNameEvent( mit.mitid.event.MiddleNameEvent e )
	{
		mit.mitid.event.MiddleNameRaiser r = ( mit.mitid.event.MiddleNameRaiser ) e.getSource() ;
		setMiddleName( r.getMiddleName() ) ;
	}
	
	private void HandleLastNameEvent( mit.mitid.event.LastNameEvent e )
	{
		mit.mitid.event.LastNameRaiser r = ( mit.mitid.event.LastNameRaiser ) e.getSource() ;
		setLastName( r.getLastName() ) ;
	}
	
	private void HandleSsnEvent( mit.mitid.event.SsnEvent e )
	{
		mit.mitid.event.SsnRaiser r = ( mit.mitid.event.SsnRaiser ) e.getSource() ;
		setSsn( r.getSsn() ) ;
	}
	
	private void HandleDobEvent( mit.mitid.event.DobEvent e )
	{
		mit.mitid.event.DobRaiser r = ( mit.mitid.event.DobRaiser ) e.getSource() ;
		setDob( r.getDob() ) ;
	}
	
	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 ) )
		{
			search.deserialize( r.getResult() ) ;
			setServerTag( search.getServerTag() ) ;
		}
		else if( r.getResult().startsWith( mit.mitid.PROTOCOL.ASSIGNED ) )
		{
			assign.deserialize( r.getResult() ) ;
			setStatus( assign.getStatus() ) ;
			new mit.comm.event.DisplayResultEvent( this ).raise() ;
		}
	}
	
	public void addNotify()
	{
		super.addNotify() ;
		try
		{
			resetAll() ;
			getListenerAdapter().addHandled( mit.comm.event.ResultEvent.class ) ;
			getListenerAdapter().addHandled( mit.mitid.event.AssignEvent.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 ) ;
		}
		catch( Exception ex )
		{
			ex.printStackTrace() ;
		}
	}
}