001package jmri.jmrit.ctc.ctcserialdata;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import jmri.*;
006import jmri.jmrit.ctc.*;
007
008/**
009 * This describes a single line of Call On data.  The list of call on rules
010 * for each OS section are in the _mCO_GroupingsList variable in {@link CodeButtonHandlerData}.
011 *
012 * During panel loading, the switch indicator names are saved as strings.  Once all of the
013 * data is loaded, the NBHSensors are copied from the related CodeButtonHandlerData.
014 * @author Dave Sand Copyright (C) 2020
015 */
016public class CallOnData {
017    public NBHSignal _mExternalSignal;
018    public String _mSignalFacingDirection;
019    public String _mSignalAspectToDisplay;
020    public NBHSensor _mCalledOnExternalSensor;
021    public NamedBeanHandle<Block> _mExternalBlock;
022    public ArrayList<NBHSensor> _mSwitchIndicators;      // Up to 6 entries
023    public ArrayList<String> _mSwitchIndicatorNames;     // Temporary names during XML loading
024
025    public CallOnData() {
026    }
027
028    @Override
029    public String toString() {
030        String formattedString = String.format("%s,%s,%s,%s,%s",
031                _mExternalSignal != null ? _mExternalSignal.getHandleName() : "",
032                _mSignalFacingDirection != null ? _mSignalFacingDirection : "",
033                _mSignalAspectToDisplay != null ? _mSignalAspectToDisplay : "",
034                _mCalledOnExternalSensor != null ? _mCalledOnExternalSensor.getHandleName() : "",
035                _mExternalBlock != null ? _mExternalBlock.getName() : "");
036        StringBuilder buildString = new StringBuilder(formattedString);
037        _mSwitchIndicators.forEach(sw -> {
038            buildString.append(",");
039            buildString.append(sw.getHandleName());
040        });
041        return buildString.toString();
042    }
043}