001    package market.stdform;
002    
003    import java.awt.Dimension;
004    import java.awt.GridBagConstraints;
005    import java.awt.GridBagLayout;
006    import java.awt.event.ActionListener;
007    
008    import javax.swing.JButton;
009    import javax.swing.JPanel;
010    
011    import market.SMarket;
012    import market.event.MarketEventAdapter;
013    import sale.Action;
014    import sale.ActionActionListener;
015    import sale.FormSheet;
016    import sale.FormSheetContentCreator;
017    import sale.SaleProcess;
018    import sale.SalesPoint;
019    
020    /**
021     * This FormSheet is used by the manager to open and close the market, announce the leisure-time
022     * and change the date to the next day.
023     */
024    public class FSManagerOpenClose extends FormSheet {
025    
026        JButton jb = new JButton();
027        private static String OPEN = "Feierabend ankündigen";
028        private static String TOBECLOSED = "Ankündigung zurücknehmen";
029    
030        public FSManagerOpenClose() {
031            super("Schließen", new FormSheetContentCreator() {public void createFormSheetContent(final FormSheet fs) {
032                fs.setComponent(fs.getComponent());
033            }}, false);
034            this.addContentCreator(new FormSheetContentCreator() {public void createFormSheetContent(final FormSheet fs) {
035                //define components
036                JPanel jpMain = new JPanel();
037                JPanel jpBigButton = new JPanel();
038                GridBagConstraints c = new GridBagConstraints();
039                GridBagLayout gridbag = new GridBagLayout();
040                //add components
041                jpMain.setLayout(gridbag);
042                    c.anchor = GridBagConstraints.CENTER;
043                gridbag.setConstraints(jpBigButton, c);
044                jb.setText(SMarket.isToBeClosed() ? TOBECLOSED : OPEN);
045                jb.setVisible(SMarket.isOpen());
046                jb.setPreferredSize(new Dimension(250, 100));
047                //add action listener if there is none yet
048                //(checking for action listeners prevents from adding them twice
049                //(This would happen when persistence file is loaded))
050                if (jb.getListeners(ActionListener.class).length == 0) {
051                    jb.addActionListener(new ActionActionListener(fs, new Action() {
052                        public void doAction(SaleProcess p, SalesPoint sp) {
053                            if (SMarket.isToBeClosed()) {
054                                SMarket.getTheMarket().setOpen(0);
055                                SMarket.fireMarketNotClosing();
056                            } else {
057                                SMarket.getTheMarket().setOpen(1);
058                            }
059                        }
060                    }));
061                }
062                jpBigButton.add(jb);
063                jpMain.add(jpBigButton);
064                fs.setComponent(jpMain);
065                removeAllButtons();
066                fs.addButton("Markt öffnen", ButtonIDs.BTN_START, null);
067                fs.addButton("Markt schließen", ButtonIDs.BTN_END, null);
068                fs.addButton("Zum nächsten Tag", ButtonIDs.BTN_NEXT, null);
069                fs.getButton(ButtonIDs.BTN_START).setEnabled(SMarket.hasTimeAdvanced());
070                fs.getButton(ButtonIDs.BTN_END).setEnabled(SMarket.isOpen());
071                fs.getButton(ButtonIDs.BTN_NEXT).setVisible(!SMarket.isOpen());
072            }});
073            SMarket.addEventListener(new MarketEventAdapter() {
074                public void notifyOnMarketClosing() {
075                    jb.setText(TOBECLOSED);
076                };
077    
078                public void notifyOnMarketNotClosing() {
079                    jb.setText(OPEN);
080                }
081    
082                public void marketClosed() {
083                    jb.setEnabled(false);
084                    jb.setVisible(false);
085                    getButton(ButtonIDs.BTN_END).setEnabled(false);
086                    getButton(ButtonIDs.BTN_NEXT).setVisible(true);
087                }
088    
089                public void marketOpened() {
090                    jb.setEnabled(true);
091                    jb.setVisible(true);
092                    jb.setText("Feierabend ankündigen");
093                    getButton(ButtonIDs.BTN_START).setEnabled(false);
094                    getButton(ButtonIDs.BTN_END).setEnabled(true);
095                    getButton(ButtonIDs.BTN_NEXT).setVisible(false);
096                }
097    
098                public void timeAdvanced() {
099                    getButton(ButtonIDs.BTN_START).setEnabled(true);
100                }
101    
102                public void offerEmpty(String s, int who) {
103                }
104    
105                public void workerInformationChanged() {
106                }
107            });
108        }
109    }
110