001package jmri.jmrix.loconet.logixng.swing;
002
003import java.awt.Color;
004import java.util.*;
005
006import javax.annotation.CheckForNull;
007import javax.annotation.Nonnull;
008import javax.swing.*;
009
010import jmri.*;
011import jmri.jmrit.logixng.Base;
012import jmri.jmrit.logixng.DigitalActionManager;
013import jmri.jmrit.logixng.MaleSocket;
014import jmri.jmrit.logixng.actions.swing.AbstractDigitalActionSwing;
015import jmri.jmrix.loconet.logixng.ActionClearSlots;
016import jmri.jmrix.loconet.LocoNetSystemConnectionMemo;
017
018/**
019 * Configures an ExpressionTurnout object with a Swing JPanel.
020 * 
021 * @author Daniel Bergqvist Copyright 2020
022 */
023public class ActionClearSlotsSwing extends AbstractDigitalActionSwing {
024
025    private JComboBox<LocoNetConnection> _locoNetConnection;
026    
027    @Override
028    protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPanel) {
029        if ((object != null) && !(object instanceof ActionClearSlots)) {
030            throw new IllegalArgumentException("object must be an ActionClearSlots but is a: "+object.getClass().getName());
031        }
032        
033        ActionClearSlots action = (ActionClearSlots)object;
034        
035        panel = new JPanel();
036        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
037        
038        panel.add(new JLabel(Bundle.getMessage("ActionClearSlotsInfo1")));
039        panel.add(new JLabel(Bundle.getMessage("ActionClearSlotsInfo2")));
040        panel.add(new JLabel(Bundle.getMessage("ActionClearSlotsInfo3")));
041        panel.add(new JLabel(Bundle.getMessage("ActionClearSlotsInfo4")));
042        panel.add(new JLabel(Bundle.getMessage("ActionClearSlotsInfo5")));
043        
044        JPanel queryPanel = new JPanel();
045        queryPanel.setBorder(BorderFactory.createLineBorder(Color.black));
046        
047        JPanel locoNetPanel = new JPanel();
048        locoNetPanel.add(new JLabel(Bundle.getMessage("LocoNetConnection")));
049        
050        _locoNetConnection = new JComboBox<>();
051        List<LocoNetSystemConnectionMemo> systemConnections =
052                jmri.InstanceManager.getList(LocoNetSystemConnectionMemo.class);
053        for (LocoNetSystemConnectionMemo connection : systemConnections) {
054            LocoNetConnection c = new LocoNetConnection(connection);
055            _locoNetConnection.addItem(c);
056            if ((action != null) && (action.getMemo() == connection)) {
057                _locoNetConnection.setSelectedItem(c);
058            }
059        }
060        locoNetPanel.add(_locoNetConnection);
061        
062        panel.add(locoNetPanel);
063    }
064    
065    /** {@inheritDoc} */
066    @Override
067    public boolean validate(@Nonnull List<String> errorMessages) {
068        return true;
069    }
070    
071    /** {@inheritDoc} */
072    @Override
073    public MaleSocket createNewObject(@Nonnull String systemName, @CheckForNull String userName) {
074        LocoNetSystemConnectionMemo memo =
075                _locoNetConnection.getItemAt(_locoNetConnection.getSelectedIndex())._memo;
076        
077        ActionClearSlots action = new ActionClearSlots(systemName, userName, memo);
078        updateObject(action);
079        
080        return InstanceManager.getDefault(DigitalActionManager.class).registerAction(action);
081    }
082    
083    /** {@inheritDoc} */
084    @Override
085    public void updateObject(@Nonnull Base object) {
086        if (! (object instanceof ActionClearSlots)) {
087            throw new IllegalArgumentException("object must be an ExpressionTurnout but is a: "+object.getClass().getName());
088        }
089        
090        ActionClearSlots action = (ActionClearSlots)object;
091        
092        action.setMemo(_locoNetConnection.getItemAt(_locoNetConnection.getSelectedIndex())._memo);
093    }
094    
095    /** {@inheritDoc} */
096    @Override
097    public String toString() {
098        return Bundle.getMessage("ActionClearSlots_Short");
099    }
100    
101    @Override
102    public void dispose() {
103    }
104    
105    
106    
107    private static class LocoNetConnection {
108        
109        private LocoNetSystemConnectionMemo _memo;
110        
111        public LocoNetConnection(LocoNetSystemConnectionMemo memo) {
112            _memo = memo;
113        }
114        
115        @Override
116        public String toString() {
117            return _memo.getUserName();
118        }
119    }
120    
121//    private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ActionClearSlotsSwing.class);
122
123}