001    package org.cocome.tradingsystem.testdriver;
002    
003    import javax.jms.JMSException;
004    import javax.jms.TopicSubscriber;
005    
006    import org.cocome.tradingsystem.cashdeskline.events.CashAmountEnteredEvent;
007    import org.cocome.tradingsystem.cashdeskline.events.ChangeAmountCalculatedEvent;
008    import org.cocome.tradingsystem.cashdeskline.events.CreditCardScanFailedEvent;
009    import org.cocome.tradingsystem.cashdeskline.events.ExpressModeDisabledEvent;
010    import org.cocome.tradingsystem.cashdeskline.events.ExpressModeEnabledEvent;
011    import org.cocome.tradingsystem.cashdeskline.events.InvalidCreditCardEvent;
012    import org.cocome.tradingsystem.cashdeskline.events.ProductBarcodeNotValidEvent;
013    import org.cocome.tradingsystem.cashdeskline.events.RunningTotalChangedEvent;
014    import org.cocome.tradingsystem.cashdeskline.events.SaleStartedEvent;
015    import org.cocome.tradingsystem.cashdeskline.events.SaleSuccessEvent;
016    import org.cocome.tradingsystem.systests.interfaces.IUserDisplay;
017    
018    /**
019     * Glue code for the user display.
020     * 
021     * @author Benjamin Hummel
022     * @author $Author: hummel $
023     * @version $Rev: 63 $
024     * @levd.rating GREEN Rev: 63
025     */
026    public class UserDisplay extends UpdateReceiver implements IUserDisplay {
027    
028            /** Constructor. */
029            public UserDisplay(TopicSubscriber subscriber) throws JMSException {
030                    super(subscriber, RunningTotalChangedEvent.class,
031                                    CashAmountEnteredEvent.class,
032                                    ChangeAmountCalculatedEvent.class,
033                                    ExpressModeDisabledEvent.class, ExpressModeEnabledEvent.class,
034                                    InvalidCreditCardEvent.class, CreditCardScanFailedEvent.class,
035                                    ProductBarcodeNotValidEvent.class, SaleSuccessEvent.class,
036                                    SaleStartedEvent.class);
037            }
038    
039            /** {@inheritDoc} */
040            public boolean isMessageForExpressModeShown() {
041                    expectMessage(ExpressModeEnabledEvent.class);
042                    return getLastRelevantMessage() instanceof ExpressModeEnabledEvent;
043            }
044    
045            /** {@inheritDoc} */
046            public boolean isMessageForInvalidBarcodeShown() {
047                    expectMessage(ProductBarcodeNotValidEvent.class);
048                    return getLastRelevantMessage() instanceof ProductBarcodeNotValidEvent;
049            }
050    
051            /** {@inheritDoc} */
052            public boolean isPriceShown(int expectedPrice) {
053                    expectMessage(RunningTotalChangedEvent.class);
054                    if (getLastRelevantMessage() instanceof RunningTotalChangedEvent) {
055                            int price = (int) Math
056                                            .round(((RunningTotalChangedEvent) getLastRelevantMessage())
057                                                            .getProductPrice() * 100);
058                            return price == expectedPrice;
059                    }
060                    return false;
061            }
062    
063            /** {@inheritDoc} */
064            public boolean isProductNameShown(String expectedName) {
065                    expectMessage(RunningTotalChangedEvent.class);
066                    if (getLastRelevantMessage() instanceof RunningTotalChangedEvent) {
067                            String name = ((RunningTotalChangedEvent) getLastRelevantMessage())
068                                            .getProductName();
069                            return expectedName.equals(name);
070                    }
071                    return false;
072            }
073    
074            /** {@inheritDoc} */
075            public boolean isMessageForCreditCardNotPossibleShown() {
076                    // FIXME: this is currently not supported by the implementation
077                    return false;
078            }
079    
080            /** {@inheritDoc} */
081            public boolean isMessageForCreditCardPaymentSuccessfulShown() {
082                    expectMessage(SaleSuccessEvent.class);
083                    return getLastRelevantMessage() instanceof SaleSuccessEvent;
084            }
085    
086            /** {@inheritDoc} */
087            public boolean isMessageForCreditCardValidationFailedShown() {
088                    expectMessage(InvalidCreditCardEvent.class);
089                    return getLastRelevantMessage() instanceof InvalidCreditCardEvent;
090            }
091    }