001    package market;
002    
003    import market.event.MarketEventListener;
004    import market.resource.IconSetter;
005    import market.stdform.FSEmpty;
006    import market.stdform.FSWorkerDefault;
007    import sale.FormSheet;
008    import sale.JDisplayFrame;
009    import sale.SalesPoint;
010    import sale.events.FormSheetEvent;
011    import data.ooimpl.DataBasketImpl;
012    
013    /**
014     * A SalesPoint that can react to MarketEvents.
015     */
016    public class SPListenable extends SalesPoint implements MarketEventListener {
017    
018        /**
019             * ID for serialization.
020             */
021            private static final long serialVersionUID = 5774706836031417066L;
022    
023            /**
024         * @param s the SalesPoints name.
025         */
026        public SPListenable(String s) {
027            super(s);
028            attach(new DataBasketImpl());
029        }
030    
031        /**
032         * @return the default FormSheet.
033         */
034        protected FormSheet getDefaultFormSheet() {
035            return new FSEmpty();
036        }
037    
038        /**
039         * Sets the image icon when a SalesPoint is opened.
040         * @param e the fired Event
041         */
042        public void formSheetSet(FormSheetEvent e) {
043            super.formSheetSet(e);
044            IconSetter.setIcon((JDisplayFrame)getDisplay());
045        }
046    
047        /**
048         * Sets SalesPoint's icon after it is loaded from persistence file.
049         */
050        public void resume() {
051            super.resume();
052            IconSetter.setIcon((JDisplayFrame)getDisplay());
053        }
054    
055        /**
056         * @return <code>true</code> if no SaleProcess is running, otherwise <code>false</code>.
057         * This forces the user to quit the SaleProcess before he closes the SalesPoint.
058         */
059        protected boolean onCanQuit() {
060            return getCurrentProcess() == null;
061        }
062    
063        /**
064         * Reaction on event: The market is about to close.
065         */
066        public void notifyOnMarketClosing() {
067            getDisplay().getFormSheet().setCaption(SMarket.MARKET_CLOSES_SHORT);
068        }
069    
070        /**
071         * Reaction en event: The market isn't about to close anymore.
072         */
073        public void notifyOnMarketNotClosing() {
074            getDisplay().getFormSheet().setCaption(SMarket.MARKET_CLOSES_NOT);
075        }
076    
077        /**
078         * Reaction on event: The market has just closed.
079         */
080        public void marketClosed() {
081            getDisplay().getFormSheet().setCaption(SMarket.MARKET_CLOSED);
082        }
083    
084        /**
085         * Reaction on event: The market has just opened.
086         */
087        public void marketOpened() {
088            getDisplay().getFormSheet().setCaption(SMarket.MARKET_OPENED);
089        }
090    
091        /**
092         * Reaction on event: The time has advanced.
093         */
094        public void timeAdvanced() {
095        }
096    
097        /**
098         * Reaction on event: A new order for workers arrived or a worker logged on.
099         */
100        public void workerInformationChanged(){
101            if(this.getCurrentProcess() instanceof SProcessWorker){
102                if(this.getDisplay().getFormSheet() instanceof FSWorkerDefault){
103                    ((SProcessWorker)this.getCurrentProcess()).getInitialGate();
104                }
105            }
106        }
107    }