1 package au.gov.amsa.ais.message; 2 3 import au.gov.amsa.ais.AisExtractor; 4 import au.gov.amsa.ais.AisExtractorFactory; 5 import au.gov.amsa.ais.AisMessage; 6 import au.gov.amsa.ais.AisMessageType; 7 import au.gov.amsa.ais.HasMmsi; 8 import au.gov.amsa.ais.Util; 9 10 public abstract class AbstractAisBStaticDataReport implements AisMessage, HasMmsi { 11 12 public final static int PART_NUMBER_A = 0; 13 public final static int PART_NUMBER_B = 1; 14 15 private final AisExtractor extractor; 16 private final String source; 17 private final int messageId; 18 private final int repeatIndicator; 19 private final int mmsi; 20 private final int partNumber; 21 22 public static int extractPartNumber(AisExtractorFactory factory, String message, int padBits) { 23 AisExtractor extractor = factory.create(message, 50, padBits); 24 25 return extractor.getValue(38, 40); 26 } 27 28 protected AbstractAisBStaticDataReport(int partNumber, 29 AisExtractorFactory factory, 30 String source, 31 AisExtractor extractor) { 32 this.source = source; 33 this.extractor = extractor; 34 messageId = extractor.getMessageId(); 35 Util.checkMessageId(getMessageId(), AisMessageType.STATIC_DATA_REPORT); 36 repeatIndicator = extractor.getValue(6, 8); 37 mmsi = extractor.getValue(8, 38); 38 this.partNumber = partNumber; 39 } 40 41 protected AisExtractor getExtractor() { 42 return extractor; 43 } 44 45 @Override 46 public int getMessageId() { 47 return messageId; 48 } 49 50 public int getRepeatIndicator() { 51 return repeatIndicator; 52 } 53 54 @Override 55 public int getMmsi() { 56 return mmsi; 57 } 58 59 public int getPartNumber() { 60 return partNumber; 61 } 62 63 @Override 64 public String getSource() { 65 return source; 66 } 67 }