001package jmri.jmrix.roco.z21.messageformatters; 002 003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 004import jmri.jmrix.Message; 005import jmri.jmrix.roco.z21.Z21MessageFormatter; 006import jmri.jmrix.roco.z21.Z21Reply; 007 008/** 009 * Z21 LocoNet Tunnel Reply Formatter. 010 * 011 * @author Paul Bender Copyright (C) 2025 012 */ 013public class Z21LocoNetTunnelReplyFormatter implements Z21MessageFormatter { 014 015 @Override 016 public boolean handlesMessage(Message m) { 017 return m instanceof Z21Reply && 018 (((Z21Reply) m).getOpCode() == 0x00A0 || 019 ((Z21Reply) m).getOpCode() == 0x00A1 || 020 ((Z21Reply) m).getOpCode() == 0x00A2 ); 021 } 022 023 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage") 024 @Override 025 public String formatMessage(Message m) { 026 if(!handlesMessage(m)){ 027 throw new IllegalArgumentException("Message is not a Z21 LocoNet Tunnel Reply"); 028 } 029 switch (((Z21Reply) m).getOpCode()) { 030 case 0x00A0: 031 return Bundle.getMessage("Z21LocoNetRxReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString()); 032 case 0x00A1: 033 return Bundle.getMessage("Z21LocoNetTxReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString()); 034 default: 035 return Bundle.getMessage("Z21LocoNetLanReply", ((Z21Reply) m).getLocoNetMessage().toMonitorString()); 036 } 037 } 038 039}