/* Copyright (c) 2011 Danish Maritime Authority.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dk.dma.ais.message;
import dk.dma.ais.binary.BinArray;
import dk.dma.ais.binary.SixbitEncoder;
import dk.dma.ais.binary.SixbitException;
import dk.dma.ais.sentence.Vdm;
/**
* AIS message 7
*
* Binary acknowledge message as defined by ITU-R M.1371-4
*
*/
public class AisMessage7 extends AisMessage {
/** serialVersionUID. */
private static final long serialVersionUID = 1L;
private int spare; // 2 bits: Not used. Should be set to zero. Reserved
// for future use
private long dest1; // 30 bits: MMSI number of first destination of this ACK
private int seq1; // 2 bits: Sequence number of message to be acknowledged;
// 0-3
private long dest2; // 30 bits: MMSI number of second destination of this
// ACK
private int seq2; // 2 bits: Sequence number of message to be acknowledged;
// 0-3
private long dest3; // 30 bits: MMSI number of third destination of this ACK
private int seq3; // 2 bits: Sequence number of message to be acknowledged;
// 0-3
private long dest4; // 30 bits: MMSI number of fourth destination of this
// ACK
private int seq4; // 2 bits: Sequence number of message to be acknowledged;
// 0-3
public AisMessage7() {
super(7);
}
public AisMessage7(int num) {
super(num);
}
public AisMessage7(Vdm vdm) throws AisMessageException, SixbitException {
super(vdm);
parse();
}
public void parse() throws AisMessageException, SixbitException {
BinArray sixbit = vdm.getBinArray();
if (sixbit.getLength() < 72 || sixbit.getLength() > 168) {
throw new AisMessageException("Message " + msgId + " wrong length: " + sixbit.getLength());
}
super.parse(sixbit);
this.spare = (int) sixbit.getVal(2);
this.dest1 = sixbit.getVal(30);
this.seq1 = (int) sixbit.getVal(2);
if (!sixbit.hasMoreBits()) {
return;
}
this.dest2 = sixbit.getVal(30);
this.seq2 = (int) sixbit.getVal(2);
if (!sixbit.hasMoreBits()) {
return;
}
this.dest3 = sixbit.getVal(30);
this.seq3 = (int) sixbit.getVal(2);
if (!sixbit.hasMoreBits()) {
return;
}
this.dest4 = sixbit.getVal(30);
this.seq4 = (int) sixbit.getVal(2);
}
@Override
public SixbitEncoder getEncoded() {
SixbitEncoder encoder = super.encode();
encoder.addVal(spare, 2);
encoder.addVal(dest1, 30);
encoder.addVal(seq1, 2);
encoder.addVal(dest2, 30);
encoder.addVal(seq2, 2);
encoder.addVal(dest3, 30);
encoder.addVal(seq3, 2);
encoder.addVal(dest4, 30);
encoder.addVal(seq4, 2);
return encoder;
}
public int getSpare() {
return spare;
}
public void setSpare(int spare) {
this.spare = spare;
}
public long getDest1() {
return dest1;
}
public void setDest1(long dest1) {
this.dest1 = dest1;
}
public int getSeq1() {
return seq1;
}
public void setSeq1(int seq1) {
this.seq1 = seq1;
}
public long getDest2() {
return dest2;
}
public void setDest2(long dest2) {
this.dest2 = dest2;
}
public int getSeq2() {
return seq2;
}
public void setSeq2(int seq2) {
this.seq2 = seq2;
}
public long getDest3() {
return dest3;
}
public void setDest3(long dest3) {
this.dest3 = dest3;
}
public int getSeq3() {
return seq3;
}
public void setSeq3(int seq3) {
this.seq3 = seq3;
}
public long getDest4() {
return dest4;
}
public void setDest4(long dest4) {
this.dest4 = dest4;
}
public int getSeq4() {
return seq4;
}
public void setSeq4(int seq4) {
this.seq4 = seq4;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(super.toString());
builder.append(", spare=");
builder.append(spare);
builder.append(", dest1=");
builder.append(dest1);
builder.append(", seq1=");
builder.append(seq1);
builder.append(", dest2=");
builder.append(dest2);
builder.append(", seq2=");
builder.append(seq2);
builder.append(", dest3=");
builder.append(dest3);
builder.append(", seq3=");
builder.append(seq3);
builder.append(", dest4=");
builder.append(dest4);
builder.append(", seq4=");
builder.append(seq4);
builder.append("]");
return builder.toString();
}
}