001package jmri.jmrix.lenz.messageformatters;
002
003import jmri.jmrix.Message;
004import jmri.jmrix.lenz.LenzCommandStation;
005import jmri.jmrix.lenz.XNetConstants;
006import jmri.jmrix.lenz.XNetMessage;
007import jmri.jmrix.lenz.XPressNetMessageFormatter;
008
009/**
010 * Format requests to add a locomotive to a MulitUnit consist
011 *
012 * @author Paul Bender Copyright (C) 2024
013 */
014public class XNetRequestMultiUnitAddLocoMessageFormatter implements XPressNetMessageFormatter {
015    @Override
016    public boolean handlesMessage(Message m) {
017        return m instanceof XNetMessage &&
018                m.getElement(0) == XNetConstants.LOCO_OPER_REQ &&
019                (m.getElement(1) == XNetConstants.LOCO_ADD_MULTI_UNIT_REQ ||
020                        m.getElement(1) == (XNetConstants.LOCO_ADD_MULTI_UNIT_REQ | 0x01) );
021    }
022
023    @Override
024    public String formatMessage(Message m) {
025        if(!handlesMessage(m)) {
026            throw new IllegalArgumentException( "XNetRequestMultiUnitAddLocoMessageFormatter: message type not supported");
027        }
028        return Bundle.getMessage(m.getElement(1) == XNetConstants.LOCO_ADD_MULTI_UNIT_REQ ? "XNetMessageAddToConsistDirNormalRequest":"XNetMessageAddToConsistDirReverseRequest",
029                           LenzCommandStation.calcLocoAddress(m.getElement(2), m.getElement(3)),
030                           m.getElement(4));
031    }
032}