001    package videoautomat.transition;
002    
003    import sale.Gate;
004    import sale.SaleProcess;
005    import sale.SalesPoint;
006    import sale.Transition;
007    import users.User;
008    import users.stdforms.LogOnForm;
009    import videoautomat.SaleProcessLogOn;
010    
011    /**
012     * a <code>Transition</code> that proves the selected name and password and with success leads to the
013     * {@link SaleProcessLogOn#getMainGate()}, otherwise it returns the
014     * {@link SaleProcessLogOn#getFaultGate()}.
015     * 
016     * @author Alexander Herrmann
017     *
018     */
019    public class LogOnTransition implements Transition {
020        
021        private LogOnForm lof;
022        
023        /**
024         * Constructor for referencing the <code>LogOnForm</code>
025         * @param lof
026         */
027        public LogOnTransition(LogOnForm lof)
028        {
029            this.lof = lof;
030        }
031        
032        /**
033         * Proves the user and its password. If successful registeres user, puts user to
034         * <code>ProcessContext</code> and redirects to {@link SaleProcessLogOn#getMainGate()}.
035         * Otherwise returns to {@link SaleProcessLogOn#getFaultGate()}.
036         * @param sp - the current <code>SaleProcess</code>
037         * @param user - the current <code>User</code>
038         */
039        public Gate perform(SaleProcess sp, User user) {
040            
041            SaleProcessLogOn processLogOn = (SaleProcessLogOn) sp;
042            lof.ok();
043            User user_current = lof.getResult();
044            
045            if(user_current != null)
046            {
047                ((SalesPoint) processLogOn.getContext()).attach(user_current);
048                return processLogOn.getMainGate();
049            }
050            
051            return processLogOn.getFaultGate();
052        }
053    
054    }