View Javadoc

1   package net.staniscia.sbs1.msg;
2   
3   import net.staniscia.sbs1.InvalidMessageBobyException;
4   
5   /**
6    * Created by staniscia on 23/01/14.
7    */
8   class SBS1FullMessage implements MSG1, MSG2, MSG3, MSG4, MSG5, MSG6, MSG7, MSG8, SEL, ID, AIR, STA, CLK {
9   
10  
11      private StatusFlagsType statusFlagsType;
12  
13      /**
14       * Field 3: Database Session record number
15       */
16      private String sessionID;
17  
18      /**
19       * Field 4:  AircraftID 	 Database Aircraft record number
20       */
21      private String aircraftId;
22  
23      /**
24       * Field 5:
25       * HexIdent 	 Aircraft Mode S hexadecimal code
26       */
27      private String hexIdent;
28  
29      /**
30       * Field 6:
31       * FlightID 	 Database Flight record number
32       */
33      private String flightId;
34  
35      /**
36       * Field 7:
37       * Date message generated 	  As it says
38       */
39      private String dateMessageGenerated;
40  
41      /**
42       * Field 8:
43       * Time message generated 	  As it says
44       */
45      private String timeMessageGenerated;
46  
47      /**
48       * Field 9:
49       * Date message logged 	  As it says
50       */
51      private String dataMessageLogged;
52  
53      /**
54       * Field 10:
55       * Time message logged 	  As it says
56       */
57      private String timeMessageLogged;
58  
59      /**
60       * Field 11:
61       * Callsign 	 An eight digit flight ID - can be flight number or registration (or even nothing).
62       */
63      private String callsign;
64  
65      /**
66       * Field 12:
67       * Altitude 	 Mode C altitude. Height relative to 1013.2mb (Flight Level). Not height AMSL..
68       */
69      private String altitude;
70  
71      /**
72       * Field 13:
73       * GroundSpeed 	 Speed over ground (not indicated airspeed)
74       */
75      private String groundSpeed;
76  
77      /**
78       * Field 14:
79       * Track 	 Track of aircraft (not heading). Derived from the velocity E/W and velocity N/S
80       */
81      private String track;
82  
83  
84      /**
85       * Field 15:
86       * Latitude 	 North and East positive. South and West negative.
87       */
88      private String latitude;
89  
90  
91      /**
92       * Field 16:
93       * Longitude 	 North and East positive. South and West negative.
94       */
95      private String longitude;
96  
97  
98      /**
99       * Field 17:
100      * VerticalRate 	 64ft resolution
101      */
102     private String verticalRate;
103 
104     /**
105      * Field 18:
106      * Squawk 	 Assigned Mode A squawk code.
107      */
108     private String squawk;
109 
110     /**
111      * Field 19:
112      * Alert (Squawk change) 	 Flag to indicate squawk has changed.
113      */
114     private String alertSquawkChange;
115 
116 
117     /**
118      * Field 20:
119      * Emergency 	 Flag to indicate emergency code has been set
120      */
121     private String emergency;
122 
123     /**
124      * Field 21:
125      * SPI (Ident) 	 Flag to indicate transponder Ident has been activated.
126      */
127     private String identSPI;
128 
129     /**
130      * Field 22:
131      * IsOnGround 	 Flag to indicate ground squat switch is active
132      */
133     private boolean onGround;
134 
135 
136     @Override
137     public String getSessionID() {
138         return sessionID;
139     }
140 
141     @Override
142     public void setSessionID(String sessionID) {
143         this.sessionID = sessionID;
144     }
145 
146     @Override
147     public String getAircraftId() {
148         return aircraftId;
149     }
150 
151     @Override
152     public void setAircraftId(String aircraftId) {
153         this.aircraftId = aircraftId;
154     }
155 
156     @Override
157     public String getHexIdent() {
158         return hexIdent;
159     }
160 
161     @Override
162     public void setHexIdent(String hexIdent) {
163         this.hexIdent = hexIdent;
164     }
165 
166     @Override
167     public String getFlightId() {
168         return flightId;
169     }
170 
171     @Override
172     public void setFlightId(String flightId) {
173         this.flightId = flightId;
174     }
175 
176     @Override
177     public String getDateMessageGenerated() {
178         return dateMessageGenerated;
179     }
180 
181     @Override
182     public void setDateMessageGenerated(String dateMessageGenerated) {
183         this.dateMessageGenerated = dateMessageGenerated;
184     }
185 
186     @Override
187     public String getTimeMessageGenerated() {
188         return timeMessageGenerated;
189     }
190 
191     @Override
192     public void setTimeMessageGenerated(String timeMessageGenerated) {
193         this.timeMessageGenerated = timeMessageGenerated;
194     }
195 
196     @Override
197     public String getDataMessageLogged() {
198         return dataMessageLogged;
199     }
200 
201     @Override
202     public void setDataMessageLogged(String dataMessageLogged) {
203         this.dataMessageLogged = dataMessageLogged;
204     }
205 
206     @Override
207     public String getTimeMessageLogged() {
208         return timeMessageLogged;
209     }
210 
211     @Override
212     public void setTimeMessageLogged(String timeMessageLogged) {
213         this.timeMessageLogged = timeMessageLogged;
214     }
215 
216     @Override
217     public StatusFlagsType getStatusFlags() {
218         return this.statusFlagsType;
219     }
220 
221     @Override
222     public void setStatusFlags(StatusFlagsType sft) {
223         this.statusFlagsType = sft;
224     }
225 
226     @Override
227     public String getCallsign() {
228         return callsign;
229     }
230 
231     @Override
232     public void setCallsign(String callsign) {
233         this.callsign = callsign;
234     }
235 
236     @Override
237     public String getAltitude() {
238         return altitude;
239     }
240 
241     @Override
242     public void setAltitude(String altitude) {
243         this.altitude = altitude;
244     }
245 
246     @Override
247     public String getGroundSpeed() {
248         return groundSpeed;
249     }
250 
251     @Override
252     public void setGroundSpeed(String groundSpeed) {
253         this.groundSpeed = groundSpeed;
254     }
255 
256     @Override
257     public String getTrack() {
258         return track;
259     }
260 
261     @Override
262     public void setTrack(String track) {
263         this.track = track;
264     }
265 
266     @Override
267     public String getLatitude() {
268         return latitude;
269     }
270 
271     @Override
272     public void setLatitude(String latitude) {
273         this.latitude = latitude;
274     }
275 
276     @Override
277     public String getLongitude() {
278         return longitude;
279     }
280 
281     @Override
282     public void setLongitude(String longitude) {
283         this.longitude = longitude;
284     }
285 
286     @Override
287     public String getVerticalRate() {
288         return verticalRate;
289     }
290 
291     @Override
292     public void setVerticalRate(String verticalRate) {
293         this.verticalRate = verticalRate;
294     }
295 
296     @Override
297     public String getSquawk() {
298         return squawk;
299     }
300 
301     @Override
302     public void setSquawk(String squawk) {
303         this.squawk = squawk;
304     }
305 
306     @Override
307     public String getAlertSquawkChange() {
308         return alertSquawkChange;
309     }
310 
311     @Override
312     public void setAlertSquawkChange(String alertSquawkChange) {
313         this.alertSquawkChange = alertSquawkChange;
314     }
315 
316     @Override
317     public String getEmergency() {
318         return emergency;
319     }
320 
321     @Override
322     public void setEmergency(String emergency) {
323         this.emergency = emergency;
324     }
325 
326     @Override
327     public String getIdentSPI() {
328         return identSPI;
329     }
330 
331     @Override
332     public void setIdentSPI(String identSPI) {
333         this.identSPI = identSPI;
334     }
335 
336     @Override
337     public boolean isOnGround() {
338         return onGround;
339     }
340 
341     @Override
342     public void setOnGround(boolean onGround) {
343         this.onGround = onGround;
344     }
345 
346     public static <T extends SBS1Message> T make(Object[] msg, Class<T> tClass) throws InvalidMessageBobyException {
347         SBS1FullMessage msgObj = new SBS1FullMessage();
348         try {
349             msgObj.setSessionID(String.valueOf(msg[2]));
350 
351             if (!CLK.class.equals(tClass)) {
352                 msgObj.setAircraftId(String.valueOf(msg[3]));
353                 msgObj.setHexIdent(String.valueOf(msg[4]));
354                 msgObj.setFlightId(String.valueOf(msg[5]));
355             }
356 
357             msgObj.setDateMessageGenerated(String.valueOf(msg[6]));
358             msgObj.setTimeMessageGenerated(String.valueOf(msg[7]));
359             msgObj.setDataMessageLogged(String.valueOf(msg[8]));
360             msgObj.setTimeMessageLogged(String.valueOf(msg[9]));
361 
362 
363             if (!AIR.class.equals(tClass) &&
364                     !CLK.class.equals(tClass)) {
365                 if (STA.class.equals(tClass)) {
366                     msgObj.setStatusFlags(StatusFlagsType.from(String.valueOf(msg[10])));
367                 } else {
368                     msgObj.setCallsign(String.valueOf(msg[10]));
369                 }
370             }
371 
372             if (!AIR.class.equals(tClass) &&
373                     !CLK.class.equals(tClass) &&
374                     !SEL.class.equals(tClass) &&
375                     !ID.class.equals(tClass) &&
376                     !STA.class.equals(tClass) &&
377                     !AIR.class.equals(tClass) &&
378                     !CLK.class.equals(tClass)) {
379 
380                 msgObj.setAltitude(String.valueOf(msg[11]));
381                 msgObj.setGroundSpeed(String.valueOf(msg[12]));
382                 msgObj.setTrack(String.valueOf(msg[13]));
383                 msgObj.setLatitude(String.valueOf(msg[14]));
384                 msgObj.setLongitude(String.valueOf(msg[15]));
385                 msgObj.setVerticalRate(String.valueOf(msg[16]));
386                 msgObj.setSquawk(String.valueOf(msg[17]));
387                 msgObj.setAlertSquawkChange(String.valueOf(msg[18]));
388                 msgObj.setEmergency(String.valueOf(msg[19]));
389                 msgObj.setIdentSPI(String.valueOf(msg[20]));
390                 msgObj.setOnGround((Boolean.parseBoolean(String.valueOf(msg[21]))));
391             }
392 
393         } catch (Throwable t) {
394             throw new InvalidMessageBobyException(t);
395         }
396         return (T) msgObj;
397     }
398 
399 
400     @Override
401     public String toString() {
402         final StringBuffer sb = new StringBuffer("SBS1FullMessage{");
403         sb.append("sessionID='").append(sessionID).append('\'');
404         sb.append(", aircraftId='").append(aircraftId).append('\'');
405         sb.append(", hexIdent='").append(hexIdent).append('\'');
406         sb.append(", flightId='").append(flightId).append('\'');
407         sb.append(", dateMessageGenerated='").append(dateMessageGenerated).append('\'');
408         sb.append(", timeMessageGenerated='").append(timeMessageGenerated).append('\'');
409         sb.append(", dataMessageLogged='").append(dataMessageLogged).append('\'');
410         sb.append(", timeMessageLogged='").append(timeMessageLogged).append('\'');
411         sb.append(", callsign='").append(callsign).append('\'');
412         sb.append(", altitude='").append(altitude).append('\'');
413         sb.append(", groundSpeed='").append(groundSpeed).append('\'');
414         sb.append(", track='").append(track).append('\'');
415         sb.append(", latitude='").append(latitude).append('\'');
416         sb.append(", longitude='").append(longitude).append('\'');
417         sb.append(", verticalRate='").append(verticalRate).append('\'');
418         sb.append(", squawk='").append(squawk).append('\'');
419         sb.append(", alertSquawkChange='").append(alertSquawkChange).append('\'');
420         sb.append(", emergency='").append(emergency).append('\'');
421         sb.append(", identSPI='").append(identSPI).append('\'');
422         sb.append(", onGround=").append(onGround);
423         sb.append('}');
424         return sb.toString();
425     }
426 
427 
428 }