001package jmri.jmrit.beantable.routetable;
002
003import jmri.InstanceManager;
004import jmri.Route;
005import javax.swing.*;
006import java.awt.*;
007import java.awt.event.ActionEvent;
008
009/**
010 * Edit frame for the Route Table.
011 *
012 * Split from {@link jmri.jmrit.beantable.RouteTableAction}
013 *
014 * @author Dave Duchamp Copyright (C) 2004
015 * @author Bob Jacobsen Copyright (C) 2007
016 * @author Simon Reader Copyright (C) 2008
017 * @author Pete Cressman Copyright (C) 2009
018 * @author Egbert Broerse Copyright (C) 2016
019 * @author Paul Bender Copyright (C) 2020
020 */
021public class RouteEditFrame extends AbstractRouteAddEditFrame {
022
023    private final String systemName;
024
025    public RouteEditFrame() {
026        this(Bundle.getMessage("TitleEditRoute"));
027    }
028
029    public RouteEditFrame(String systemName) {
030        this(Bundle.getMessage("TitleEditRoute"), systemName);
031    }
032
033    public RouteEditFrame(String name, String systemName) {
034        this(name,false,true, systemName);
035    }
036
037    public RouteEditFrame(String name, boolean saveSize, boolean savePosition, String systemName) {
038        super(name, saveSize, savePosition);
039        this.systemName = systemName;
040        initComponents();
041    }
042
043    @Override
044    public final void initComponents() {
045        super.initComponents();
046        _systemName.setText(systemName);
047        // identify the Route with this name if it already exists
048        String sName = _systemName.getText();
049        Route g = InstanceManager.getDefault(jmri.RouteManager.class).getBySystemName(sName);
050        if (g == null) {
051            sName = _userName.getText();
052            g = InstanceManager.getDefault(jmri.RouteManager.class).getByUserName(sName);
053            if (g == null) {
054                // Route does not exist, so cannot be edited
055                status1.setText(Bundle.getMessage("RouteAddStatusErrorNotFound"));
056                return;
057            }
058        }
059        // Route was found, make its system name not changeable
060        curRoute = g;
061        _systemName.setVisible(true);
062        _systemName.setText(sName);
063        _systemName.setEnabled(false);
064        nameLabel.setEnabled(true);
065        _autoSystemName.setVisible(false);
066        // deactivate this Route
067        curRoute.deActivateRoute();
068        // get information for this route
069        _userName.setText(g.getUserName());
070
071        setPageContent(g);
072
073        // begin with showing all Turnouts
074        // set up buttons and notes
075        status1.setText(Bundle.getMessage("RouteAddStatusInitial3", Bundle.getMessage("ButtonUpdate")));
076        status2.setText(Bundle.getMessage("RouteAddStatusInitial4", Bundle.getMessage("ButtonCancelEdit", Bundle.getMessage("ButtonEdit"))));
077        status2.setVisible(true);
078        setTitle(Bundle.getMessage("TitleEditRoute"));
079        editMode = true;
080    }
081
082    @Override
083    protected JPanel getButtonPanel() {
084        final JButton cancelEditButton = new JButton( // I18N for word sequence "Cancel Edit"
085            Bundle.getMessage("ButtonCancelEdit", Bundle.getMessage("ButtonEdit")));
086        final JButton deleteButton = new JButton(Bundle.getMessage("ButtonDelete") + " "
087            + Bundle.getMessage("BeanNameRoute")); // I18N "Delete Route"
088        final JButton updateButton = new JButton(Bundle.getMessage("ButtonUpdate"));
089        final JButton exportButton = new JButton(Bundle.getMessage("ButtonExport"));
090        // add Buttons panel
091        JPanel pb = new JPanel();
092        pb.setLayout(new FlowLayout(FlowLayout.TRAILING));
093        // CancelEdit button
094        pb.add(cancelEditButton);
095        cancelEditButton.addActionListener( e -> cancelEdit());
096        cancelEditButton.setToolTipText(Bundle.getMessage("TooltipCancelRoute"));
097        // Delete Route button
098        pb.add(deleteButton);
099        deleteButton.addActionListener( e -> deletePressed());
100        deleteButton.setToolTipText(Bundle.getMessage("TooltipDeleteRoute"));
101        // Update Route button
102        pb.add(updateButton);
103        updateButton.addActionListener((ActionEvent e1) -> updatePressed(false));
104        updateButton.setToolTipText(Bundle.getMessage("TooltipUpdateRoute"));
105        // Export button
106        pb.add(exportButton);
107        exportButton.addActionListener( e -> exportButtonPressed());
108        exportButton.setToolTipText(Bundle.getMessage("TooltipExportRoute"));
109
110        // Show the initial buttons, and hide the others
111        deleteButton.setVisible(true);
112        cancelEditButton.setVisible(true);
113        updateButton.setVisible(true);
114        exportButton.setVisible(true);
115        return pb;
116    }
117
118    /**
119     * Respond to the export button.
120     */
121    private void exportButtonPressed(){
122        new RouteExportToLogix(_systemName.getText()).export();
123        status1.setText(Bundle.getMessage("BeanNameRoute")
124                + "\"" + _systemName.getText() + "\" " +
125                Bundle.getMessage("RouteAddStatusExported") + " ("
126                + get_includedTurnoutList().size() +
127                Bundle.getMessage("Turnouts") + ", " +
128                get_includedSensorList().size() + " " + Bundle.getMessage("Sensors") + ")");
129        finishUpdate();
130        closeFrame();
131    }
132
133    /**
134     * Respond to the Delete button.
135     */
136    private void deletePressed() {
137        // route is already deactivated, just delete it
138        routeManager.deleteRoute(curRoute);
139
140        curRoute = null;
141        finishUpdate();
142        closeFrame();
143    }
144
145}