From 3a35e31081b72d8d35721b5c574cdc447cd6d007 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Sat, 2 Mar 2024 12:50:48 +0100 Subject: [PATCH 1/2] Add jackson-core dependency and refactor JSON handling The jackson-core dependency was added in `pom.xml` to enhance JSON handling in the application. The `DeviceMeasurement` class was refactored to handle null fields when generating JSON output. Helper methods were introduced for managing `externalDataReference`, `dateCreated`, and `location` fields. This change improves output cleanliness and standardizes data for users and systems. --- pom.xml | 5 +++ .../fiware/model/DeviceMeasurement.java | 43 +++++++++++++------ .../api/DeviceMeasurementValidJsonTest.java | 43 +++++++++++++++++++ 3 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 src/test/java/de/app/fivegla/fiware/api/DeviceMeasurementValidJsonTest.java diff --git a/pom.xml b/pom.xml index 7799c66..572cf2d 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,11 @@ slf4j-nop 2.0.6 + + com.fasterxml.jackson.core + jackson-core + 2.16.1 + org.junit.jupiter junit-jupiter-engine diff --git a/src/main/java/de/app/fivegla/fiware/model/DeviceMeasurement.java b/src/main/java/de/app/fivegla/fiware/model/DeviceMeasurement.java index bd666a2..2eb7113 100644 --- a/src/main/java/de/app/fivegla/fiware/model/DeviceMeasurement.java +++ b/src/main/java/de/app/fivegla/fiware/model/DeviceMeasurement.java @@ -98,27 +98,46 @@ public String asJson() { " \"name\":\"" + name + "\"," + " \"type\":\"" + type + "\"," + " \"value\":" + value + "," + - " \"externalDataLink\":" + (StringUtils.isNotBlank(externalDataReference) ? externalDataReference : " ") + "\"," + + " \"externalDataLink\":" + externalDataReferenceAsJson() + "," + " \"dateCreated\":" + dateCreatedAsJson() + "," + " \"location\":" + locationAsJson() + "}"; } + private String externalDataReferenceAsJson() { + if (StringUtils.isBlank(externalDataReference)) { + return "{}"; + } else { + return "{" + + " \"type\":\"" + FiwareType.TEXT.getKey() + "\"," + + " \"value\":\"" + externalDataReference + "\"" + + "}"; + } + } + private String dateCreatedAsJson() { - return "{" + - " \"type\":\"" + FiwareType.DATE_TIME.getKey() + "\"," + - " \"value\":\"" + formatter.format(dateCreated) + "\"" + - "}"; + if (null == dateCreated) { + return "{}"; + } else { + return "{" + + " \"type\":\"" + FiwareType.DATE_TIME.getKey() + "\"," + + " \"value\":\"" + formatter.format(dateCreated) + "\"" + + "}"; + } } private String locationAsJson() { - return "{" + - " \"type\":\"" + FiwareType.GEO_POINT.getKey() + "\"," + - " \"value\": {" + - " \"type\":\"Point\"," + - " \"coordinates\": [" + longitude + "," + latitude + "]" + - " }" + - "}"; + if (latitude == 0.0 && longitude == 0.0) { + return "{}"; + } else { + return "{" + + " \"type\":\"" + FiwareType.GEO_POINT.getKey() + "\"," + + " \"value\": {" + + " \"type\":\"Point\"," + + " \"coordinates\": [" + longitude + "," + latitude + "]" + + " }" + + "}"; + } } @Override diff --git a/src/test/java/de/app/fivegla/fiware/api/DeviceMeasurementValidJsonTest.java b/src/test/java/de/app/fivegla/fiware/api/DeviceMeasurementValidJsonTest.java new file mode 100644 index 0000000..7f33f7c --- /dev/null +++ b/src/test/java/de/app/fivegla/fiware/api/DeviceMeasurementValidJsonTest.java @@ -0,0 +1,43 @@ +package de.app.fivegla.fiware.api; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import de.app.fivegla.fiware.model.builder.DeviceMeasurementBuilder; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.Instant; +import java.util.UUID; + +class DevxiceMeasurementValidJsonTest { + + @Test + void givenDeviceMeasurement_WhenCreatingJson_ThenTheResultShouldBeValidJson() throws Exception { + var deviceMeasurementAsJson = new DeviceMeasurementBuilder() + .withId(UUID.randomUUID().toString()) + .withType(FiwareType.TEXT.name()) + .withMeasurement("value", FiwareType.TEXT, 2.0, Instant.now(), 4.0, 8.0) + .build() + .asJson(); + var objectMapper = new ObjectMapper(); + var jsonNode = objectMapper.readTree(deviceMeasurementAsJson); + Assertions.assertEquals(FiwareType.TEXT.getKey(), jsonNode.get("type").asText()); + Assertions.assertEquals(2.0, jsonNode.get("value").asDouble()); + } + + @Test + void givenDeviceMeasurementWithExternalDataReference_WhenCreatingJson_ThenTheResultShouldBeValidJson() throws Exception { + var deviceMeasurementAsJson = new DeviceMeasurementBuilder() + .withId(UUID.randomUUID().toString()) + .withType(FiwareType.TEXT.name()) + .withMeasurement("value", FiwareType.TEXT, 2.0, Instant.now(), 4.0, 8.0) + .withExternalDataReference("http://example.com") + .build() + .asJson(); + var objectMapper = new ObjectMapper(); + var jsonNode = objectMapper.readTree(deviceMeasurementAsJson); + Assertions.assertEquals(FiwareType.TEXT.getKey(), jsonNode.get("type").asText()); + Assertions.assertEquals(2.0, jsonNode.get("value").asDouble()); + } + +} From e42f186a0de58abed5b2f03757932e43e6cbf5c9 Mon Sep 17 00:00:00 2001 From: Sascha Doemer Date: Sat, 2 Mar 2024 12:51:04 +0100 Subject: [PATCH 2/2] Update pom.xml version The version of "fiware-integration-layer" has been updated in pom.xml from 11.0.0 to 11.1.0. This version bump is in line with the usual progress and software versioning convention. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 572cf2d..3f1d683 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.app.5gla fiware-integration-layer - 11.0.0 + 11.1.0 5gLa FIWARE integration layer https://github.com/vitrum-connect/5gla-fiware-integration-layer