View Javadoc
1   package au.gov.amsa.ihs.model;
2   
3   import org.joda.time.DateTime;
4   
5   import com.google.common.base.Optional;
6   import com.google.common.base.Preconditions;
7   
8   public class Ship {
9   
10      private final String imo;
11      private final Optional<String> mmsi;
12      private final Optional<String> type2;
13      private final Optional<String> type3;
14      private final Optional<String> type4;
15      private final Optional<String> type5;
16      private final Optional<Long> grossTonnage;
17      private final Optional<String> classificationSocietyCode;
18      private final Optional<String> flagCode;
19      private final Optional<String> groupBeneficialOwnerCompanyCode;
20      private final Optional<String> groupBeneficialOwnerCountryOfDomicileCode;
21      private final Optional<String> countryOfBuildCode;
22      private final Optional<Integer> yearOfBuild;
23      private final Optional<Integer> monthOfBuild;
24      private final Optional<Float> deadweightTonnage;
25      private final Optional<String> statCode5;
26      private final Optional<Float> lengthOverallMetres;
27      private final Optional<Float> breadthMetres;
28      private final Optional<Float> displacementTonnage;
29      private final Optional<Float> draughtMetres;
30      private final Optional<Float> speedKnots;
31      private final Optional<DateTime> lastUpdateTime;
32      private final Optional<String> name;
33      private final Optional<String> shipBuilderCompanyCode;
34  
35      private Ship(String imo, Optional<String> mmsi, Optional<String> type2, Optional<String> type3,
36              Optional<String> type4, Optional<String> type5, Optional<Long> grossTonnage,
37              Optional<String> classificationSocietyCode, Optional<String> flagCode,
38              Optional<String> groupBeneficialOwnerCompanyCode,
39              Optional<String> groupBeneficialOwnerCountryOfDomicileCode,
40              Optional<String> countryOfBuildCode, Optional<Integer> yearOfBuild,
41              Optional<Integer> monthOfBuild, Optional<Float> deadweightTonnage,
42              Optional<String> statCode5, Optional<Float> lengthOverallMetres,
43              Optional<Float> breadthMetres, Optional<Float> displacementTonnage,
44              Optional<Float> draughtMetres, Optional<Float> speedKnots,
45              Optional<DateTime> lastUpdateTime, Optional<String> name,
46              Optional<String> shipBuilderCompanyCode) {
47          Preconditions.checkNotNull(imo);
48          Preconditions.checkNotNull(mmsi);
49          Preconditions.checkNotNull(type2);
50          Preconditions.checkNotNull(type3);
51          Preconditions.checkNotNull(type4);
52          Preconditions.checkNotNull(type5);
53          Preconditions.checkNotNull(grossTonnage);
54          Preconditions.checkNotNull(classificationSocietyCode);
55          Preconditions.checkNotNull(flagCode);
56          Preconditions.checkNotNull(groupBeneficialOwnerCompanyCode);
57          Preconditions.checkNotNull(groupBeneficialOwnerCountryOfDomicileCode);
58          Preconditions.checkNotNull(countryOfBuildCode);
59          Preconditions.checkNotNull(yearOfBuild);
60          Preconditions.checkNotNull(monthOfBuild);
61          Preconditions.checkNotNull(deadweightTonnage);
62          Preconditions.checkNotNull(statCode5);
63          Preconditions.checkNotNull(lengthOverallMetres);
64          Preconditions.checkNotNull(breadthMetres);
65          Preconditions.checkNotNull(displacementTonnage);
66          Preconditions.checkNotNull(draughtMetres);
67          Preconditions.checkNotNull(speedKnots);
68          Preconditions.checkNotNull(lastUpdateTime);
69          Preconditions.checkNotNull(name);
70          Preconditions.checkNotNull(shipBuilderCompanyCode);
71          this.imo = imo;
72          this.mmsi = mmsi;
73          this.type2 = type2;
74          this.type3 = type3;
75          this.type4 = type4;
76          this.type5 = type5;
77          this.grossTonnage = grossTonnage;
78          this.classificationSocietyCode = classificationSocietyCode;
79          this.flagCode = flagCode;
80          this.groupBeneficialOwnerCompanyCode = groupBeneficialOwnerCompanyCode;
81          this.groupBeneficialOwnerCountryOfDomicileCode = groupBeneficialOwnerCountryOfDomicileCode;
82          this.countryOfBuildCode = countryOfBuildCode;
83          this.yearOfBuild = yearOfBuild;
84          this.monthOfBuild = monthOfBuild;
85          this.deadweightTonnage = deadweightTonnage;
86          this.statCode5 = statCode5;
87          this.lengthOverallMetres = lengthOverallMetres;
88          this.breadthMetres = breadthMetres;
89          if (displacementTonnage.isPresent() && displacementTonnage.get() == 0)
90              this.displacementTonnage = Optional.absent();
91          else
92              this.displacementTonnage = displacementTonnage;
93          this.draughtMetres = draughtMetres;
94          this.speedKnots = speedKnots;
95          this.lastUpdateTime = lastUpdateTime;
96          this.name = name;
97          this.shipBuilderCompanyCode = shipBuilderCompanyCode;
98      }
99  
100     public Optional<String> getName() {
101         return name;
102     }
103 
104     public String getImo() {
105         return imo;
106     }
107 
108     public Optional<String> getMmsi() {
109         return mmsi;
110     }
111 
112     public Optional<String> getType2() {
113         return type2;
114     }
115 
116     public Optional<String> getType3() {
117         return type3;
118     }
119 
120     public Optional<String> getType4() {
121         return type4;
122     }
123 
124     public Optional<String> getType5() {
125         return type5;
126     }
127 
128     public Optional<Long> getGrossTonnage() {
129         return grossTonnage;
130     }
131 
132     public Optional<String> getClassificationSocietyCode() {
133         return classificationSocietyCode;
134     }
135 
136     public Optional<String> getFlagCode() {
137         return flagCode;
138     }
139 
140     public Optional<String> getGroupBeneficialOwnerCompanyCode() {
141         return groupBeneficialOwnerCompanyCode;
142     }
143 
144     public Optional<String> getGroupBeneficialOwnerCountryOfDomicileCode() {
145         return groupBeneficialOwnerCountryOfDomicileCode;
146     }
147 
148     public Optional<String> getCountryOfBuildCode() {
149         return countryOfBuildCode;
150     }
151 
152     public Optional<Integer> getYearOfBuild() {
153         return yearOfBuild;
154     }
155 
156     public Optional<Integer> getMonthOfBuild() {
157         return monthOfBuild;
158     }
159 
160     public Optional<Float> getDeadweightTonnage() {
161         return deadweightTonnage;
162     }
163 
164     public Optional<String> getStatCode5() {
165         return statCode5;
166     }
167 
168     public Optional<Float> getLengthOverallMetres() {
169         return lengthOverallMetres;
170     }
171 
172     public Optional<Float> getBreadthMetres() {
173         return breadthMetres;
174     }
175 
176     public Optional<Float> getDisplacementTonnage() {
177         return displacementTonnage;
178     }
179 
180     public Optional<Float> getDraughtMetres() {
181         return draughtMetres;
182     }
183 
184     public Optional<Float> getSpeedKnots() {
185         return speedKnots;
186     }
187 
188     public Optional<DateTime> getLastUpdateTime() {
189         return lastUpdateTime;
190     }
191 
192     public Optional<String> getShipBuilderCompanyCode() {
193         return shipBuilderCompanyCode;
194     }
195 
196     public static Builder builder() {
197         return new Builder();
198     }
199 
200     public static class Builder {
201 
202         private String imo;
203         private Optional<String> mmsi;
204         private Optional<String> type2;
205         private Optional<String> type3;
206         private Optional<String> type4;
207         private Optional<String> type5;
208         private Optional<Long> grossTonnage;
209         private Optional<String> classificationSocietyCode;
210         private Optional<String> flagCode;
211         private Optional<String> groupBeneficialOwnerCompanyCode;
212         private Optional<String> groupBeneficialOwnerCountryOfDomicileCode;
213         private Optional<String> countryOfBuildCode;
214         private Optional<Integer> yearOfBuild;
215         private Optional<Integer> monthOfBuild;
216         private Optional<Float> deadweightTonnage;
217         private Optional<String> statCode5;
218         private Optional<Float> lengthOverallMetres;
219         private Optional<Float> breadthMetres;
220         private Optional<Float> displacementTonnage;
221         private Optional<Float> draughtMetres;
222         private Optional<Float> speedKnots;
223         private Optional<DateTime> lastUpdateTime;
224         private Optional<String> name;
225         private Optional<String> shipBuilderCompanyCode;
226 
227         private Builder() {
228         }
229 
230         public Builder imo(String imo) {
231             this.imo = imo;
232             return this;
233         }
234 
235         public Builder mmsi(Optional<String> mmsi) {
236             this.mmsi = mmsi;
237             return this;
238         }
239 
240         public Builder type2(Optional<String> type2) {
241             this.type2 = type2;
242             return this;
243         }
244 
245         public Builder type3(Optional<String> type3) {
246             this.type3 = type3;
247             return this;
248         }
249 
250         public Builder type4(Optional<String> type4) {
251             this.type4 = type4;
252             return this;
253         }
254 
255         public Builder type5(Optional<String> type5) {
256             this.type5 = type5;
257             return this;
258         }
259 
260         public Builder grossTonnage(Optional<Long> grossTonnage) {
261             this.grossTonnage = grossTonnage;
262             return this;
263         }
264 
265         public Builder classificationSocietyCode(Optional<String> classificationSocietyCode) {
266             this.classificationSocietyCode = classificationSocietyCode;
267             return this;
268         }
269 
270         public Builder flagCode(Optional<String> flagCode) {
271             this.flagCode = flagCode;
272             return this;
273         }
274 
275         public Builder groupBeneficialOwnerCompanyCode(
276                 Optional<String> groupBeneficialOwnerCompanyCode) {
277             this.groupBeneficialOwnerCompanyCode = groupBeneficialOwnerCompanyCode;
278             return this;
279         }
280 
281         public Builder groupBeneficialOwnerCountryOfDomicileCode(
282                 Optional<String> groupBeneficialOwnerCountryOfDomicileCode) {
283             this.groupBeneficialOwnerCountryOfDomicileCode = groupBeneficialOwnerCountryOfDomicileCode;
284             return this;
285         }
286 
287         public Builder countryOfBuildCode(Optional<String> countryOfBuildCode) {
288             this.countryOfBuildCode = countryOfBuildCode;
289             return this;
290         }
291 
292         public Builder yearOfBuild(Optional<Integer> yearOfBuild) {
293             this.yearOfBuild = yearOfBuild;
294             return this;
295         }
296 
297         public Builder monthOfBuild(Optional<Integer> monthOfBuild) {
298             this.monthOfBuild = monthOfBuild;
299             return this;
300         }
301 
302         public Builder deadweightTonnage(Optional<Float> dwt) {
303             this.deadweightTonnage = dwt;
304             return this;
305         }
306 
307         public Builder statCode5(Optional<String> value) {
308             this.statCode5 = value;
309             return this;
310         }
311 
312         public Builder lengthOverallMetres(Optional<Float> value) {
313             this.lengthOverallMetres = value;
314             return this;
315         }
316 
317         public Builder breadthMetres(Optional<Float> value) {
318             this.breadthMetres = value;
319             return this;
320         }
321 
322         public Builder displacementTonnage(Optional<Float> value) {
323             this.displacementTonnage = value;
324             return this;
325         }
326 
327         public Builder draughtMetres(Optional<Float> value) {
328             this.draughtMetres = value;
329             return this;
330         }
331 
332         public Builder speedKnots(Optional<Float> value) {
333             this.speedKnots = value;
334             return this;
335         }
336 
337         public Builder lastUpdateTime(Optional<DateTime> value) {
338             this.lastUpdateTime = value;
339             return this;
340         }
341 
342         public Builder name(Optional<String> name) {
343             this.name = name;
344             return this;
345         }
346 
347         public Builder shipBuilderCompanyCode(Optional<String> shipBuilderCompanyCode) {
348             this.shipBuilderCompanyCode = shipBuilderCompanyCode;
349             return this;
350         }
351 
352         public Ship build() {
353             return new Ship(imo, mmsi, type2, type3, type4, type5, grossTonnage,
354                     classificationSocietyCode, flagCode, groupBeneficialOwnerCompanyCode,
355                     groupBeneficialOwnerCountryOfDomicileCode, countryOfBuildCode, yearOfBuild,
356                     monthOfBuild, deadweightTonnage, statCode5, lengthOverallMetres, breadthMetres,
357                     displacementTonnage, draughtMetres, speedKnots, lastUpdateTime, name,
358                     shipBuilderCompanyCode);
359         }
360     }
361 
362     @Override
363     public String toString() {
364         StringBuilder b = new StringBuilder();
365         b.append("Ship [imo=");
366         b.append(imo);
367         b.append(", mmsi=");
368         b.append(mmsi);
369         b.append(", type2=");
370         b.append(type2);
371         b.append(", type3=");
372         b.append(type3);
373         b.append(", type4=");
374         b.append(type4);
375         b.append(", type5=");
376         b.append(type5);
377         b.append(", grossTonnage=");
378         b.append(grossTonnage);
379         b.append(", classificationSocietyCode=");
380         b.append(classificationSocietyCode);
381         b.append(", flagCode=");
382         b.append(flagCode);
383         b.append(", groupBeneficialOwnerCompanyCode=");
384         b.append(groupBeneficialOwnerCompanyCode);
385         b.append(", groupBeneficialOwnerCountryOfDomicileCode=");
386         b.append(groupBeneficialOwnerCountryOfDomicileCode);
387         b.append(", countryOfBuildCode=");
388         b.append(countryOfBuildCode);
389         b.append(", yearOfBuild=");
390         b.append(yearOfBuild);
391         b.append(", monthOfBuild=");
392         b.append(monthOfBuild);
393         b.append(", deadweightTonnage=");
394         b.append(deadweightTonnage);
395         b.append(", statCode5=");
396         b.append(statCode5);
397         b.append(", lengthOverallMetres=");
398         b.append(lengthOverallMetres);
399         b.append(", breadthMetres=");
400         b.append(breadthMetres);
401         b.append(", displacementTonnage=");
402         b.append(displacementTonnage);
403         b.append(", draughtMetres=");
404         b.append(draughtMetres);
405         b.append(", speedKnots=");
406         b.append(speedKnots);
407         b.append(", lastUpdateTime=");
408         b.append(lastUpdateTime);
409         b.append(", name=");
410         b.append(name);
411         b.append(", shipBuilderCompanyCode=");
412         b.append(shipBuilderCompanyCode);
413         b.append("]");
414         return b.toString();
415     }
416 
417 }