package org.yamcs.xtce; import java.nio.ByteOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class IntegerDataEncoding extends DataEncoding { private static final long serialVersionUID = 200805131551L; static Logger log=LoggerFactory.getLogger(IntegerDataEncoding.class.getName()); Calibrator defaultCalibrator=null; public enum Encoding {unsigned, twosComplement, onesComplement, signMagnitude, BCD, packedBCD, string}; Encoding encoding=Encoding.unsigned; StringDataEncoding stringEncoding=null; /** * IntegerDataEncoding of type {@link IntegerDataEncoding.Encoding#unsigned} * @param sizeInBits * @param byteOrder */ public IntegerDataEncoding(int sizeInBits, ByteOrder byteOrder) { super(sizeInBits, byteOrder); } public IntegerDataEncoding(int sizeInBits) { super(sizeInBits, ByteOrder.BIG_ENDIAN); } /** * Integer data encoded as a string. * @param name * @param sde describes how the string is encoded. */ public IntegerDataEncoding(String name, StringDataEncoding sde) { super(sde.getSizeInBits()); encoding = Encoding.string; stringEncoding = sde; } public Encoding getEncoding() { return encoding; } public StringDataEncoding getStringEncoding() { return stringEncoding; } public Calibrator getDefaultCalibrator() { return defaultCalibrator; } public void setEncoding(Encoding encoding) { this.encoding = encoding; } public void setDefaultCalibrator(Calibrator calibrator) { this.defaultCalibrator = calibrator; } @Override public String toString() { if( stringEncoding == null ) { return "IntegerDataEncoding(sizeInBits:"+sizeInBits+", encoding:"+encoding+", defaultCalibrator:"+defaultCalibrator+" byteOrder:"+byteOrder+")"; } else { return "IntegerDataEncoding(StringEncoding: "+stringEncoding+" defaultCalibrator:"+defaultCalibrator+" byteOrder:"+byteOrder+")"; } } @Override public Object parseString(String stringValue) { if(encoding == Encoding.string) return stringValue; if(sizeInBits>32) { return Long.decode(stringValue); } else { return Long.decode(stringValue).intValue(); } } }