View Javadoc
1   package au.gov.amsa.navigation.ais;
2   
3   import com.google.common.base.Optional;
4   import com.google.common.base.Preconditions;
5   
6   public class Vessel {
7   
8   	private long mmsi;
9   	private Optional<Integer> imo;
10  	private Optional<Integer> shipType;
11  	private Optional<Integer> dimensionA;
12  	private Optional<Integer> dimensionB;
13  	private Optional<Integer> dimensionC;
14  	private Optional<Integer> dimensionD;
15  	private Optional<Integer> lengthMetres;
16  	private Optional<Integer> widthMetres;
17  	private Optional<String> nmea;
18  
19  	private Vessel(long mmsi, Optional<Integer> imo,
20  			Optional<Integer> shipType, Optional<Integer> dimensionA,
21  			Optional<Integer> dimensionB, Optional<Integer> dimensionC,
22  			Optional<Integer> dimensionD, Optional<Integer> lengthMetres,
23  			Optional<Integer> widthMetres, Optional<String> nmea) {
24  		Preconditions.checkNotNull(imo);
25  		Preconditions.checkNotNull(shipType);
26  		Preconditions.checkNotNull(dimensionA);
27  		Preconditions.checkNotNull(dimensionB);
28  		Preconditions.checkNotNull(dimensionC);
29  		Preconditions.checkNotNull(dimensionD);
30  		Preconditions.checkNotNull(lengthMetres);
31  		Preconditions.checkNotNull(widthMetres);
32  		Preconditions.checkNotNull(nmea);
33  		this.mmsi = mmsi;
34  		this.imo = imo;
35  		this.shipType = shipType;
36  		this.dimensionA = dimensionA;
37  		this.dimensionB = dimensionB;
38  		this.dimensionC = dimensionC;
39  		this.dimensionD = dimensionD;
40  		this.lengthMetres = lengthMetres;
41  		this.widthMetres = widthMetres;
42  		this.nmea = nmea;
43  	}
44  
45  	public long getMmsi() {
46  		return mmsi;
47  	}
48  
49  	public Optional<Integer> getImo() {
50  		return imo;
51  	}
52  
53  	public Optional<Integer> getShipType() {
54  		return shipType;
55  	}
56  
57  	public Optional<Integer> getDimensionA() {
58  		return dimensionA;
59  	}
60  
61  	public Optional<Integer> getDimensionB() {
62  		return dimensionB;
63  	}
64  
65  	public Optional<Integer> getDimensionC() {
66  		return dimensionC;
67  	}
68  
69  	public Optional<Integer> getDimensionD() {
70  		return dimensionD;
71  	}
72  
73  	public Optional<Integer> getLengthMetres() {
74  		return lengthMetres;
75  	}
76  
77  	public Optional<Integer> getWidthMetres() {
78  		return widthMetres;
79  	}
80  
81  	public Optional<String> getNmea() {
82  		return nmea;
83  	}
84  
85  	public static Builder builder() {
86  		return new Builder();
87  	}
88  
89  	public static Builder from(Vessel v) {
90  		return builder().mmsi(v.mmsi).imo(v.imo).shipType(v.shipType)
91  				.dimensionA(v.dimensionA).dimensionB(v.dimensionB)
92  				.dimensionC(v.dimensionC).dimensionD(v.dimensionD)
93  				.lengthMetres(v.lengthMetres).widthMetres(v.widthMetres)
94  				.nmea(v.nmea);
95  	}
96  
97  	public static class Builder {
98  
99  		private long mmsi;
100 		private Optional<Integer> imo = Optional.absent();
101 		private Optional<Integer> shipType = Optional.absent();
102 		private Optional<Integer> dimensionA = Optional.absent();
103 		private Optional<Integer> dimensionB = Optional.absent();
104 		private Optional<Integer> dimensionC = Optional.absent();
105 		private Optional<Integer> dimensionD = Optional.absent();
106 		private Optional<Integer> lengthMetres = Optional.absent();
107 		private Optional<Integer> widthMetres = Optional.absent();
108 		private Optional<String> nmea = Optional.absent();
109 
110 		private Builder() {
111 		}
112 
113 		public Builder mmsi(long mmsi) {
114 			this.mmsi = mmsi;
115 			return this;
116 		}
117 
118 		public Builder imo(Optional<Integer> imo) {
119 			this.imo = imo;
120 			return this;
121 		}
122 
123 		public Builder shipType(Optional<Integer> shipType) {
124 			this.shipType = shipType;
125 			return this;
126 		}
127 
128 		public Builder dimensionA(Optional<Integer> dimensionA) {
129 			this.dimensionA = dimensionA;
130 			return this;
131 		}
132 
133 		public Builder dimensionB(Optional<Integer> dimensionB) {
134 			this.dimensionB = dimensionB;
135 			return this;
136 		}
137 
138 		public Builder dimensionC(Optional<Integer> dimensionC) {
139 			this.dimensionC = dimensionC;
140 			return this;
141 		}
142 
143 		public Builder dimensionD(Optional<Integer> dimensionD) {
144 			this.dimensionD = dimensionD;
145 			return this;
146 		}
147 
148 		public Builder lengthMetres(Optional<Integer> lengthMetres) {
149 			this.lengthMetres = lengthMetres;
150 			return this;
151 		}
152 
153 		public Builder widthMetres(Optional<Integer> widthMetres) {
154 			this.widthMetres = widthMetres;
155 			return this;
156 		}
157 
158 		public Builder nmea(Optional<String> nmea) {
159 			this.nmea = nmea;
160 			return this;
161 		}
162 
163 		public Vessel build() {
164 			return new Vessel(mmsi, imo, shipType, dimensionA, dimensionB,
165 					dimensionC, dimensionD, lengthMetres, widthMetres, nmea);
166 		}
167 
168 	}
169 
170 	@Override
171 	public String toString() {
172 		StringBuilder b = new StringBuilder();
173 		b.append("Vessel [mmsi=");
174 		b.append(mmsi);
175 		b.append(", imo=");
176 		b.append(imo);
177 		b.append(", shipType=");
178 		b.append(shipType);
179 		b.append(", dimensionA=");
180 		b.append(dimensionA);
181 		b.append(", dimensionB=");
182 		b.append(dimensionB);
183 		b.append(", dimensionC=");
184 		b.append(dimensionC);
185 		b.append(", dimensionD=");
186 		b.append(dimensionD);
187 		b.append(", lengthMetres=");
188 		b.append(lengthMetres);
189 		b.append(", widthMetres=");
190 		b.append(widthMetres);
191 		b.append(", nmea=");
192 		b.append(nmea);
193 		b.append("]");
194 		return b.toString();
195 	}
196 
197 	
198 }