Add AAI json body builder 45/82245/4
authorJoanna Jeremicz <joanna.jeremicz@nokia.com>
Thu, 14 Mar 2019 11:36:09 +0000 (12:36 +0100)
committerJoanna Jeremicz <joanna.jeremicz@nokia.com>
Fri, 15 Mar 2019 07:18:07 +0000 (08:18 +0100)
Change-Id: Ib169c2904c11a267fbea0c8d2ab32e562669b60a
Issue-ID: DCAEGEN2-1312
Signed-off-by: Joanna Jeremicz <joanna.jeremicz@nokia.com>
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParser.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/AaiProducerTaskImpl.java
prh-app-server/src/main/java/org/onap/dcaegen2/services/prh/tasks/DmaapPublisherTaskImpl.java
prh-app-server/src/test/java/org/onap/dcaegen2/services/prh/service/DmaapConsumerJsonParserTest.java
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java [new file with mode: 0644]
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/ConsumerDmaapModel.java
prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilderImpl.java [moved from prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/JsonBodyBuilderImpl.java with 54% similarity]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderTest.java [moved from prh-commons/src/test/java/org/onap/dcaegen2/services/prh/model/CommonFunctionsTest.java with 56% similarity]
prh-commons/src/test/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilderTest.java [new file with mode: 0644]

