001package jmri.jmrit.operations.trains.tools;
002
003import java.awt.Dimension;
004import java.awt.GridBagLayout;
005import java.util.List;
006
007import javax.swing.*;
008
009import org.slf4j.Logger;
010import org.slf4j.LoggerFactory;
011
012import jmri.InstanceManager;
013import jmri.jmrit.operations.OperationsFrame;
014import jmri.jmrit.operations.OperationsPanel;
015import jmri.jmrit.operations.routes.*;
016import jmri.jmrit.operations.setup.Control;
017import jmri.jmrit.operations.trains.Train;
018import jmri.jmrit.operations.trains.TrainManager;
019
020/**
021 * Change Departure Time frame for operations.
022 *
023 * @author Bob Jacobsen Copyright (C) 2001
024 * @author Daniel Boudreau Copyright (C) 2013
025 */
026public class ChangeDepartureTimesFrame extends OperationsFrame {
027
028    // major buttons
029    javax.swing.JButton changeButton = new javax.swing.JButton(Bundle.getMessage("Change"));
030
031    // combo boxes
032    javax.swing.JComboBox<Integer> hourBox = new javax.swing.JComboBox<>();
033
034    javax.swing.JCheckBox routesCheckBox = new javax.swing.JCheckBox(Bundle.getMessage("ModifyRouteTimes"));
035
036    public ChangeDepartureTimesFrame() {
037        // general GUI config
038
039        getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
040
041        // load hour combobox
042        for (int i = 1; i < 24; i++) {
043            hourBox.addItem(i);
044        }
045
046        OperationsPanel.padComboBox(hourBox, 3);
047
048        // row 2
049        JPanel pHour = new JPanel();
050        pHour.setLayout(new GridBagLayout());
051        pHour.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("SelectHours")));
052        addItem(pHour, hourBox, 0, 0);
053        addItem(pHour, routesCheckBox, 1, 0);
054
055        // row 4
056        JPanel pButton = new JPanel();
057        pButton.add(changeButton);
058
059        getContentPane().add(pHour);
060        getContentPane().add(pButton);
061
062        // add help menu to window
063        addHelpMenu("package.jmri.jmrit.operations.Operations_ChangeTrainDepartureTimes", true); // NOI18N
064
065        setTitle(Bundle.getMessage("TitleChangeDepartureTime"));
066
067        // setup buttons
068        addButtonAction(changeButton);
069        
070        initMinimumSize(new Dimension(Control.panelWidth500, Control.panelHeight200));
071    }
072
073    @Override
074    public void buttonActionPerformed(java.awt.event.ActionEvent ae) {
075        if (ae.getSource() == changeButton) {
076            log.debug("change button activated");
077            TrainManager trainManager = InstanceManager.getDefault(TrainManager.class);
078            List<Train> trains = trainManager.getTrainsByIdList();
079            for (Train train : trains) {
080                train.setDepartureTime(adjustHour(train.getDepartureTimeHour()), train.getDepartureTimeMinute());
081            }
082            // now check every route to see if there are any departure times that need
083            // adjustment
084            if (routesCheckBox.isSelected()) {
085                RouteManager routeManager = InstanceManager.getDefault(RouteManager.class);
086                List<Route> routes = routeManager.getRoutesByNameList();
087                for (Route route : routes) {
088                    for (RouteLocation rl : route.getLocationsBySequenceList()) {
089                        if (!rl.getDepartureTime().equals(RouteLocation.NONE))
090                            rl.setDepartureTime(adjustHour(rl.getDepartureTimeHour()), rl.getDepartureTimeMinute());
091                    }
092                }
093            }
094        }
095    }
096
097    private String adjustHour(String time) {
098        int hour = (int) hourBox.getSelectedItem() + Integer.parseInt(time);
099        if (hour > 23) {
100            hour = hour - 24;
101        }
102        return Integer.toString(hour);
103    }
104
105    private final static Logger log = LoggerFactory.getLogger(ChangeDepartureTimesFrame.class);
106}