package au.gov.amsa.navigation.ais;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
public class Vessel {
private long mmsi;
private Optional<Integer> imo;
private Optional<Integer> shipType;
private Optional<Integer> dimensionA;
private Optional<Integer> dimensionB;
private Optional<Integer> dimensionC;
private Optional<Integer> dimensionD;
private Optional<Integer> lengthMetres;
private Optional<Integer> widthMetres;
private Optional<String> nmea;
private Vessel(long mmsi, Optional<Integer> imo,
Optional<Integer> shipType, Optional<Integer> dimensionA,
Optional<Integer> dimensionB, Optional<Integer> dimensionC,
Optional<Integer> dimensionD, Optional<Integer> lengthMetres,
Optional<Integer> widthMetres, Optional<String> nmea) {
Preconditions.checkNotNull(imo);
Preconditions.checkNotNull(shipType);
Preconditions.checkNotNull(dimensionA);
Preconditions.checkNotNull(dimensionB);
Preconditions.checkNotNull(dimensionC);
Preconditions.checkNotNull(dimensionD);
Preconditions.checkNotNull(lengthMetres);
Preconditions.checkNotNull(widthMetres);
Preconditions.checkNotNull(nmea);
this.mmsi = mmsi;
this.imo = imo;
this.shipType = shipType;
this.dimensionA = dimensionA;
this.dimensionB = dimensionB;
this.dimensionC = dimensionC;
this.dimensionD = dimensionD;
this.lengthMetres = lengthMetres;
this.widthMetres = widthMetres;
this.nmea = nmea;
}
public long getMmsi() {
return mmsi;
}
public Optional<Integer> getImo() {
return imo;
}
public Optional<Integer> getShipType() {
return shipType;
}
public Optional<Integer> getDimensionA() {
return dimensionA;
}
public Optional<Integer> getDimensionB() {
return dimensionB;
}
public Optional<Integer> getDimensionC() {
return dimensionC;
}
public Optional<Integer> getDimensionD() {
return dimensionD;
}
public Optional<Integer> getLengthMetres() {
return lengthMetres;
}
public Optional<Integer> getWidthMetres() {
return widthMetres;
}
public Optional<String> getNmea() {
return nmea;
}
public static Builder builder() {
return new Builder();
}
public static Builder from(Vessel v) {
return builder().mmsi(v.mmsi).imo(v.imo).shipType(v.shipType)
.dimensionA(v.dimensionA).dimensionB(v.dimensionB)
.dimensionC(v.dimensionC).dimensionD(v.dimensionD)
.lengthMetres(v.lengthMetres).widthMetres(v.widthMetres)
.nmea(v.nmea);
}
public static class Builder {
private long mmsi;
private Optional<Integer> imo = Optional.absent();
private Optional<Integer> shipType = Optional.absent();
private Optional<Integer> dimensionA = Optional.absent();
private Optional<Integer> dimensionB = Optional.absent();
private Optional<Integer> dimensionC = Optional.absent();
private Optional<Integer> dimensionD = Optional.absent();
private Optional<Integer> lengthMetres = Optional.absent();
private Optional<Integer> widthMetres = Optional.absent();
private Optional<String> nmea = Optional.absent();
private Builder() {
}
public Builder mmsi(long mmsi) {
this.mmsi = mmsi;
return this;
}
public Builder imo(Optional<Integer> imo) {
this.imo = imo;
return this;
}
public Builder shipType(Optional<Integer> shipType) {
this.shipType = shipType;
return this;
}
public Builder dimensionA(Optional<Integer> dimensionA) {
this.dimensionA = dimensionA;
return this;
}
public Builder dimensionB(Optional<Integer> dimensionB) {
this.dimensionB = dimensionB;
return this;
}
public Builder dimensionC(Optional<Integer> dimensionC) {
this.dimensionC = dimensionC;
return this;
}
public Builder dimensionD(Optional<Integer> dimensionD) {
this.dimensionD = dimensionD;
return this;
}
public Builder lengthMetres(Optional<Integer> lengthMetres) {
this.lengthMetres = lengthMetres;
return this;
}
public Builder widthMetres(Optional<Integer> widthMetres) {
this.widthMetres = widthMetres;
return this;
}
public Builder nmea(Optional<String> nmea) {
this.nmea = nmea;
return this;
}
public Vessel build() {
return new Vessel(mmsi, imo, shipType, dimensionA, dimensionB,
dimensionC, dimensionD, lengthMetres, widthMetres, nmea);
}
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
b.append("Vessel [mmsi=");
b.append(mmsi);
b.append(", imo=");
b.append(imo);
b.append(", shipType=");
b.append(shipType);
b.append(", dimensionA=");
b.append(dimensionA);
b.append(", dimensionB=");
b.append(dimensionB);
b.append(", dimensionC=");
b.append(dimensionC);
b.append(", dimensionD=");
b.append(dimensionD);
b.append(", lengthMetres=");
b.append(lengthMetres);
b.append(", widthMetres=");
b.append(widthMetres);
b.append(", nmea=");
b.append(nmea);
b.append("]");
return b.toString();
}
}