001package jmri.jmrix.can.cbus;
002
003import java.util.Vector;
004
005import jmri.implementation.*;
006import jmri.CommandStation;
007import jmri.ConsistManager.EnableListener;
008
009/**
010 * The CBUS Consist Manager which uses the NmraConsist class for
011 * the consists it builds. This implementation just tracks the
012 * consist via a table of {@link jmri.implementation.DccConsist} objects
013 * that handle the actual operations.
014 *
015 * @author Andrew Crosland Copyright (C) 2022
016 */
017public class CbusConsistManager extends NmraConsistManager implements EnableListener {
018
019    public CbusConsistManager(CommandStation cs) {
020        super(cs);
021    }
022
023    /**
024     * Can this consist manager be disabled?
025     * 
026     * @return true if the manager can be disabled, false otherwise
027     */
028    @Override
029    public boolean canBeDisabled() {
030        return true;
031    }
032
033    // per-instance, listeners must not be shared between connections
034    protected final Vector<EnableListener> enableListeners = new Vector<>();
035    protected boolean _enabled = false;
036    
037    /**
038     * Register a listener that is called if this manager is enabled or disabled.
039     * @param listener the listener
040     */
041    @Override
042    public void registerEnableListener(EnableListener listener) {
043        // add only if not already registered
044        if (listener == null) {
045            throw new java.lang.NullPointerException();
046        }
047        if (!enableListeners.contains(listener)) {
048            enableListeners.addElement(listener);
049        }
050    }
051
052    /**
053     * Unregister a listener that is called if this manager is enabled or disabled.
054     * @param listener the listener
055     */
056    @Override
057    public void unregisterEnableListener(EnableListener listener) {
058        if (enableListeners.contains(listener)) {
059            enableListeners.removeElement(listener);
060        }
061    }
062
063    /**
064     * Check if this manager is enabled
065     * @return true if enabled
066     */
067    @Override
068    public boolean isEnabled() {
069        return _enabled;
070    }
071
072    /**
073     * A listener that listens to whether the manager is enabled or disabled.
074     * 
075     * Call each listeners setEnabled() method.
076     * 
077     * @param value true to enable
078     */
079    @Override
080    public void setEnabled(boolean value) {
081        _enabled = value;
082        for (int i = 0; i < enableListeners.size(); i++) {
083            enableListeners.elementAt(i).setEnabled(value);
084        }
085    }
086
087}