fix for more empty fields in SwissTiming RPD messages

Change-Id: I05678d7fc920d946e70f3ba993ca96fd279494f4
This commit is contained in:
Axel Uhl committed 2018-09-14 09:15:29 +02:00
1 parent d828771f5c
commit 446261aca4
3 files changed
+19 -8

No files matched your search

@@ -22,6 +22,17 @@ public class RPDMessageParsingTest {
@Test
public void parseRPDMessage() throws InterruptedException, ParseException, UnknownHostException, IOException {
final String rpdMessage = "RPD|8aaa6db1-2084-4067-bf0b-2c24481b42da|2,|2018-09-13T15:06:39+09:00|14:50:00|00:16:39|2|315|97|03a52cb2-8a24-49d7-aebb-7e760be763a3;5;0;35.284932;139.516334;0.0;;;270;;;;;|0a66267e-3551-48e8-9872-adee288ceea4;5;229;35.287947;139.524639;0.8;;;312;;;;;|0b9e8236-f163-478e-8db9-67a4439db253;5;0;35.242476;139.5462;0.2;;;90;;;;;|0f06f40f-09de-49f6-9024-69aca52e387b;5;0;35.250663;139.556997;0.2;;;39;;;;;|0f1a7451-d242-4e8f-90b1-b00585356c0e;3;0;35.240411;139.546359;0.0;;;203;;;;;|0f519aeb-fb96-422b-83c9-6018dead3d22;3;0;35.247031;139.512632;0.4;;;296;;;;;|118d1ea9-ff87-4591-89d9-6cc58a5251d1;3;0;35.286932;139.511812;0.8;;;306;;;;;|152ae7ba-930a-43d2-a1dd-89e6ff60a3d0;3;0;35.241575;139.537837;0.2;;;158;;;;;|16fa57f0-10f4-4ac8-8fc0-4b8c875ebd33;5;0;35.256665;139.519313;1.0;;;64;;;;;|1db8195b-f5e2-4df1-af6d-e87386d224b9;5;0;35.290532;139.517897;0.6;;;270;;;;;|1ebbc2d1-78ed-420f-beec-9fad8fd5daa4;5;0;35.293927;139.511108;0.6;;;337;;;;;|1f32b277-ad3a-4ca7-9323-bc4458b971b7;5;0;35.28621;139.517586;0.6;;;291;;;;;|23fe9e60-7a93-4d58-b5a0-b73e51fff893;3;0;35.291366;139.495241;0.0;;;124;;;;;|244c5fc7-bf67-46e0-a6f1-d4d052c873be;5;0;35.243593;139.537314;0.4;;;360;;;;;|26229b56-4775-4a96-a611-a7e1de9781fd;5;0;35.299624;139.483962;0.0;;;219;;;;;|32f27c17-4c23-4770-973f-190cf08d6aa8;5;0;35.248049;139.54433;3.9;;;231;;;;;|35e389df-91df-4002-831b-7687d53e0ae5;5;0;35.274886;139.537612;2.1;;;123;;;;;|39217d61-9712-4e2b-b273-46cb3dfe67b9;5;0;35.290478;139.517889;0.6;;;287;;;;;|3ab16d2e-3913-4eee-94d7-ba0b5ea6ba6e;5;0;35.288054;139.512915;0.2;;;248;;;;;|3b1d3b5e-6076-48d4-ac25-6af78653d25c;5;;;;;;;;;;;;|3d1dae40-7b67-4c91-b96b-cd64323e7729;3;0;35.270134;139.529297;0.0;;;138;;;;;|3ffa6395-9c48-4778-8435-23941f1468b5;3;0;35.271402;139.528498;2.1;;;75;;;;;|43c0afca-4541-407e-a838-62b0b9c6107a;5;0;35.243898;139.536739;0.4;;;203;;;;;|4949c1bc-1a64-41e7-aac0-1755e1475654;5;0;35.259178;139.493608;0.4;;;301;;;;;|4fea8d8c-7f82-480c-9be6-54b156835be3;3;57;35.255563;139.48385;0.0;;;141;;;;;|5221ccc9-a2c6-488e-a997-14b3011ea690;5;0;35.270109;139.529213;0.0;;;202;;;;;|5ab4c57a-8f62-49da-98f7-1a3b55d3aef4;3;82;35.287856;139.495553;0.0;;;90;;;;;|5edd2a5c-60dc-452d-8531-351b28c9da47;5;0;35.259076;139.493317;2.7;;;112;;;;;|5f2be0cf-c409-4cd5-8c6f-73ec04c74cec;5;0;35.288788;139.496593;0.4;;;300;;;;;|61510f24-5a80-4495-aade-6e6dfb97cff0;5;618;35.261148;139.494548;1.4;;;226;;;;;|64bc1273-8aab-4ef1-8bf9-748ccc40f2d5;5;0;35.256647;139.519281;1.2;;;68;;;;;|65fa9055-0e4f-406b-8cdb-9da6a31fbfef;5;0;35.287871;139.523833;0.6;;;248;;;;;|66733af1-355b-4b2d-863d-3cbcae89cb22;5;0;35.290807;139.507125;0.4;;;90;;;;;|6a52394f-3f3f-4a36-98ef-bbcdf623c0e1;5;0;35.250647;139.556728;0.4;;;270;;;;;|6ee5589d-79ce-4a39-93fe-6571d68a94fd;5;9042;35.252182;139.546278;11.7;;;130;;;;;|7721940e-6ae6-4157-8c42-8eb22b5ae58f;3;0;35.255564;139.483859;0.2;;;90;;;;;|81de4f19-0e37-419e-82eb-d369a040ee7c;5;0;35.284915;139.516334;0.0;;;90;;;;;|844cc0c6-e73d-41f6-9d80-5151f6878cde;5;0;35.284906;139.516346;0.0;;;270;;;;;|85fadddc-983c-4254-9273-4a1ad73b5731;5;0;35.288784;139.49661;0.4;;;270;;;;;|8b892963-e078-40ff-b6a4-67b87bdc4855;5;0;35.253099;139.51882;0.2;;;360;;;;;|922f94be-7724-4004-9d24-6a5eb7286099;5;83;35.287871;139.524114;0.6;;;238;;;;;|93926478-f928-432c-901d-431003ef0f18;5;0;35.290555;139.517883;0.6;;;270;;;;;|98e428d2-a181-4162-9060-ebdb4313cb2a;5;0;35.28807;139.512915;0.2;;;239;;;;;|9a3298d4-b405-429e-8170-9dacada0bfba;5;0;35.271545;139.529741;0.2;;;360;;;;;|9cc93765-02c2-4f5f-ad9f-14e469d4874d;3;0;35.247147;139.513394;0.0;;;321;;;;;|9d4263f5-52e6-4dcd-94c6-9ae841d06c76;3;0;35.286935;139.511785;0.6;;;270;;;;;|a03b195b-cf20-4e52-8d05-68717adea11e;3;0;35.284925;139.516377;0.0;;;90;;;;;|a3005701-0870-45cc-84db-3b678afc3a23;3;0;35.287403;139.515162;0.0;;;90;;;;;|a3269b48-739c-497e-846a-3be163457320;3;0;35.270132;139.529265;0.0;;;143;;;;;|a46cc3c5-a142-424e-9b0a-e8bdcb82f813;3;0;35.247431;139.5111;0.4;;;339;;;;;|b2ec920a-8192-4c4b-a58c-0b2e43f6e9f4;3;0;35.254888;139.484122;0.2;;;90;;;;;|b55cc804-3a74-4db4-9ed0-b0b2e931b24f;5;0;35.271023;139.530127;0.2;;;90;;;;;|c1515836-34e1-4ba6-b3bd-1edda4659d3b;5;0;35.299634;139.483991;0.0;;;360;;;;;|c4e9491d-aa36-4e20-aacf-9b4cfa3df61d;5;0;35.248233;139.512246;0.6;;;90;;;;;|ca028761-bec6-4513-9f00-e0fef2b3d606;3;273;35.271139;139.528568;0.6;;;321;;;;;|ca84e3c3-b991-4025-a24f-903135d4a7e5;3;0;35.245991;139.548126;2.5;;;222;;;;;|cf5af8a8-fe68-48b8-9dde-29b5ba8dc073;5;0;35.286219;139.517599;0.6;;;292;;;;;|cf76e9a5-8244-41f3-987a-bef529c48a74;5;0;35.250647;139.557105;0.2;;;270;;;;;|d37712aa-62b8-498d-8970-ea9a8e859ab1;3;12;35.285947;139.496245;1.2;;;81;;;;;|d4348384-01fc-40ed-818d-f7375a187e4f;5;0;35.248715;139.511822;0.0;;;244;;;;;|de02144b-771e-49ea-bc2f-f52d3d22a3dd;3;0;35.254877;139.484061;0.2;;;270;;;;;|df78084b-e9bc-475c-a418-48a5cc4d992f;5;0;35.277041;139.540017;0.6;;;143;;;;;|dfa00db0-3fa0-4524-a468-2d9d7b45a150;5;0;35.290436;139.507;0.6;;;22;;;;;|e1dbea90-bc68-4798-b3d6-c7d3bbc8bbd0;3;0;35.241517;139.53Line truncated
assertRPDMessageCanBeParsed(rpdMessage);
}
@Test
public void parseRPDWithEmptyStringsMessage() throws InterruptedException, ParseException, UnknownHostException, IOException {
final String rpdMessage = "RPD|005ec96a-9751-45d5-b77a-4ff2db19702f|,|2018-09-14T05:25:27+00:00|||||1|457898af-5af3-441e-9a80-bbc09379855c;;;35.299492;139.484399;0.0;;;33;;;;;";
assertRPDMessageCanBeParsed(rpdMessage);
}
private void assertRPDMessageCanBeParsed(final String rpdMessage)
throws InterruptedException, ParseException, IOException {
final SailMasterMessage message = new SailMasterMessageImpl(rpdMessage);
final SailMasterConnectorImpl connector = new SailMasterConnectorImpl(/* host */ "8.8.8.8", /* port */ 443, /* raceId */ null, /* raceName */ null, /* raceDescription */ null, /* boatClass */ null);
final boolean[] receivedPositionData = new boolean[1];
@@ -361,16 +361,16 @@ public class SailMasterConnectorImpl extends SailMasterTransceiverImpl implement
assert message.getType() == MessageType.RPD;
String[] sections = message.getSections();
String raceID = sections[1];
final RaceStatus raceStatus;
final RacingStatus racingStatus;
final String[] raceStatusIntAndRacingStatusInt = sections[2].split(",");
final String raceStatusAsString = raceStatusIntAndRacingStatusInt.length > 0 ? raceStatusIntAndRacingStatusInt[0] : null;
final RaceStatus raceStatus = raceStatusAsString == null || raceStatusAsString.trim().isEmpty() ? null : RaceStatus.values()[Integer.valueOf(raceStatusAsString)];
final String racingStatusAsString;
if (raceStatusIntAndRacingStatusInt.length > 1) {
raceStatus = RaceStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[0])];
racingStatus = RacingStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[1])];
racingStatusAsString = raceStatusIntAndRacingStatusInt[1];
} else {
raceStatus = RaceStatus.values()[Integer.valueOf(raceStatusIntAndRacingStatusInt[0])];
racingStatus = null;
racingStatusAsString = null;
}
final RacingStatus racingStatus = racingStatusAsString == null || racingStatusAsString.trim().isEmpty() ? null : RacingStatus.values()[Integer.valueOf(racingStatusAsString)];
TimePoint timePoint = new MillisecondsTimePoint(parseTimeAndDateISO(sections[3], raceID));
lastRPDMessageTimePoint = timePoint;
String dateISO = sections[3].substring(0, sections[3].indexOf('T'));
@@ -392,7 +392,8 @@ public class SailMasterConnectorImpl extends SailMasterTransceiverImpl implement
if (fixSections.length > 2) {
final String trackedObjectIdAsString = fixSections[fixDetailIndex++].trim();
if (trackedObjectIdAsString != null && !trackedObjectIdAsString.trim().isEmpty()) {
final TrackerType trackerType = TrackerType.values()[Integer.valueOf(fixSections[fixDetailIndex++])];
final String trackerTypeAsString = fixSections[fixDetailIndex++];
final TrackerType trackerType = trackerTypeAsString == null || trackerTypeAsString.trim().isEmpty() ? null : TrackerType.values()[Integer.valueOf(trackerTypeAsString)];
final String ageOfDataInMillisAsString = fixSections[fixDetailIndex++];
final Long ageOfDataInMilliseconds = ageOfDataInMillisAsString==null || ageOfDataInMillisAsString.trim().isEmpty() ? null : (1000l * Long.valueOf(ageOfDataInMillisAsString));
final String latDegAsString = fixSections[fixDetailIndex++];
@@ -38,7 +38,6 @@
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.datamining.annotations/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.security.common/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sse.shared.android/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.json.simple/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/com.sap.sailing.geocoding/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>