From 87c37c0829220137fed2fee7967e2c89cd90df46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20J=C3=A4rvinen?= Date: Tue, 10 Sep 2024 15:14:20 +0300 Subject: [PATCH 1/2] Validate that topic operatorId and vehicleNumber are numeric, and transportMode is not empty --- .../java/fi/hsl/common/hfp/HfpParser.java | 19 +++++++++++++++++-- .../java/fi/hsl/common/hfp/HfpParserTest.java | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/fi/hsl/common/hfp/HfpParser.java b/src/main/java/fi/hsl/common/hfp/HfpParser.java index b8a66b8..72458ec 100644 --- a/src/main/java/fi/hsl/common/hfp/HfpParser.java +++ b/src/main/java/fi/hsl/common/hfp/HfpParser.java @@ -226,9 +226,24 @@ public static Hfp.Topic parseTopic(@NotNull String topic, long receivedAtMs) thr if (strTransportMode != null && !strTransportMode.isEmpty()) { final Hfp.Topic.TransportMode transportMode = safeValueOf(Hfp.Topic.TransportMode.class, strTransportMode).orElseThrow(() -> new InvalidHfpTopicException("Unknown transport mode: " + topic)); builder.setTransportMode(transportMode); + } else { + throw new InvalidHfpTopicException("Transport mode missing"); + } + + final String operatorIdStr = parts[index++]; + try { + builder.setOperatorId(Integer.parseInt(operatorIdStr)); + } catch (NumberFormatException e) { + throw new InvalidHfpTopicException("Operator id is not number: " + operatorIdStr); + } + + final String vehicleNumberString = parts[index++]; + try { + builder.setVehicleNumber(Integer.parseInt(vehicleNumberString)); + } catch (NumberFormatException e) { + throw new InvalidHfpTopicException("Vehicle number is not number: " + vehicleNumberString); } - builder.setOperatorId(Integer.parseInt(parts[index++])); - builder.setVehicleNumber(Integer.parseInt(parts[index++])); + builder.setUniqueVehicleId(createUniqueVehicleId(builder.getOperatorId(), builder.getVehicleNumber())); if (index + 6 <= parts.length) { HfpValidator.validateString(parts[index++]).ifPresent(builder::setRouteId); diff --git a/src/test/java/fi/hsl/common/hfp/HfpParserTest.java b/src/test/java/fi/hsl/common/hfp/HfpParserTest.java index 8bd71d4..d8d4d35 100644 --- a/src/test/java/fi/hsl/common/hfp/HfpParserTest.java +++ b/src/test/java/fi/hsl/common/hfp/HfpParserTest.java @@ -284,10 +284,10 @@ public void parseGeohashWithOverloadedZeroLevel() throws Exception { @Test public void parseTopicWhenItemsMissing() throws Exception { - Hfp.Topic meta = parseAndValidateTopic("/hfp/v1/journey/ongoing//0022/00854//////////"); + Hfp.Topic meta = parseAndValidateTopic("/hfp/v1/journey/ongoing/bus/0022/00854//////////"); assertEquals(Hfp.Topic.JourneyType.journey, meta.getJourneyType()); assertEquals(Hfp.Topic.TemporalType.ongoing, meta.getTemporalType()); - assertFalse(meta.hasTransportMode()); + assertEquals(Hfp.Topic.TransportMode.bus, meta.getTransportMode()); assertEquals(22, meta.getOperatorId()); assertEquals(854, meta.getVehicleNumber()); From d7c73ac47de7dda68ec5dc1f30880b0e5982534d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20J=C3=A4rvinen?= Date: Tue, 10 Sep 2024 15:14:54 +0300 Subject: [PATCH 2/2] Update version to 1.6.2-RC --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 506a0bc..9ce8e81 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 fi.hsl transitdata-common - 1.6.1 + 1.6.2-RC jar Common utilities for Transitdata projects