001package jmri.jmrix.roco.z21.messageformatters; 002 003import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 004import jmri.DccLocoAddress; 005import jmri.jmrix.Message; 006import jmri.jmrix.roco.z21.Z21MessageFormatter; 007import jmri.jmrix.roco.z21.Z21Reply; 008 009/** 010 * Formatter for RailCom replies. 011 * 012 * @author Paul Bender Copyright (C) 2025 013 */ 014public class Z21RailComReplyFormatter implements Z21MessageFormatter { 015 016 @Override 017 public boolean handlesMessage(Message m) { 018 return m instanceof Z21Reply && ((Z21Reply) m).getOpCode() == 0x0088; 019 } 020 021 @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "cast is checked in handlesMessage") 022 @Override 023 public String formatMessage(Message m) { 024 if (!handlesMessage(m)) { 025 throw new IllegalArgumentException("Message is not a RailCom reply"); 026 } 027 Z21Reply r = (Z21Reply) m; 028 int entries = r.getNumRailComDataEntries(); 029 StringBuilder datastring = new StringBuilder(); 030 for(int i = 0; i < entries ; i++) { 031 DccLocoAddress address = r.getRailComLocoAddress(i); 032 int rcvCount = r.getRailComRcvCount(i); 033 int errorCount = r.getRailComErrCount(i); 034 int speed = r.getRailComSpeed(i); 035 int options = r.getRailComOptions(i); 036 int qos = r.getRailComQos(i); 037 datastring.append(Bundle.getMessage("Z21_RAILCOM_DATA",address,rcvCount,errorCount,options,speed,qos)); 038 datastring.append("\n"); 039 } 040 return Bundle.getMessage("Z21_RAILCOM_DATACHANGED",entries,new String(datastring)); 041 } 042 043}