001    package market;
002    
003    import java.util.Calendar;
004    
005    import javax.swing.JOptionPane;
006    
007    import market.stdform.ButtonIDs;
008    import market.stdform.FSCheckable;
009    import market.stdform.FSTime;
010    import sale.Action;
011    import sale.FormSheet;
012    import sale.FormSheetContentCreator;
013    import sale.SaleProcess;
014    import sale.SalesPoint;
015    
016    /**
017     * The tiny window in which one can set the market's time.
018     */
019    public class SPTime extends SalesPoint {
020    
021        public SPTime() {
022            super("Zeitsimulation");
023        }
024    
025        /**
026         * @return <code>true</code>, so this SalesPoint can always be closed.
027         */
028        public boolean onCanQuit() {
029            return true;
030        }
031    
032        /**
033         * Creates and returns the default FormSheet.
034         * @return the default FormSheet.
035         */
036        public FormSheet getDefaultFormSheet() {
037            final FSCheckable fsc = new FSCheckable(new FSTime());
038            fsc.addContentCreator(new FormSheetContentCreator() {
039                public void createFormSheetContent(final FormSheet fs) {
040                    fs.getButton(ButtonIDs.BTN_OK).setAction(new Action() {
041                        public void doAction(SaleProcess p, SalesPoint sp) {
042                            if (fsc.checkTextFields(FSCheckable.ALL_ERRORMESSAGES_AT_ONCE, false)) {
043                                String sDate = fsc.getEntry(1);
044                                Calendar dSet = Conversions.stringToCalendar(sDate);
045                                Calendar today = SMarket.getTime();
046                                if (!dSet.after(today)) {
047                                    JOptionPane.showMessageDialog(fs.getComponent(),
048                                            "Es wird ein künftiges Datum erwartet.", "Fehler", 0);
049                                } else {
050                                    SMarket.setTime(dSet);
051                                    closeTime();
052                                }
053                            }
054                        }
055                    });
056                }});
057            return fsc;
058        }
059    
060        /**
061         * Closes this SalesPoint.
062         */
063        private void closeTime() {
064            //This is written as an extra method because it uses <this>, but it is called from within
065            //an anonymous inner class
066            SMarket.getTheShop().removeSalesPoint(this);
067        }
068    }