package au.gov.amsa.ihs.model;
import org.joda.time.DateTime;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
public class Ship {
private final String imo;
private final Optional<String> mmsi;
private final Optional<String> type2;
private final Optional<String> type3;
private final Optional<String> type4;
private final Optional<String> type5;
private final Optional<Long> grossTonnage;
private final Optional<String> classificationSocietyCode;
private final Optional<String> flagCode;
private final Optional<String> groupBeneficialOwnerCompanyCode;
private final Optional<String> groupBeneficialOwnerCountryOfDomicileCode;
private final Optional<String> countryOfBuildCode;
private final Optional<Integer> yearOfBuild;
private final Optional<Integer> monthOfBuild;
private final Optional<Float> deadweightTonnage;
private final Optional<String> statCode5;
private final Optional<Float> lengthOverallMetres;
private final Optional<Float> breadthMetres;
private final Optional<Float> displacementTonnage;
private final Optional<Float> draughtMetres;
private final Optional<Float> speedKnots;
private final Optional<DateTime> lastUpdateTime;
private final Optional<String> name;
private final Optional<String> shipBuilderCompanyCode;
private Ship(String imo, Optional<String> mmsi, Optional<String> type2, Optional<String> type3,
Optional<String> type4, Optional<String> type5, Optional<Long> grossTonnage,
Optional<String> classificationSocietyCode, Optional<String> flagCode,
Optional<String> groupBeneficialOwnerCompanyCode,
Optional<String> groupBeneficialOwnerCountryOfDomicileCode,
Optional<String> countryOfBuildCode, Optional<Integer> yearOfBuild,
Optional<Integer> monthOfBuild, Optional<Float> deadweightTonnage,
Optional<String> statCode5, Optional<Float> lengthOverallMetres,
Optional<Float> breadthMetres, Optional<Float> displacementTonnage,
Optional<Float> draughtMetres, Optional<Float> speedKnots,
Optional<DateTime> lastUpdateTime, Optional<String> name,
Optional<String> shipBuilderCompanyCode) {
Preconditions.checkNotNull(imo);
Preconditions.checkNotNull(mmsi);
Preconditions.checkNotNull(type2);
Preconditions.checkNotNull(type3);
Preconditions.checkNotNull(type4);
Preconditions.checkNotNull(type5);
Preconditions.checkNotNull(grossTonnage);
Preconditions.checkNotNull(classificationSocietyCode);
Preconditions.checkNotNull(flagCode);
Preconditions.checkNotNull(groupBeneficialOwnerCompanyCode);
Preconditions.checkNotNull(groupBeneficialOwnerCountryOfDomicileCode);
Preconditions.checkNotNull(countryOfBuildCode);
Preconditions.checkNotNull(yearOfBuild);
Preconditions.checkNotNull(monthOfBuild);
Preconditions.checkNotNull(deadweightTonnage);
Preconditions.checkNotNull(statCode5);
Preconditions.checkNotNull(lengthOverallMetres);
Preconditions.checkNotNull(breadthMetres);
Preconditions.checkNotNull(displacementTonnage);
Preconditions.checkNotNull(draughtMetres);
Preconditions.checkNotNull(speedKnots);
Preconditions.checkNotNull(lastUpdateTime);
Preconditions.checkNotNull(name);
Preconditions.checkNotNull(shipBuilderCompanyCode);
this.imo = imo;
this.mmsi = mmsi;
this.type2 = type2;
this.type3 = type3;
this.type4 = type4;
this.type5 = type5;
this.grossTonnage = grossTonnage;
this.classificationSocietyCode = classificationSocietyCode;
this.flagCode = flagCode;
this.groupBeneficialOwnerCompanyCode = groupBeneficialOwnerCompanyCode;
this.groupBeneficialOwnerCountryOfDomicileCode = groupBeneficialOwnerCountryOfDomicileCode;
this.countryOfBuildCode = countryOfBuildCode;
this.yearOfBuild = yearOfBuild;
this.monthOfBuild = monthOfBuild;
this.deadweightTonnage = deadweightTonnage;
this.statCode5 = statCode5;
this.lengthOverallMetres = lengthOverallMetres;
this.breadthMetres = breadthMetres;
if (displacementTonnage.isPresent() && displacementTonnage.get() == 0)
this.displacementTonnage = Optional.absent();
else
this.displacementTonnage = displacementTonnage;
this.draughtMetres = draughtMetres;
this.speedKnots = speedKnots;
this.lastUpdateTime = lastUpdateTime;
this.name = name;
this.shipBuilderCompanyCode = shipBuilderCompanyCode;
}
public Optional<String> getName() {
return name;
}
public String getImo() {
return imo;
}
public Optional<String> getMmsi() {
return mmsi;
}
public Optional<String> getType2() {
return type2;
}
public Optional<String> getType3() {
return type3;
}
public Optional<String> getType4() {
return type4;
}
public Optional<String> getType5() {
return type5;
}
public Optional<Long> getGrossTonnage() {
return grossTonnage;
}
public Optional<String> getClassificationSocietyCode() {
return classificationSocietyCode;
}
public Optional<String> getFlagCode() {
return flagCode;
}
public Optional<String> getGroupBeneficialOwnerCompanyCode() {
return groupBeneficialOwnerCompanyCode;
}
public Optional<String> getGroupBeneficialOwnerCountryOfDomicileCode() {
return groupBeneficialOwnerCountryOfDomicileCode;
}
public Optional<String> getCountryOfBuildCode() {
return countryOfBuildCode;
}
public Optional<Integer> getYearOfBuild() {
return yearOfBuild;
}
public Optional<Integer> getMonthOfBuild() {
return monthOfBuild;
}
public Optional<Float> getDeadweightTonnage() {
return deadweightTonnage;
}
public Optional<String> getStatCode5() {
return statCode5;
}
public Optional<Float> getLengthOverallMetres() {
return lengthOverallMetres;
}
public Optional<Float> getBreadthMetres() {
return breadthMetres;
}
public Optional<Float> getDisplacementTonnage() {
return displacementTonnage;
}
public Optional<Float> getDraughtMetres() {
return draughtMetres;
}
public Optional<Float> getSpeedKnots() {
return speedKnots;
}
public Optional<DateTime> getLastUpdateTime() {
return lastUpdateTime;
}
public Optional<String> getShipBuilderCompanyCode() {
return shipBuilderCompanyCode;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String imo;
private Optional<String> mmsi;
private Optional<String> type2;
private Optional<String> type3;
private Optional<String> type4;
private Optional<String> type5;
private Optional<Long> grossTonnage;
private Optional<String> classificationSocietyCode;
private Optional<String> flagCode;
private Optional<String> groupBeneficialOwnerCompanyCode;
private Optional<String> groupBeneficialOwnerCountryOfDomicileCode;
private Optional<String> countryOfBuildCode;
private Optional<Integer> yearOfBuild;
private Optional<Integer> monthOfBuild;
private Optional<Float> deadweightTonnage;
private Optional<String> statCode5;
private Optional<Float> lengthOverallMetres;
private Optional<Float> breadthMetres;
private Optional<Float> displacementTonnage;
private Optional<Float> draughtMetres;
private Optional<Float> speedKnots;
private Optional<DateTime> lastUpdateTime;
private Optional<String> name;
private Optional<String> shipBuilderCompanyCode;
private Builder() {
}
public Builder imo(String imo) {
this.imo = imo;
return this;
}
public Builder mmsi(Optional<String> mmsi) {
this.mmsi = mmsi;
return this;
}
public Builder type2(Optional<String> type2) {
this.type2 = type2;
return this;
}
public Builder type3(Optional<String> type3) {
this.type3 = type3;
return this;
}
public Builder type4(Optional<String> type4) {
this.type4 = type4;
return this;
}
public Builder type5(Optional<String> type5) {
this.type5 = type5;
return this;
}
public Builder grossTonnage(Optional<Long> grossTonnage) {
this.grossTonnage = grossTonnage;
return this;
}
public Builder classificationSocietyCode(Optional<String> classificationSocietyCode) {
this.classificationSocietyCode = classificationSocietyCode;
return this;
}
public Builder flagCode(Optional<String> flagCode) {
this.flagCode = flagCode;
return this;
}
public Builder groupBeneficialOwnerCompanyCode(
Optional<String> groupBeneficialOwnerCompanyCode) {
this.groupBeneficialOwnerCompanyCode = groupBeneficialOwnerCompanyCode;
return this;
}
public Builder groupBeneficialOwnerCountryOfDomicileCode(
Optional<String> groupBeneficialOwnerCountryOfDomicileCode) {
this.groupBeneficialOwnerCountryOfDomicileCode = groupBeneficialOwnerCountryOfDomicileCode;
return this;
}
public Builder countryOfBuildCode(Optional<String> countryOfBuildCode) {
this.countryOfBuildCode = countryOfBuildCode;
return this;
}
public Builder yearOfBuild(Optional<Integer> yearOfBuild) {
this.yearOfBuild = yearOfBuild;
return this;
}
public Builder monthOfBuild(Optional<Integer> monthOfBuild) {
this.monthOfBuild = monthOfBuild;
return this;
}
public Builder deadweightTonnage(Optional<Float> dwt) {
this.deadweightTonnage = dwt;
return this;
}
public Builder statCode5(Optional<String> value) {
this.statCode5 = value;
return this;
}
public Builder lengthOverallMetres(Optional<Float> value) {
this.lengthOverallMetres = value;
return this;
}
public Builder breadthMetres(Optional<Float> value) {
this.breadthMetres = value;
return this;
}
public Builder displacementTonnage(Optional<Float> value) {
this.displacementTonnage = value;
return this;
}
public Builder draughtMetres(Optional<Float> value) {
this.draughtMetres = value;
return this;
}
public Builder speedKnots(Optional<Float> value) {
this.speedKnots = value;
return this;
}
public Builder lastUpdateTime(Optional<DateTime> value) {
this.lastUpdateTime = value;
return this;
}
public Builder name(Optional<String> name) {
this.name = name;
return this;
}
public Builder shipBuilderCompanyCode(Optional<String> shipBuilderCompanyCode) {
this.shipBuilderCompanyCode = shipBuilderCompanyCode;
return this;
}
public Ship build() {
return new Ship(imo, mmsi, type2, type3, type4, type5, grossTonnage,
classificationSocietyCode, flagCode, groupBeneficialOwnerCompanyCode,
groupBeneficialOwnerCountryOfDomicileCode, countryOfBuildCode, yearOfBuild,
monthOfBuild, deadweightTonnage, statCode5, lengthOverallMetres, breadthMetres,
displacementTonnage, draughtMetres, speedKnots, lastUpdateTime, name,
shipBuilderCompanyCode);
}
}
@Override
public String toString() {
StringBuilder b = new StringBuilder();
b.append("Ship [imo=");
b.append(imo);
b.append(", mmsi=");
b.append(mmsi);
b.append(", type2=");
b.append(type2);
b.append(", type3=");
b.append(type3);
b.append(", type4=");
b.append(type4);
b.append(", type5=");
b.append(type5);
b.append(", grossTonnage=");
b.append(grossTonnage);
b.append(", classificationSocietyCode=");
b.append(classificationSocietyCode);
b.append(", flagCode=");
b.append(flagCode);
b.append(", groupBeneficialOwnerCompanyCode=");
b.append(groupBeneficialOwnerCompanyCode);
b.append(", groupBeneficialOwnerCountryOfDomicileCode=");
b.append(groupBeneficialOwnerCountryOfDomicileCode);
b.append(", countryOfBuildCode=");
b.append(countryOfBuildCode);
b.append(", yearOfBuild=");
b.append(yearOfBuild);
b.append(", monthOfBuild=");
b.append(monthOfBuild);
b.append(", deadweightTonnage=");
b.append(deadweightTonnage);
b.append(", statCode5=");
b.append(statCode5);
b.append(", lengthOverallMetres=");
b.append(lengthOverallMetres);
b.append(", breadthMetres=");
b.append(breadthMetres);
b.append(", displacementTonnage=");
b.append(displacementTonnage);
b.append(", draughtMetres=");
b.append(draughtMetres);
b.append(", speedKnots=");
b.append(speedKnots);
b.append(", lastUpdateTime=");
b.append(lastUpdateTime);
b.append(", name=");
b.append(name);
b.append(", shipBuilderCompanyCode=");
b.append(shipBuilderCompanyCode);
b.append("]");
return b.toString();
}
}