index f714158..00a6d46 100644 (file)
@@ -146,7 +146,7 @@ public class DmaapConsumerJsonParser {
                         .equipType(pnfEquipTypeOptionalField)
                         .nfRole(pnfNfRoleOptionalField)
                         .swVersion(pnfSwVersionOptionalField)
-                        .additionalFields(Optional.ofNullable(pnfAdditionalFields).orElse(new JsonObject())).build());
+                        .additionalFields(pnfAdditionalFields).build());
     }
 
     private String getValueFromJson(JsonObject jsonObject, String jsonKey) {
index 905eb72..355ca90 100644 (file)
@@ -25,8 +25,8 @@ import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.AaiNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 import org.onap.dcaegen2.services.prh.exceptions.PrhTaskException;
+import org.onap.dcaegen2.services.prh.model.AaiJsonBodyBuilderImpl;
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.JsonBodyBuilderImpl;
 import org.onap.dcaegen2.services.prh.model.utils.HttpUtils;
 import org.onap.dcaegen2.services.sdk.rest.services.aai.client.config.AaiClientConfiguration;
 import org.onap.dcaegen2.services.sdk.rest.services.aai.client.service.http.patch.AaiReactiveHttpPatchClient;
@@ -69,7 +69,7 @@ public class AaiProducerTaskImpl extends AaiProducerTask {
 
     @Override
     AaiReactiveHttpPatchClient resolveClient() throws SSLException {
-        return new AaiReactiveHttpPatchClient(resolveConfiguration(), new JsonBodyBuilderImpl()).createAaiWebClient(buildWebClient());
+        return new AaiReactiveHttpPatchClient(resolveConfiguration(), new AaiJsonBodyBuilderImpl()).createAaiWebClient(buildWebClient());
     }
 
     @Override
index 63e01c1..49accdd 100644 (file)
@@ -24,7 +24,7 @@ import org.onap.dcaegen2.services.prh.configuration.Config;
 import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
 
 import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.model.JsonBodyBuilderImpl;
+import org.onap.dcaegen2.services.prh.model.PnfReadyJsonBodyBuilderImpl;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.service.producer.DMaaPPublisherReactiveHttpClient;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.service.producer.DmaaPRestTemplateFactory;
 import org.onap.dcaegen2.services.sdk.rest.services.dmaap.client.service.producer.PublisherReactiveHttpClientFactory;
@@ -48,7 +48,7 @@ public class DmaapPublisherTaskImpl implements DmaapPublisherTask {
 
     @Autowired
     public DmaapPublisherTaskImpl(Config config) {
-        this(config, new PublisherReactiveHttpClientFactory(new DmaaPRestTemplateFactory(),new JsonBodyBuilderImpl()));
+        this(config, new PublisherReactiveHttpClientFactory(new DmaaPRestTemplateFactory(),new PnfReadyJsonBodyBuilderImpl()));
     }
 
     DmaapPublisherTaskImpl(Config config, PublisherReactiveHttpClientFactory httpClientFactory) {
index 8261fcf..ec8ac55 100644 (file)
@@ -155,7 +155,6 @@ class DmaapConsumerJsonParserTest {
             .equipType("type")
             .nfRole("gNB")
             .swVersion("v4.5.0.1")
-            .additionalFields(new JsonObject())
             .build();
         //when
         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
@@ -418,7 +417,6 @@ class DmaapConsumerJsonParserTest {
             .equipType("type")
             .nfRole("gNB")
             .swVersion("v4.5.0.1")
-            .additionalFields(new JsonObject())
             .build();
         Assertions.assertNotNull(consumerDmaapModel);
         Assertions.assertEquals(expectedObject, consumerDmaapModel);
@@ -471,7 +469,6 @@ class DmaapConsumerJsonParserTest {
             .equipType("type")
             .nfRole("gNB")
             .swVersion("v4.5.0.1")
-            .additionalFields(new JsonObject())
             .build();
         //when
         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
diff --git a/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java b/prh-commons/src/main/java/org/onap/dcaegen2/services/prh/model/AaiJsonBodyBuilderImpl.java
new file mode 100644 (file)
index 0000000..8e95a75
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.model;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.TypeAdapterFactory;
+import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
+
+import java.util.ServiceLoader;
+
+
+public class AaiJsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> {
+
+    /**
+     * Method for serialization object by GSON.
+     *
+     * @param consumerDmaapModel - object which will be serialized
+     * @return string from serialization
+     */
+    public String createJsonBody(ConsumerDmaapModel consumerDmaapModel) {
+        GsonBuilder gsonBuilder = new GsonBuilder();
+        ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory);
+
+        return gsonBuilder.create().toJson(ImmutableConsumerDmaapModel.builder()
+            .ipv4(consumerDmaapModel.getIpv4())
+            .ipv6(consumerDmaapModel.getIpv6())
+            .correlationId(consumerDmaapModel.getCorrelationId())
+            .serialNumber(consumerDmaapModel.getSerialNumber())
+            .equipVendor(consumerDmaapModel.getEquipVendor())
+            .equipModel(consumerDmaapModel.getEquipModel())
+            .equipType(consumerDmaapModel.getEquipType())
+            .nfRole(consumerDmaapModel.getNfRole())
+            .swVersion(consumerDmaapModel.getSwVersion())
+            .additionalFields(consumerDmaapModel.getAdditionalFields())
+            .build());
+    }
+}
\ No newline at end of file
index f6b817e..585190c 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.dcaegen2.services.prh.model;
 
 import com.google.gson.JsonObject;
 import com.google.gson.annotations.SerializedName;
+import org.springframework.lang.Nullable;
 import org.immutables.gson.Gson;
 import org.immutables.value.Value;
 import org.onap.dcaegen2.services.sdk.rest.services.model.AaiModel;
@@ -38,9 +39,11 @@ public interface ConsumerDmaapModel extends AaiModel, DmaapModel {
     @SerializedName(value = "correlationId", alternate = "correlationId")
     String getCorrelationId();
 
+    @Nullable
     @SerializedName(value = "ipaddress-v4-oam", alternate = "ipaddress-v4-oam")
     String getIpv4();
 
+    @Nullable
     @SerializedName(value = "ipaddress-v6-oam", alternate = "ipaddress-v6-oam")
     String getIpv6();
 
@@ -62,6 +65,7 @@ public interface ConsumerDmaapModel extends AaiModel, DmaapModel {
     @SerializedName(value = "sw-version", alternate = "sw-version")
     String getSwVersion();
 
+    @Nullable
     @SerializedName(value = "additionalFields", alternate = "additionalFields")
     JsonObject getAdditionalFields();
 }
@@ -22,16 +22,14 @@ package org.onap.dcaegen2.services.prh.model;
 
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import com.google.gson.TypeAdapterFactory;
+import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel.Builder;
 import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
 
 import java.util.ServiceLoader;
 
 
-public class JsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> {
-
-    public static final String ADDITIONAL_FIELDS = "additionalFields";
+public class PnfReadyJsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel> {
 
     /**
      * Method for serialization object by GSON.
@@ -42,27 +40,19 @@ public class JsonBodyBuilderImpl implements JsonBodyBuilder<ConsumerDmaapModel>
     public String createJsonBody(ConsumerDmaapModel consumerDmaapModel) {
         GsonBuilder gsonBuilder = new GsonBuilder();
         ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory);
-        return filterOutRedundantFields(gsonBuilder.create().toJson(ImmutableConsumerDmaapModel.builder()
-                .ipv4(consumerDmaapModel.getIpv4())
-                .ipv6(consumerDmaapModel.getIpv6())
-                .correlationId(consumerDmaapModel.getCorrelationId())
-                .serialNumber(consumerDmaapModel.getSerialNumber())
-                .equipVendor(consumerDmaapModel.getEquipVendor())
-                .equipModel(consumerDmaapModel.getEquipModel())
-                .equipType(consumerDmaapModel.getEquipType())
-                .nfRole(consumerDmaapModel.getNfRole())
-                .swVersion(consumerDmaapModel.getSwVersion())
-                .additionalFields(consumerDmaapModel.getAdditionalFields())
-                .build()));
-    }
-
-    private String filterOutRedundantFields(String json) {
-            JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
-            if(jsonObject.get(ADDITIONAL_FIELDS).equals(new JsonObject())) {
-                jsonObject.remove(ADDITIONAL_FIELDS);
-            }
-            jsonObject.remove("ipaddress-v4-oam");
-            jsonObject.remove("ipaddress-v6-oam");
-            return jsonObject.toString();
+        Builder builder = ImmutableConsumerDmaapModel.builder()
+            .correlationId(consumerDmaapModel.getCorrelationId())
+            .serialNumber(consumerDmaapModel.getSerialNumber())
+            .equipVendor(consumerDmaapModel.getEquipVendor())
+            .equipModel(consumerDmaapModel.getEquipModel())
+            .equipType(consumerDmaapModel.getEquipType())
+            .nfRole(consumerDmaapModel.getNfRole())
+            .swVersion(consumerDmaapModel.getSwVersion());
+
+        JsonObject additionalFields =  consumerDmaapModel.getAdditionalFields();
+        if(additionalFields != null && !additionalFields.equals(new JsonObject())) {
+            builder.additionalFields(additionalFields);
+        }
+        return gsonBuilder.create().toJson(builder.build());
     }
 }
\ No newline at end of file
@@ -26,17 +26,11 @@ import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
 import org.junit.jupiter.api.Test;
 
-class CommonFunctionsTest {
+class AaiJsonBodyBuilderTest {
 
     @Test
     void createJsonBody_shouldReturnJsonInString() {
 
-        JsonObject jsonObject = new JsonParser().parse("{\n"
-            + "        \"attachmentPoint\": \"bla-bla-30-3\",\n"
-            + "        \"cvlan\": \"678\",\n"
-            + "        \"svlan\": \"1005\"\n"
-            + "      }").getAsJsonObject();
-
         ConsumerDmaapModel model = ImmutableConsumerDmaapModel.builder()
                 .correlationId("NOKnhfsadhff")
                 .ipv4("256.22.33.155")
@@ -47,48 +41,20 @@ class CommonFunctionsTest {
                 .equipType("cell")
                 .nfRole("role")
                 .swVersion("1.2.3")
-                .additionalFields(jsonObject)
                 .build();
 
         String expectedResult = "{"
                 + "\"correlationId\":\"NOKnhfsadhff\","
+                + "\"ipaddress-v4-oam\":\"256.22.33.155\","
+                + "\"ipaddress-v6-oam\":\"200J:0db8:85a3:0000:0000:8a2e:0370:7334\","
                 + "\"serial-number\":\"1234\","
                 + "\"equip-vendor\":\"NOKIA\","
                 + "\"equip-model\":\"3310\","
                 + "\"equip-type\":\"cell\","
                 + "\"nf-role\":\"role\","
-                + "\"sw-version\":\"1.2.3\","
-                + "\"additionalFields\":{\"attachmentPoint\":\"bla-bla-30-3\",\"cvlan\":\"678\",\"svlan\":\"1005\"}"
-                + "}";
-
-        assertEquals(expectedResult, new JsonBodyBuilderImpl().createJsonBody(model));
-    }
-
-    @Test
-    void createJsonBodyWithEmptyOptionalPnfRegistrationFields_shouldReturnJsonInString() {
-        ConsumerDmaapModel model = ImmutableConsumerDmaapModel.builder()
-                .correlationId("NOKnhfsadhff")
-                .ipv4("256.22.33.155")
-                .ipv6("200J:0db8:85a3:0000:0000:8a2e:0370:7334")
-                .serialNumber("")
-                .equipVendor("")
-                .equipModel("")
-                .equipType("")
-                .nfRole("")
-                .swVersion("")
-                .additionalFields(new JsonObject())
-                .build();
-
-        String expectedResult = "{"
-                + "\"correlationId\":\"NOKnhfsadhff\","
-                + "\"serial-number\":\"\","
-                + "\"equip-vendor\":\"\","
-                + "\"equip-model\":\"\","
-                + "\"equip-type\":\"\","
-                + "\"nf-role\":\"\","
-                + "\"sw-version\":\"\""
+                + "\"sw-version\":\"1.2.3\""
                 + "}";
 
-        assertEquals(expectedResult, new JsonBodyBuilderImpl().createJsonBody(model));
+        assertEquals(expectedResult, new AaiJsonBodyBuilderImpl().createJsonBody(model));
     }
 }
diff --git a/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilderTest.java b/prh-commons/src/test/java/org/onap/dcaegen2/services/prh/model/PnfReadyJsonBodyBuilderTest.java
new file mode 100644 (file)
index 0000000..eb6f476
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.model;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import org.junit.jupiter.api.Test;
+
+class PnfReadyJsonBodyBuilderTest {
+
+    @Test
+    void createJsonBody_shouldReturnJsonInString() {
+
+        JsonObject jsonObject = new JsonParser().parse("{\n"
+            + "        \"attachmentPoint\": \"bla-bla-30-3\",\n"
+            + "        \"cvlan\": \"678\",\n"
+            + "        \"svlan\": \"1005\"\n"
+            + "      }").getAsJsonObject();
+
+        ConsumerDmaapModel model = ImmutableConsumerDmaapModel.builder()
+            .correlationId("NOKnhfsadhff")
+            .ipv4("256.22.33.155")
+            .ipv6("200J:0db8:85a3:0000:0000:8a2e:0370:7334")
+            .serialNumber("1234")
+            .equipVendor("NOKIA")
+            .equipModel("3310")
+            .equipType("cell")
+            .nfRole("role")
+            .swVersion("1.2.3")
+            .additionalFields(jsonObject)
+            .build();
+
+        String expectedResult = "{"
+            + "\"correlationId\":\"NOKnhfsadhff\","
+            + "\"serial-number\":\"1234\","
+            + "\"equip-vendor\":\"NOKIA\","
+            + "\"equip-model\":\"3310\","
+            + "\"equip-type\":\"cell\","
+            + "\"nf-role\":\"role\","
+            + "\"sw-version\":\"1.2.3\","
+            + "\"additionalFields\":{\"attachmentPoint\":\"bla-bla-30-3\",\"cvlan\":\"678\",\"svlan\":\"1005\"}"
+            + "}";
+
+        assertEquals(expectedResult, new PnfReadyJsonBodyBuilderImpl().createJsonBody(model));
+    }
+
+    @Test
+    void createJsonBodyWithNullableFieldsNotSet_shouldReturnJsonInString() {
+
+        ConsumerDmaapModel model = ImmutableConsumerDmaapModel.builder()
+            .correlationId("NOKnhfsadhff")
+            .serialNumber("1234")
+            .equipVendor("NOKIA")
+            .equipModel("3310")
+            .equipType("cell")
+            .nfRole("role")
+            .swVersion("1.2.3")
+            .build();
+
+        String expectedResult = "{"
+            + "\"correlationId\":\"NOKnhfsadhff\","
+            + "\"serial-number\":\"1234\","
+            + "\"equip-vendor\":\"NOKIA\","
+            + "\"equip-model\":\"3310\","
+            + "\"equip-type\":\"cell\","
+            + "\"nf-role\":\"role\","
+            + "\"sw-version\":\"1.2.3\""
+            + "}";
+
+        assertEquals(expectedResult, new PnfReadyJsonBodyBuilderImpl().createJsonBody(model));
+    }
+
+    @Test
+    void createJsonBodyWithEmptyOptionalPnfRegistrationFields_shouldReturnJsonInString() {
+        JsonObject jsonObject = new JsonParser().parse("{}").getAsJsonObject();
+
+        ConsumerDmaapModel model = ImmutableConsumerDmaapModel.builder()
+            .correlationId("NOKnhfsadhff")
+            .ipv4("256.22.33.155")
+            .ipv6("200J:0db8:85a3:0000:0000:8a2e:0370:7334")
+            .serialNumber("")
+            .equipVendor("")
+            .equipModel("")
+            .equipType("")
+            .nfRole("")
+            .swVersion("")
+            .additionalFields(jsonObject)
+            .build();
+
+        String expectedResult = "{"
+            + "\"correlationId\":\"NOKnhfsadhff\","
+            + "\"serial-number\":\"\","
+            + "\"equip-vendor\":\"\","
+            + "\"equip-model\":\"\","
+            + "\"equip-type\":\"\","
+            + "\"nf-role\":\"\","
+            + "\"sw-version\":\"\""
+            + "}";
+
+        assertEquals(expectedResult, new PnfReadyJsonBodyBuilderImpl().createJsonBody(model));
+    }
+}