From 5d3ed6ff2fe76e2510867379fdf58d4e99b2cc9f Mon Sep 17 00:00:00 2001 From: mpriyank Date: Thu, 26 May 2022 20:25:40 +0100 Subject: [PATCH] Fixing CompositeState mapping - Mapper null check - NcmpServiceCmHandle mapping for the new composite state - Added global parameter for jackson to include only NON_NULL attributes in the response Issue-ID: CPS-1066 Change-Id: I1924fef45345c77873f9c788baa701311e72bea7 Signed-off-by: mpriyank --- cps-application/src/main/resources/application.yml | 3 +++ .../ncmp/rest/mapper/RestOutputCmHandleStateMapper.java | 10 +++++++++- .../cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java | 1 + .../api/impl/NetworkCmProxyDataServiceImplSpec.groovy | 15 ++++++++++----- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/cps-application/src/main/resources/application.yml b/cps-application/src/main/resources/application.yml index 692996c98..af886a142 100644 --- a/cps-application/src/main/resources/application.yml +++ b/cps-application/src/main/resources/application.yml @@ -79,6 +79,9 @@ spring: spring.deserializer.value.delegate.class: org.springframework.kafka.support.serializer.JsonDeserializer spring.json.value.default.type: org.onap.cps.ncmp.event.model.DmiAsyncRequestResponseEvent spring.json.use.type.headers: false + + jackson: + default-property-inclusion: NON_NULL app: ncmp: async-m2m: diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java index 89015cca9..ce3206829 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java @@ -23,13 +23,16 @@ package org.onap.cps.ncmp.rest.mapper; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Named; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; import org.onap.cps.ncmp.api.inventory.CmHandleState; import org.onap.cps.ncmp.api.inventory.CompositeState; import org.onap.cps.ncmp.rest.model.DataStores; import org.onap.cps.ncmp.rest.model.RestOutputCmHandleState; import org.onap.cps.ncmp.rest.model.SyncState; -@Mapper(componentModel = "spring") +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT) public interface RestOutputCmHandleStateMapper { @Mapping(target = "dataSyncState", source = "dataStores", qualifiedByName = "dataStoreToDataSyncState") @@ -45,6 +48,10 @@ public interface RestOutputCmHandleStateMapper { @Named("dataStoreToDataSyncState") static DataStores toDataStores(CompositeState.DataStores compositeStateDataStore) { + if (compositeStateDataStore == null) { + return null; + } + final DataStores dataStores = new DataStores(); if (compositeStateDataStore.getRunningDataStore() != null) { @@ -68,6 +75,7 @@ public interface RestOutputCmHandleStateMapper { /** * Converts cmHandleState enum value to equivalent string. + * * @param cmHandleState cm handle state enum * @return cm handle state as string */ diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java index 240e3c57d..64942e4bb 100755 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -193,6 +193,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService final List dmiProperties = yangModelCmHandle.getDmiProperties(); final List publicProperties = yangModelCmHandle.getPublicProperties(); ncmpServiceCmHandle.setCmHandleId(yangModelCmHandle.getId()); + ncmpServiceCmHandle.setCompositeState(yangModelCmHandle.getCompositeState()); setDmiProperties(dmiProperties, ncmpServiceCmHandle); setPublicProperties(publicProperties, ncmpServiceCmHandle); return ncmpServiceCmHandle; diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy index 161cf9892..be13344cf 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -24,6 +24,8 @@ package org.onap.cps.ncmp.api.impl import org.onap.cps.ncmp.api.impl.operations.YangModelCmHandleRetriever import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle +import org.onap.cps.ncmp.api.inventory.CmHandleState +import org.onap.cps.ncmp.api.inventory.CompositeState import org.onap.cps.ncmp.api.models.DmiPluginRegistration import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle import org.onap.cps.spi.exceptions.DataValidationException @@ -167,16 +169,19 @@ class NetworkCmProxyDataServiceImplSpec extends Specification { def 'Get a cm handle.'() { given: 'the system returns a yang modelled cm handle' def dmiServiceName = 'some service name' - def dmiProperties = [new YangModelCmHandle.Property('aDmiProperty', 'a dmi value')] - def publicProperties = [new YangModelCmHandle.Property('aPublicProperty', 'a public value')] - def yangModelCmHandle = new YangModelCmHandle(id:'some-cm-handle', dmiServiceName: dmiServiceName, dmiProperties: dmiProperties, publicProperties: publicProperties) + def dmiProperties = [new YangModelCmHandle.Property('Book', 'Romance Novel')] + def publicProperties = [new YangModelCmHandle.Property('Public Book', 'Public Romance Novel')] + def compositeState = new CompositeState(cmhandleState: 'ADVISED') + def yangModelCmHandle = new YangModelCmHandle(id: 'some-cm-handle', dmiServiceName: dmiServiceName, + dmiProperties: dmiProperties, publicProperties: publicProperties, compositeState: compositeState) 1 * mockYangModelCmHandleRetriever.getYangModelCmHandle('some-cm-handle') >> yangModelCmHandle when: 'getting cm handle details for a given cm handle id from ncmp service' def result = objectUnderTest.getNcmpServiceCmHandle('some-cm-handle') then: 'the result returns the correct data' result.cmHandleId == 'some-cm-handle' - result.dmiProperties ==[ aDmiProperty:'a dmi value' ] - result.publicProperties == [ aPublicProperty:'a public value' ] + result.dmiProperties ==[ Book:'Romance Novel' ] + result.publicProperties == [ "Public Book":'Public Romance Novel' ] + result.compositeState.cmhandleState == CmHandleState.ADVISED } def 'Get a cm handle with an invalid id.'() { -- 2.16.6