001package jmri.jmrit.logixng.tools.swing;
002
003import java.util.ArrayList;
004import java.util.EventListener;
005import java.util.HashMap;
006import java.util.List;
007
008import javax.annotation.Nonnull;
009
010import jmri.jmrit.logixng.FemaleSocket;
011import jmri.InstanceManager;
012import jmri.jmrit.logixng.*;
013
014/**
015 * Editor of ConditionalNG
016 *
017 * @author Daniel Bergqvist 2018
018 */
019public class ConditionalNGEditor extends TreeEditor {
020
021    protected final ConditionalNG _conditionalNG;
022
023
024    /**
025     * Maintain a list of listeners -- normally only one.
026     */
027    private final List<ConditionalNGEventListener> listenerList = new ArrayList<>();
028
029    /**
030     * This contains a list of commands to be processed by the listener
031     * recipient.
032     */
033    final HashMap<String, String> logixNGData = new HashMap<>();
034
035    /**
036     * Construct a ConditionalEditor.
037     * <p>
038     * This is used by JmriUserPreferencesManager since it tries to create an
039     * instance of this class.
040     */
041    public ConditionalNGEditor() {
042        super(InstanceManager.getDefault(DigitalActionManager.class).createFemaleSocket(null, new FemaleSocketListener(){
043            @Override
044            public void connected(FemaleSocket socket) {
045                throw new UnsupportedOperationException("Not supported");
046            }
047
048            @Override
049            public void disconnected(FemaleSocket socket) {
050                throw new UnsupportedOperationException("Not supported");
051            }
052        }, "A"),
053                EnableClipboard.EnableClipboard,
054                EnableRootRemoveCutCopy.EnableRootRemoveCutCopy,
055                EnableRootPopup.EnableRootPopup,
056                EnableExecuteEvaluate.EnableExecuteEvaluate,
057                EnableChangeUsernameForRoot.EnableChangeUsername
058        );
059
060        _conditionalNG = null;
061    }
062
063    /**
064     * Construct a ConditionalEditor.
065     *
066     * @param conditionalNG the ConditionalNG to be edited
067     */
068    public ConditionalNGEditor(@Nonnull ConditionalNG conditionalNG) {
069        super(conditionalNG.getFemaleSocket(),
070                EnableClipboard.EnableClipboard,
071                EnableRootRemoveCutCopy.EnableRootRemoveCutCopy,
072                EnableRootPopup.EnableRootPopup,
073                EnableExecuteEvaluate.EnableExecuteEvaluate,
074                EnableChangeUsernameForRoot.EnableChangeUsername
075        );
076
077        _conditionalNG = conditionalNG;
078
079        if (_conditionalNG.getUserName() == null) {
080            ConditionalNGEditor.this.setTitle(
081                    Bundle.getMessage("TitleEditConditionalNG",
082                            _conditionalNG.getSystemName()));
083        } else {
084            ConditionalNGEditor.this.setTitle(
085                    Bundle.getMessage("TitleEditConditionalNG2",
086                            _conditionalNG.getSystemName(),
087                            _conditionalNG.getUserName()));
088        }
089    }
090
091    /** {@inheritDoc} */
092    @Override
093    public void dispose() {
094        logixNGData.clear();
095        logixNGData.put("Finish", _conditionalNG.getSystemName());  // NOI18N
096        fireLogixNGEvent();
097
098        super.dispose();
099    }
100
101    public void addLogixNGEventListener(ConditionalNGEventListener listener) {
102        listenerList.add(listener);
103    }
104
105    /**
106     * Notify the listeners to check for new data.
107     */
108    void fireLogixNGEvent() {
109        for (ConditionalNGEventListener l : listenerList) {
110            l.conditionalNGEventOccurred();
111        }
112    }
113
114
115    public interface ConditionalNGEventListener extends EventListener {
116
117        public void conditionalNGEventOccurred();
118    }
119
120
121//    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ConditionalNGEditor.class);
122
123}