View Javadoc
1   package au.gov.amsa.ais.message;
2   
3   import com.google.common.annotations.VisibleForTesting;
4   import com.google.common.base.Optional;
5   
6   import au.gov.amsa.ais.AisExtractor;
7   import au.gov.amsa.ais.AisExtractorFactory;
8   import au.gov.amsa.ais.Util;
9   
10  public class AisBStaticDataReportPartA extends AbstractAisBStaticDataReport {
11  
12  	private final static int MESSAGE_LENGTH = 160;
13  	
14  	private final static String NAME_NOT_AVAILABLE = "@@@@@@@@@@@@@@@@@@@@";
15  	
16      private final Optional<String> name;
17  
18      public AisBStaticDataReportPartA(String message, int padBits) {
19          this(message, null, padBits);
20      }
21  
22      public AisBStaticDataReportPartA(String message, String source, int padBits) {
23          this(Util.getAisExtractorFactory(), message, source, padBits);
24      }
25  
26      public AisBStaticDataReportPartA(AisExtractorFactory factory, String message, String source,
27              int padBits) {
28      	super(PART_NUMBER_A, 
29      		  factory, 
30      		  source, 
31      		  factory.create(message, MESSAGE_LENGTH, padBits));
32      	
33          name = extractName(getExtractor());
34      }
35      
36      @VisibleForTesting
37      static Optional<String> extractName(AisExtractor extractor) {
38      	String value = extractor.getString(40, 160);
39      	if(NAME_NOT_AVAILABLE.contentEquals(value)) {
40      		return Optional.absent();
41      	} else {
42      		return Optional.of(value);
43      	}
44      }
45  
46      public Optional<String> getName() {
47          return name;
48      }
49  
50      @Override
51      public String toString() {
52          StringBuilder builder = new StringBuilder();
53          builder.append("AisPositionBStaticPartA [source=");
54          builder.append(getSource());
55          builder.append(", messageId=");
56          builder.append(getMessageId());
57          builder.append(", mmsi=");
58          builder.append(getMmsi());
59          builder.append(", repeatIndicator=");
60          builder.append(getRepeatIndicator());
61          builder.append(", partNumber=");
62          builder.append(getPartNumber());
63          builder.append(", name=");
64          builder.append(getName());
65          builder.append("]");
66          return builder.toString();
67      }
68  }