Move TrustLevel Feature 25/138325/4
authorToineSiebelink <toine.siebelink@est.tech>
Tue, 25 Jun 2024 13:40:40 +0000 (14:40 +0100)
committerToineSiebelink <toine.siebelink@est.tech>
Wed, 26 Jun 2024 14:03:09 +0000 (15:03 +0100)
-Moved TrustLevel impl from Controller to Inventory Facade
-Applied new package name convention using impl\inventory\trustlevel for this (sub)feature
-Renamed some trustlevel related classes to better describe their role
-Disabled failing architecture test (agreed this is tech. debt and created CPS-2293)
-Refactored YangDataConverter method names and signatures (moved Spec to correct place)
-Cleaned up names and javadoc of class now called DeviceTrustLevelMessageConsumer
-Applied conventions to modified test methods

Issue-ID: CPS-2255
Change-Id: Iccd20541488e6b61444bb2c7406c90e61a34124d
Signed-off-by: ToineSiebelink <toine.siebelink@est.tech>
32 files changed:
cps-application/src/test/java/org/onap/cps/architecture/LayeredArchitectureTest.java
cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NcmpRestInputMapperSpec.groovy
cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/lcm/LcmEventsCmHandleStateHandlerAsyncHelper.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/lcm/LcmEventsCmHandleStateHandlerImpl.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/NetworkCmProxyInventoryFacade.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/models/NcmpServiceCmHandle.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/models/TrustLevel.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevel.java with 97% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/datajobs/WriteRequestExaminer.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/CmHandleQueryServiceImpl.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/CmHandleRegistrationService.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/CmHandleRegistrationServicePropertyHandler.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/InventoryPersistenceImpl.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/ParameterizedCmHandleQueryServiceImpl.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleOperationsUtils.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncService.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/sync/ModuleSyncTasks.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/trustlevel/DeviceTrustLevelMessageConsumer.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/trustlevel/DeviceHeartbeatConsumer.java with 75% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/trustlevel/DmiPluginTrustLevelWatchDog.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DmiPluginWatchDog.java with 91% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/trustlevel/TrustLevelCacheConfig.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfig.java with 95% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/inventory/trustlevel/TrustLevelManager.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelManager.java with 98% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/impl/utils/YangDataConverter.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/models/TrustLevelSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelSpec.groovy with 97% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/CmHandleQueryServiceImplSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/CmHandleRegistrationServiceSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/NetworkCmProxyInventoryFacadeSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/trustlevel/DeviceTrustLevelMessageConsumerSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/DeviceHeartbeatConsumerSpec.groovy with 89% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/trustlevel/DmiPluginTrustLevelWatchDogSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/dmiavailability/DmiPluginWatchDogSpec.groovy with 86% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/trustlevel/TrustLevelCacheConfigSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/TrustLevelCacheConfigSpec.groovy with 97% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/inventory/trustlevel/TrustLevelManagerSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/trustlevel/TrustLevelManagerSpec.groovy with 98% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/impl/utils/YangDataConverterSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/YangDataConverterSpec.groovy with 90% similarity]

index c18a3ed..91452a7 100644 (file)
@@ -25,6 +25,7 @@ import static com.tngtech.archunit.library.freeze.FreezingArchRule.freeze;
 
 import com.tngtech.archunit.core.importer.ImportOption;
 import com.tngtech.archunit.junit.AnalyzeClasses;
+import com.tngtech.archunit.junit.ArchIgnore;
 import com.tngtech.archunit.junit.ArchTest;
 import com.tngtech.archunit.lang.ArchRule;
 
@@ -47,12 +48,15 @@ public class LayeredArchitectureTest {
     private static final String CPS_CACHE_PACKAGE = "org.onap.cps.cache..";
     private static final String CPS_EVENTS_PACKAGE = "org.onap.cps.events..";
 
+    //TODO We need to revisit these rules, the first one doesn't even make any sense: CPS-2293
+
     @ArchTest
     static final ArchRule restControllerShouldOnlyDependOnRestController =
         classes().that().resideInAPackage(REST_CONTROLLER_PACKAGE).should().onlyHaveDependentClassesThat()
             .resideInAPackage(REST_CONTROLLER_PACKAGE);
 
     @ArchTest
+    @ArchIgnore
     static final ArchRule apiOrSpiServiceShouldOnlyBeDependedOnByControllerAndServicesAndCommonUtilityPackages =
         freeze(classes().that().resideInAPackage(API_SERVICE_PACKAGE)
             .or().resideInAPackage(SPI_SERVICE_PACKAGE).should().onlyHaveDependentClassesThat()
index f21c6ec..11252b7 100755 (executable)
@@ -34,15 +34,12 @@ import io.micrometer.core.annotation.Timed;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.onap.cps.ncmp.api.impl.NetworkCmProxyFacade;
-import org.onap.cps.ncmp.api.impl.config.embeddedcache.TrustLevelCacheConfig;
 import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException;
 import org.onap.cps.ncmp.api.impl.operations.DatastoreType;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
 import org.onap.cps.ncmp.api.inventory.NetworkCmProxyInventoryFacade;
 import org.onap.cps.ncmp.api.inventory.models.CmHandleQueryApiParameters;
 import org.onap.cps.ncmp.api.inventory.models.CompositeState;
@@ -63,7 +60,6 @@ import org.onap.cps.ncmp.rest.util.DeprecationHelper;
 import org.onap.cps.spi.model.DataNode;
 import org.onap.cps.spi.model.ModuleDefinition;
 import org.onap.cps.utils.JsonObjectMapper;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.StringUtils;
@@ -83,12 +79,8 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
     private final DeprecationHelper deprecationHelper;
     private final NcmpRestInputMapper ncmpRestInputMapper;
     private final CmHandleStateMapper cmHandleStateMapper;
-
     private final DataOperationRequestMapper dataOperationRequestMapper;
 
-    @Qualifier(TrustLevelCacheConfig.TRUST_LEVEL_PER_CM_HANDLE)
-    private final Map<String, TrustLevel> trustLevelPerCmHandle;
-
     /**
      * Get resource data from datastore.
      *
@@ -268,9 +260,9 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
                 deprecationHelper.mapOldConditionProperties(cmHandleQueryParameters);
         final Collection<NcmpServiceCmHandle> cmHandles = networkCmProxyInventoryFacade
                 .executeCmHandleSearch(cmHandleQueryApiParameters);
-        final List<RestOutputCmHandle> outputCmHandles =
+        final List<RestOutputCmHandle> restOutputCmHandles =
                 cmHandles.stream().map(this::toRestOutputCmHandle).collect(Collectors.toList());
-        return ResponseEntity.ok(outputCmHandles);
+        return ResponseEntity.ok(restOutputCmHandles);
     }
 
     /**
@@ -394,18 +386,16 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
         return new ResponseEntity<>(HttpStatus.OK);
     }
 
-
     private RestOutputCmHandle toRestOutputCmHandle(final NcmpServiceCmHandle ncmpServiceCmHandle) {
         final RestOutputCmHandle restOutputCmHandle = new RestOutputCmHandle();
         final CmHandlePublicProperties cmHandlePublicProperties = new CmHandlePublicProperties();
-        final TrustLevel cmHandleCurrentTrustLevel = trustLevelPerCmHandle.get(ncmpServiceCmHandle.getCmHandleId());
         restOutputCmHandle.setCmHandle(ncmpServiceCmHandle.getCmHandleId());
         cmHandlePublicProperties.add(ncmpServiceCmHandle.getPublicProperties());
         restOutputCmHandle.setPublicCmHandleProperties(cmHandlePublicProperties);
         restOutputCmHandle.setState(cmHandleStateMapper.toCmHandleCompositeStateExternalLockReason(
                 ncmpServiceCmHandle.getCompositeState()));
-        if (cmHandleCurrentTrustLevel != null) {
-            restOutputCmHandle.setTrustLevel(cmHandleCurrentTrustLevel.toString());
+        if (ncmpServiceCmHandle.getCurrentTrustLevel() != null) {
+            restOutputCmHandle.setTrustLevel(ncmpServiceCmHandle.getCurrentTrustLevel().toString());
         }
         restOutputCmHandle.setModuleSetTag(ncmpServiceCmHandle.getModuleSetTag());
         restOutputCmHandle.setAlternateId(ncmpServiceCmHandle.getAlternateId());
index f6b9e35..41521f6 100644 (file)
@@ -21,9 +21,9 @@
 package org.onap.cps.ncmp.rest.controller
 
 import org.mapstruct.factory.Mappers
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
 import org.onap.cps.ncmp.api.inventory.models.CmHandleQueryServiceParameters
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters
 import org.onap.cps.ncmp.rest.model.ConditionProperties
 import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration
index 398d632..65d6d8c 100644 (file)
@@ -33,10 +33,10 @@ import org.mapstruct.factory.Mappers
 import org.onap.cps.TestUtils
 import org.onap.cps.events.EventsPublisher
 import org.onap.cps.ncmp.api.impl.NetworkCmProxyFacade
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
 import org.onap.cps.ncmp.api.inventory.NetworkCmProxyInventoryFacade
 import org.onap.cps.ncmp.api.inventory.models.CompositeState
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.api.models.CmResourceAddress
 import org.onap.cps.ncmp.impl.inventory.DataStoreSyncState
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState
@@ -107,9 +107,6 @@ class NetworkCmProxyControllerSpec extends Specification {
     @SpringBean
     DataOperationRequestMapper dataOperationRequestMapper = Mappers.getMapper(DataOperationRequestMapper)
 
-    @SpringBean
-    Map<String, TrustLevel> trustLevelPerCmHandle = [:]
-
     @SpringBean
     DeprecationHelper stubbedDeprecationHelper = Stub()
 
@@ -123,7 +120,6 @@ class NetworkCmProxyControllerSpec extends Specification {
     @Shared
     def NO_TOPIC = null
     def NO_OPTIONS = null
-    def NO_REQUEST_ID = null
     def NO_AUTH_HEADER = null
 
     def logger = Spy(ListAppender<ILoggingEvent>)
@@ -272,6 +268,7 @@ class NetworkCmProxyControllerSpec extends Specification {
             def cmHandle1 = new NcmpServiceCmHandle()
             cmHandle1.cmHandleId = 'ch-1'
             cmHandle1.publicProperties = [color: 'yellow']
+            cmHandle1.currentTrustLevel = TrustLevel.NONE
             def cmHandle2 = new NcmpServiceCmHandle()
             cmHandle2.cmHandleId = 'ch-2'
             cmHandle2.publicProperties = [color: 'green']
@@ -279,8 +276,6 @@ class NetworkCmProxyControllerSpec extends Specification {
             cmHandle2.moduleSetTag = 'someModuleSetTag'
             cmHandle2.dataProducerIdentifier = 'someDataProducerIdentifier'
             mockNetworkCmProxyInventoryFacade.executeCmHandleSearch(_) >> [cmHandle1, cmHandle2]
-        and: 'map for trust level per cmHandle has value for only one cm handle'
-              trustLevelPerCmHandle.put('ch-1', TrustLevel.NONE)
         when: 'the searches api is invoked'
             def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content(jsonString)).andReturn().response
         then: 'response status returns OK'
@@ -297,11 +292,9 @@ class NetworkCmProxyControllerSpec extends Specification {
             def dmiProperties = [prop: 'some DMI property']
             def publicProperties = ["public prop": 'some public property']
             def compositeState = compositeStateTestObject()
-            def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, dmiProperties: dmiProperties, publicProperties: publicProperties, compositeState: compositeState)
+            def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, dmiProperties: dmiProperties, publicProperties: publicProperties, compositeState: compositeState, currentTrustLevel: TrustLevel.COMPLETE)
         and: 'the service method is invoked with the cm handle id'
             1 * mockNetworkCmProxyInventoryFacade.getNcmpServiceCmHandle('some-cm-handle') >> ncmpServiceCmHandle
-        and: 'map for trust level per cmHandle has values'
-            trustLevelPerCmHandle.get('some-cm-handle') >> { TrustLevel.COMPLETE }
         when: 'the cm handle details api is invoked'
             def response = mvc.perform(
                     get(cmHandleDetailsEndpoint)).andReturn().response
@@ -350,16 +343,15 @@ class NetworkCmProxyControllerSpec extends Specification {
             def searchesEndpoint = "$ncmpBasePathV1/ch/searches"
             String jsonString = TestUtils.getResourceFileContent('invalid-cmhandle-search.json')
         and: 'the service method is invoked with module names and returns two cm handles'
-            def cmHandel1 = new NcmpServiceCmHandle()
-            cmHandel1.cmHandleId = 'ch-1'
-            cmHandel1.publicProperties = [color: 'yellow']
-            def cmHandel2 = new NcmpServiceCmHandle()
-            cmHandel2.cmHandleId = 'ch-2'
-            cmHandel2.publicProperties = [color: 'green']
-            mockNetworkCmProxyInventoryFacade.executeCmHandleSearch(_) >> [cmHandel1, cmHandel2]
-        and: 'map for trust level per cmHandle has values'
-            trustLevelPerCmHandle.put('ch-1', TrustLevel.COMPLETE)
-            trustLevelPerCmHandle.put('ch-2', TrustLevel.NONE)
+            def cmHandle1 = new NcmpServiceCmHandle()
+            cmHandle1.cmHandleId = 'ch-1'
+            cmHandle1.publicProperties = [color: 'yellow']
+            cmHandle1.currentTrustLevel = TrustLevel.COMPLETE
+            def cmHandle2 = new NcmpServiceCmHandle()
+            cmHandle2.cmHandleId = 'ch-2'
+            cmHandle2.publicProperties = [color: 'green']
+            cmHandle2.currentTrustLevel = TrustLevel.NONE
+            mockNetworkCmProxyInventoryFacade.executeCmHandleSearch(_) >> [cmHandle1, cmHandle2]
         when: 'the searches api is invoked'
             def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content(jsonString)).andReturn().response
         then: 'an empty cm handle identifier is returned'
index b7e6a74..af745ca 100644 (file)
@@ -74,6 +74,6 @@ public class LcmEventsCmHandleStateHandlerAsyncHelper {
     }
 
     private static NcmpServiceCmHandle toNcmpServiceCmHandle(final YangModelCmHandle yangModelCmHandle) {
-        return YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelCmHandle);
+        return YangDataConverter.toNcmpServiceCmHandle(yangModelCmHandle);
     }
 }
index 97e5193..4376014 100644 (file)
@@ -194,7 +194,7 @@ public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleState
     }
 
     private NcmpServiceCmHandle toNcmpServiceCmHandle(final YangModelCmHandle yangModelCmHandle) {
-        return YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelCmHandle);
+        return YangDataConverter.toNcmpServiceCmHandle(yangModelCmHandle);
     }
 
     @Getter
index 0ff59c1..794bc23 100644 (file)
@@ -27,8 +27,6 @@ package org.onap.cps.ncmp.api.inventory;
 import static org.onap.cps.ncmp.impl.inventory.CmHandleQueryParametersValidator.validateCmHandleQueryParameters;
 
 import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -38,6 +36,7 @@ import org.onap.cps.ncmp.api.inventory.models.CompositeState;
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistration;
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.impl.inventory.CmHandleQueryService;
 import org.onap.cps.ncmp.impl.inventory.CmHandleRegistrationService;
 import org.onap.cps.ncmp.impl.inventory.InventoryPersistence;
@@ -45,10 +44,12 @@ import org.onap.cps.ncmp.impl.inventory.ParameterizedCmHandleQueryService;
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleQueryConditions;
 import org.onap.cps.ncmp.impl.inventory.models.InventoryQueryConditions;
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle;
+import org.onap.cps.ncmp.impl.inventory.trustlevel.TrustLevelCacheConfig;
 import org.onap.cps.ncmp.impl.utils.YangDataConverter;
 import org.onap.cps.spi.model.ModuleDefinition;
 import org.onap.cps.spi.model.ModuleReference;
 import org.onap.cps.utils.JsonObjectMapper;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 @Slf4j
@@ -62,6 +63,9 @@ public class NetworkCmProxyInventoryFacade {
     private final InventoryPersistence inventoryPersistence;
     private final JsonObjectMapper jsonObjectMapper;
 
+    @Qualifier(TrustLevelCacheConfig.TRUST_LEVEL_PER_CM_HANDLE)
+    private final Map<String, TrustLevel> trustLevelPerCmHandle;
+
     /**
      * Registration of Created, Removed, Updated or Upgraded CM Handles.
      *
@@ -142,7 +146,10 @@ public class NetworkCmProxyInventoryFacade {
         final CmHandleQueryServiceParameters cmHandleQueryServiceParameters = jsonObjectMapper.convertToValueType(
             cmHandleQueryApiParameters, CmHandleQueryServiceParameters.class);
         validateCmHandleQueryParameters(cmHandleQueryServiceParameters, CmHandleQueryConditions.ALL_CONDITION_NAMES);
-        return parameterizedCmHandleQueryService.queryCmHandles(cmHandleQueryServiceParameters);
+        final Collection<NcmpServiceCmHandle> ncmpServiceCmHandles =
+            parameterizedCmHandleQueryService.queryCmHandles(cmHandleQueryServiceParameters);
+        ncmpServiceCmHandles.forEach(this::applyCurrentTrustLevel);
+        return ncmpServiceCmHandles;
     }
 
     /**
@@ -176,8 +183,10 @@ public class NetworkCmProxyInventoryFacade {
      * @return cm handle details
      */
     public NcmpServiceCmHandle getNcmpServiceCmHandle(final String cmHandleId) {
-        return YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(
+        final NcmpServiceCmHandle ncmpServiceCmHandle = YangDataConverter.toNcmpServiceCmHandle(
             inventoryPersistence.getYangModelCmHandle(cmHandleId));
+        applyCurrentTrustLevel(ncmpServiceCmHandle);
+        return ncmpServiceCmHandle;
     }
 
     /**
@@ -188,10 +197,7 @@ public class NetworkCmProxyInventoryFacade {
      */
     public Map<String, String> getCmHandlePublicProperties(final String cmHandleId) {
         final YangModelCmHandle yangModelCmHandle = inventoryPersistence.getYangModelCmHandle(cmHandleId);
-        final List<YangModelCmHandle.Property> yangModelPublicProperties = yangModelCmHandle.getPublicProperties();
-        final Map<String, String> cmHandlePublicProperties = new HashMap<>();
-        YangDataConverter.asPropertiesMap(yangModelPublicProperties, cmHandlePublicProperties);
-        return cmHandlePublicProperties;
+        return YangDataConverter.toPropertiesMap(yangModelCmHandle.getPublicProperties());
     }
 
     /**
@@ -204,5 +210,9 @@ public class NetworkCmProxyInventoryFacade {
         return inventoryPersistence.getYangModelCmHandle(cmHandleId).getCompositeState();
     }
 
+    private void applyCurrentTrustLevel(final NcmpServiceCmHandle ncmpServiceCmHandle) {
+        ncmpServiceCmHandle.setCurrentTrustLevel(trustLevelPerCmHandle.get(ncmpServiceCmHandle.getCmHandleId()));
+    }
+
 
 }
index 69b33a1..3ebceed 100644 (file)
@@ -27,7 +27,6 @@ import java.util.Map;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
 import org.springframework.validation.annotation.Validated;
 
 /**
@@ -57,6 +56,9 @@ public class NcmpServiceCmHandle {
     @JsonSetter(nulls = Nulls.AS_EMPTY)
     private TrustLevel registrationTrustLevel;
 
+    @JsonSetter(nulls = Nulls.AS_EMPTY)
+    private TrustLevel currentTrustLevel;
+
     @JsonSetter(nulls = Nulls.AS_EMPTY)
     private String alternateId;
 
index 0e51f0c..70d08dc 100644 (file)
@@ -99,7 +99,7 @@ public class WriteRequestExaminer {
     }
 
     private Map<String, String> getPrivatePropertiesFromDataNode(final DataNode dataNode) {
-        final YangModelCmHandle yangModelCmHandle = YangDataConverter.convertCmHandleToYangModel(dataNode);
+        final YangModelCmHandle yangModelCmHandle = YangDataConverter.toYangModelCmHandle(dataNode);
         final Map<String, String> cmHandleDmiProperties = new LinkedHashMap<>();
         yangModelCmHandle.getDmiProperties()
                 .forEach(dmiProperty -> cmHandleDmiProperties.put(dmiProperty.getName(), dmiProperty.getValue()));
index 4c2f93a..e36477f 100644 (file)
@@ -34,11 +34,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
-import org.onap.cps.ncmp.api.impl.config.embeddedcache.TrustLevelCacheConfig;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState;
 import org.onap.cps.ncmp.impl.inventory.models.ModelledDmiServiceLeaves;
 import org.onap.cps.ncmp.impl.inventory.models.PropertyType;
+import org.onap.cps.ncmp.impl.inventory.trustlevel.TrustLevelCacheConfig;
 import org.onap.cps.spi.CpsDataPersistenceService;
 import org.onap.cps.spi.FetchDescendantsOption;
 import org.onap.cps.spi.model.DataNode;
index f10ccd4..1cbba7d 100644 (file)
@@ -47,10 +47,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.cps.api.CpsDataService;
-import org.onap.cps.ncmp.api.impl.config.embeddedcache.TrustLevelCacheConfig;
 import org.onap.cps.ncmp.api.impl.events.lcm.LcmEventsCmHandleStateHandler;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager;
 import org.onap.cps.ncmp.api.impl.utils.AlternateIdChecker;
 import org.onap.cps.ncmp.api.inventory.models.CmHandleRegistrationResponse;
 import org.onap.cps.ncmp.api.inventory.models.CompositeState;
@@ -58,9 +55,12 @@ import org.onap.cps.ncmp.api.inventory.models.CompositeStateBuilder;
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistration;
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistrationResponse;
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState;
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle;
 import org.onap.cps.ncmp.impl.inventory.sync.ModuleOperationsUtils;
+import org.onap.cps.ncmp.impl.inventory.trustlevel.TrustLevelCacheConfig;
+import org.onap.cps.ncmp.impl.inventory.trustlevel.TrustLevelManager;
 import org.onap.cps.spi.exceptions.AlreadyDefinedException;
 import org.onap.cps.spi.exceptions.CpsException;
 import org.onap.cps.spi.exceptions.DataNodeNotFoundException;
index 164d917..fe47c0e 100644 (file)
@@ -129,8 +129,7 @@ public class CmHandleRegistrationServicePropertyHandler {
                                               final NcmpServiceCmHandle ncmpServiceCmHandle) {
         final String newDataProducerIdentifier = ncmpServiceCmHandle.getDataProducerIdentifier();
         if (StringUtils.hasText(newDataProducerIdentifier)) {
-            final YangModelCmHandle yangModelCmHandle =
-                YangDataConverter.convertCmHandleToYangModel(cmHandleDataNode);
+            final YangModelCmHandle yangModelCmHandle = YangDataConverter.toYangModelCmHandle(cmHandleDataNode);
             final String existingDataProducerIdentifier = yangModelCmHandle.getDataProducerIdentifier();
             if (StringUtils.hasText(existingDataProducerIdentifier)) {
                 if (!existingDataProducerIdentifier.equals(newDataProducerIdentifier)) {
index 40aefed..2930d4f 100644 (file)
@@ -112,7 +112,7 @@ public class InventoryPersistenceImpl extends NcmpPersistenceImpl implements Inv
     public YangModelCmHandle getYangModelCmHandle(final String cmHandleId) {
         cpsValidator.validateNameCharacters(cmHandleId);
         final DataNode dataNode = getCmHandleDataNodeByCmHandleId(cmHandleId).iterator().next();
-        return YangDataConverter.convertCmHandleToYangModel(dataNode);
+        return YangDataConverter.toYangModelCmHandle(dataNode);
     }
 
     @Override
@@ -127,7 +127,7 @@ public class InventoryPersistenceImpl extends NcmpPersistenceImpl implements Inv
                         dataValidationException.getMessage());
             }
         });
-        return YangDataConverter.convertDataNodesToYangModelCmHandles(getCmHandleDataNodes(validCmHandleIds));
+        return YangDataConverter.toYangModelCmHandles(getCmHandleDataNodes(validCmHandleIds));
     }
 
     @Override
index 51e403f..4592245 100644 (file)
@@ -27,7 +27,7 @@ import static org.onap.cps.ncmp.impl.inventory.models.CmHandleQueryConditions.HA
 import static org.onap.cps.ncmp.impl.inventory.models.CmHandleQueryConditions.HAS_ALL_PROPERTIES;
 import static org.onap.cps.ncmp.impl.inventory.models.CmHandleQueryConditions.WITH_CPS_PATH;
 import static org.onap.cps.ncmp.impl.inventory.models.CmHandleQueryConditions.WITH_TRUST_LEVEL;
-import static org.onap.cps.ncmp.impl.utils.YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle;
+import static org.onap.cps.ncmp.impl.utils.YangDataConverter.toNcmpServiceCmHandle;
 import static org.onap.cps.spi.FetchDescendantsOption.DIRECT_CHILDREN_ONLY;
 import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS;
 
@@ -232,13 +232,13 @@ public class ParameterizedCmHandleQueryServiceImpl implements ParameterizedCmHan
         final Collection<NcmpServiceCmHandle> ncmpServiceCmHandles = new ArrayList<>(yangModelcmHandles.size());
 
         yangModelcmHandles.forEach(yangModelcmHandle ->
-            ncmpServiceCmHandles.add(YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelcmHandle))
+            ncmpServiceCmHandles.add(YangDataConverter.toNcmpServiceCmHandle(yangModelcmHandle))
         );
         return ncmpServiceCmHandles;
     }
 
     private NcmpServiceCmHandle createNcmpServiceCmHandle(final DataNode dataNode) {
-        return convertYangModelCmHandleToNcmpServiceCmHandle(YangDataConverter.convertCmHandleToYangModel(dataNode));
+        return toNcmpServiceCmHandle(YangDataConverter.toYangModelCmHandle(dataNode));
     }
 
     private Collection<String> executeQueries(final CmHandleQueryServiceParameters cmHandleQueryServiceParameters,
index 15e4653..e344be8 100644 (file)
@@ -238,7 +238,7 @@ public class ModuleOperationsUtils {
 
     private List<YangModelCmHandle> convertCmHandlesDataNodesToYangModelCmHandles(
             final List<DataNode> cmHandlesAsDataNodeList) {
-        return cmHandlesAsDataNodeList.stream().map(YangDataConverter::convertCmHandleToYangModel).toList();
+        return cmHandlesAsDataNodeList.stream().map(YangDataConverter::toYangModelCmHandle).toList();
     }
 
     private boolean isRetryDue(final CompositeState.LockReason compositeStateLockReason, final OffsetDateTime time) {
index 2c8639a..57d28aa 100644 (file)
@@ -139,7 +139,7 @@ public class ModuleSyncService {
         final List<DataNode> dataNodes = cmHandleQueryService.queryNcmpRegistryByCpsPath(
                 NCMP_DMI_REGISTRY_PARENT + "/cm-handles[@module-set-tag='" + escapedModuleSetTag + "']",
                 FetchDescendantsOption.DIRECT_CHILDREN_ONLY);
-        return dataNodes.stream().map(YangDataConverter::convertCmHandleToYangModel)
+        return dataNodes.stream().map(YangDataConverter::toYangModelCmHandle)
                 .filter(cmHandle -> cmHandle.getCompositeState().getCmHandleState() == CmHandleState.READY)
                 .findFirst().orElse(null);
     }
index 80c290c..08db195 100644 (file)
@@ -64,8 +64,7 @@ public class ModuleSyncTasks {
                     = new HashMap<>(cmHandlesAsDataNodes.size());
             for (final DataNode cmHandleAsDataNode : cmHandlesAsDataNodes) {
                 final String cmHandleId = String.valueOf(cmHandleAsDataNode.getLeaves().get("id"));
-                final YangModelCmHandle yangModelCmHandle =
-                        YangDataConverter.convertCmHandleToYangModel(cmHandleAsDataNode);
+                final YangModelCmHandle yangModelCmHandle = YangDataConverter.toYangModelCmHandle(cmHandleAsDataNode);
                 final CompositeState compositeState = inventoryPersistence.getCmHandleState(cmHandleId);
                 final boolean inUpgrade = ModuleOperationsUtils.inUpgradeOrUpgradeFailed(compositeState);
                 try {
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel;
+package org.onap.cps.ncmp.impl.inventory.trustlevel;
 
 import io.cloudevents.CloudEvent;
 import io.cloudevents.kafka.impl.KafkaHeaders;
 import lombok.RequiredArgsConstructor;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.onap.cps.ncmp.api.impl.events.mapper.CloudEventMapper;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.events.trustlevel.DeviceTrustLevel;
 import org.springframework.kafka.annotation.KafkaListener;
 import org.springframework.stereotype.Component;
 
 @Component
 @RequiredArgsConstructor
-public class DeviceHeartbeatConsumer {
+public class DeviceTrustLevelMessageConsumer {
 
     private static final String CLOUD_EVENT_ID_HEADER_NAME = "ce_id";
     private final TrustLevelManager trustLevelManager;
 
     /**
-     * Listening the device heartbeats.
+     * Listening to the device trust level updates.
      *
-     * @param deviceHeartbeatConsumerRecord Device Heartbeat record.
+     * @param consumerRecord Device trust level record.
      */
     @KafkaListener(topics = "${app.dmi.device-heartbeat.topic}",
         containerFactory = "cloudEventConcurrentKafkaListenerContainerFactory")
-    public void heartbeatListener(final ConsumerRecord<String, CloudEvent> deviceHeartbeatConsumerRecord) {
+    public void deviceTrustLevelListener(final ConsumerRecord<String, CloudEvent> consumerRecord) {
 
-        final String cmHandleId = KafkaHeaders.getParsedKafkaHeader(deviceHeartbeatConsumerRecord.headers(),
+        final String cmHandleId = KafkaHeaders.getParsedKafkaHeader(consumerRecord.headers(),
             CLOUD_EVENT_ID_HEADER_NAME);
 
         final DeviceTrustLevel deviceTrustLevel =
-            CloudEventMapper.toTargetEvent(deviceHeartbeatConsumerRecord.value(), DeviceTrustLevel.class);
-        final TrustLevel newDeviceTrustLevel = TrustLevel.valueOf(deviceTrustLevel.getData().getTrustLevel());
-        trustLevelManager.handleUpdateOfDeviceTrustLevel(cmHandleId, newDeviceTrustLevel);
-
+            CloudEventMapper.toTargetEvent(consumerRecord.value(), DeviceTrustLevel.class);
+        final String trustLevelAsString = deviceTrustLevel.getData().getTrustLevel();
+        trustLevelManager.handleUpdateOfDeviceTrustLevel(cmHandleId, TrustLevel.valueOf(trustLevelAsString));
     }
 
 }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel.dmiavailability;
+package org.onap.cps.ncmp.impl.inventory.trustlevel;
 
 import java.util.Collection;
 import java.util.Map;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.onap.cps.ncmp.api.impl.client.DmiRestClient;
-import org.onap.cps.ncmp.api.impl.config.embeddedcache.TrustLevelCacheConfig;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.impl.inventory.CmHandleQueryService;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -36,7 +34,7 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @RequiredArgsConstructor
 @Service
-public class DmiPluginWatchDog {
+public class DmiPluginTrustLevelWatchDog {
 
     private final DmiRestClient dmiRestClient;
     private final CmHandleQueryService cmHandleQueryService;
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.config.embeddedcache;
+package org.onap.cps.ncmp.impl.inventory.trustlevel;
 
 import com.hazelcast.config.MapConfig;
 import java.util.Map;
 import org.onap.cps.cache.HazelcastCacheConfig;
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel;
+package org.onap.cps.ncmp.impl.inventory.trustlevel;
 
 import java.util.Collection;
 import java.util.Map;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.onap.cps.ncmp.api.impl.config.embeddedcache.TrustLevelCacheConfig;
 import org.onap.cps.ncmp.api.impl.events.avc.ncmptoclient.AvcEventPublisher;
 import org.onap.cps.ncmp.api.impl.operations.RequiredDmiService;
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel;
 import org.onap.cps.ncmp.impl.inventory.InventoryPersistence;
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle;
 import org.springframework.beans.factory.annotation.Qualifier;
index bde1368..ac0c44e 100644 (file)
@@ -43,12 +43,12 @@ public class YangDataConverter {
     private static final Pattern cmHandleIdInXpathPattern = Pattern.compile("\\[@id='(.*?)']");
 
     /**
-     * This method convert yang model cm handle to ncmp service cm handle.
+     * This method converts yang model cm handle to ncmp service cm handle.
      * @param yangModelCmHandle the yang model of the cm handle
      * @return ncmp service cm handle
      */
-    public static NcmpServiceCmHandle convertYangModelCmHandleToNcmpServiceCmHandle(
-            final YangModelCmHandle yangModelCmHandle) {
+    public static NcmpServiceCmHandle toNcmpServiceCmHandle(
+        final YangModelCmHandle yangModelCmHandle) {
         final NcmpServiceCmHandle ncmpServiceCmHandle = new NcmpServiceCmHandle();
         final List<YangModelCmHandle.Property> dmiProperties = yangModelCmHandle.getDmiProperties();
         final List<YangModelCmHandle.Property> publicProperties = yangModelCmHandle.getPublicProperties();
@@ -63,23 +63,24 @@ public class YangDataConverter {
     }
 
     /**
-     * This method convert yang model cm handle properties to simple map.
+     * This method converts yang model cm handle properties to simple map.
      * @param properties the yang model cm handle properties
-     * @param propertiesMap the String, String map for the results
+     * @return simple map representing the properties
      */
-    public static void asPropertiesMap(final List<YangModelCmHandle.Property> properties,
-                                       final Map<String, String> propertiesMap) {
+    public static Map<String, String> toPropertiesMap(final List<YangModelCmHandle.Property> properties) {
+        final Map<String, String> propertiesMap = new LinkedHashMap<>(properties.size());
         for (final YangModelCmHandle.Property property : properties) {
             propertiesMap.put(property.getName(), property.getValue());
         }
+        return propertiesMap;
     }
 
     /**
-     * This method convert cm handle data node to yang model cm handle.
+     * This method converts cm handle data node to yang model cm handle.
      * @param cmHandleDataNode the datanode of the cm handle
      * @return yang model cm handle
      */
-    public static YangModelCmHandle convertCmHandleToYangModel(final DataNode cmHandleDataNode) {
+    public static YangModelCmHandle toYangModelCmHandle(final DataNode cmHandleDataNode) {
         final NcmpServiceCmHandle ncmpServiceCmHandle = new NcmpServiceCmHandle();
         final String cmHandleId = cmHandleDataNode.getLeaves().get("id").toString();
         ncmpServiceCmHandle.setCmHandleId(cmHandleId);
@@ -96,18 +97,17 @@ public class YangDataConverter {
     }
 
     /**
-     * This method convert cm handle data nodes to yang model cm handles.
+     * This method converts cm handle data nodes to yang model cm handles.
      * @param cmHandleDataNodes the datanode of the cm handle
      * @return yang model cm handles
      */
-    public static Collection<YangModelCmHandle> convertDataNodesToYangModelCmHandles(
+    public static Collection<YangModelCmHandle> toYangModelCmHandles(
             final Collection<DataNode> cmHandleDataNodes) {
-        return cmHandleDataNodes.stream().map(YangDataConverter::convertCmHandleToYangModel)
-                .collect(Collectors.toList());
+        return cmHandleDataNodes.stream().map(YangDataConverter::toYangModelCmHandle).collect(Collectors.toList());
     }
 
     /**
-     * This method extract cm handle id from xpath of data node.
+     * This method extracts cm handle id from xpath of data node.
      * @param xpath for data node of the cm handle
      * @return cm handle Id
      */
@@ -145,15 +145,11 @@ public class YangDataConverter {
 
     private static void setDmiProperties(final List<YangModelCmHandle.Property> dmiProperties,
                                          final NcmpServiceCmHandle ncmpServiceCmHandle) {
-        final Map<String, String> dmiPropertiesMap = new LinkedHashMap<>(dmiProperties.size());
-        asPropertiesMap(dmiProperties, dmiPropertiesMap);
-        ncmpServiceCmHandle.setDmiProperties(dmiPropertiesMap);
+        ncmpServiceCmHandle.setDmiProperties(toPropertiesMap(dmiProperties));
     }
 
     private static void setPublicProperties(final List<YangModelCmHandle.Property> publicProperties,
                                             final NcmpServiceCmHandle ncmpServiceCmHandle) {
-        final Map<String, String> publicPropertiesMap = new LinkedHashMap<>();
-        asPropertiesMap(publicProperties, publicPropertiesMap);
-        ncmpServiceCmHandle.setPublicProperties(publicPropertiesMap);
+        ncmpServiceCmHandle.setPublicProperties(toPropertiesMap(publicProperties));
     }
 }
index 52ddcfb..36fd755 100644 (file)
@@ -21,7 +21,7 @@
 
 package org.onap.cps.ncmp.impl.inventory
 
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState
 import org.onap.cps.spi.CpsDataPersistenceService
 import org.onap.cps.spi.model.DataNode
index da31162..9d4d956 100644 (file)
@@ -26,16 +26,16 @@ import org.onap.cps.api.CpsDataService
 import org.onap.cps.api.CpsModuleService
 import org.onap.cps.ncmp.api.impl.events.lcm.LcmEventsCmHandleStateHandler
 import org.onap.cps.ncmp.api.impl.exception.DmiRequestException
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager
 import org.onap.cps.ncmp.api.impl.utils.AlternateIdChecker
 import org.onap.cps.ncmp.api.inventory.models.CmHandleRegistrationResponse
 import org.onap.cps.ncmp.api.inventory.models.CompositeState
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistration
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.api.inventory.models.UpgradedCmHandles
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle
+import org.onap.cps.ncmp.impl.inventory.trustlevel.TrustLevelManager
 import org.onap.cps.spi.exceptions.AlreadyDefinedException
 import org.onap.cps.spi.exceptions.CpsException
 import org.onap.cps.spi.exceptions.DataNodeNotFoundException
index 49d4c39..716efd8 100644 (file)
@@ -31,6 +31,7 @@ import org.onap.cps.ncmp.api.inventory.models.CompositeState
 import org.onap.cps.ncmp.api.inventory.models.ConditionApiProperties
 import org.onap.cps.ncmp.api.inventory.models.DmiPluginRegistration
 import org.onap.cps.ncmp.api.inventory.models.NcmpServiceCmHandle
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.impl.inventory.models.CmHandleState
 import org.onap.cps.ncmp.impl.inventory.models.LockReasonCategory
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle
@@ -38,8 +39,6 @@ import org.onap.cps.spi.model.ConditionProperties
 import org.onap.cps.utils.JsonObjectMapper
 import spock.lang.Specification
 
-import java.util.stream.Collectors
-
 class NetworkCmProxyInventoryFacadeSpec extends Specification {
 
     def mockCmHandleRegistrationService = Mock(CmHandleRegistrationService)
@@ -47,8 +46,9 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
     def mockParameterizedCmHandleQueryService = Mock(ParameterizedCmHandleQueryService)
     def spiedJsonObjectMapper = Spy(new JsonObjectMapper(new ObjectMapper()))
     def mockInventoryPersistence = Mock(InventoryPersistence)
+    def trustLevelPerCmHandle = [:]
 
-    def objectUnderTest = new NetworkCmProxyInventoryFacade(mockCmHandleRegistrationService, mockCmHandleQueryService, mockParameterizedCmHandleQueryService, mockInventoryPersistence, spiedJsonObjectMapper)
+    def objectUnderTest = new NetworkCmProxyInventoryFacade(mockCmHandleRegistrationService, mockCmHandleQueryService, mockParameterizedCmHandleQueryService, mockInventoryPersistence, spiedJsonObjectMapper, trustLevelPerCmHandle)
 
     def 'Update DMI Registration'() {
         given: 'an (updated) dmi plugin registration'
@@ -98,7 +98,7 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
         given: 'the system returns a yang modelled cm handle'
             def dmiServiceName = 'some service name'
             def compositeState = new CompositeState(cmHandleState: CmHandleState.ADVISED,
-                lockReason: CompositeState.LockReason.builder().lockReasonCategory(LockReasonCategory.MODULE_SYNC_FAILED).details("lock details").build(),
+                lockReason: CompositeState.LockReason.builder().lockReasonCategory(LockReasonCategory.MODULE_SYNC_FAILED).details('lock details').build(),
                 lastUpdateTime: 'some-timestamp',
                 dataSyncEnabled: false,
                 dataStores: dataStores())
@@ -106,26 +106,29 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
             def publicProperties = [new YangModelCmHandle.Property('Public Book', 'Public Romance Novel')]
             def moduleSetTag = 'some-module-set-tag'
             def alternateId = 'some-alternate-id'
-            def yangModelCmHandle = new YangModelCmHandle(id: 'some-cm-handle', dmiServiceName: dmiServiceName,
-                dmiProperties: dmiProperties, publicProperties: publicProperties, compositeState: compositeState,
-                moduleSetTag: moduleSetTag, alternateId: alternateId)
-            1 * mockInventoryPersistence.getYangModelCmHandle('some-cm-handle') >> yangModelCmHandle
+            def yangModelCmHandle = new YangModelCmHandle(id: 'ch-1', dmiServiceName: dmiServiceName, dmiProperties: dmiProperties,
+                 publicProperties: publicProperties, compositeState: compositeState, moduleSetTag: moduleSetTag, alternateId: alternateId)
+            1 * mockInventoryPersistence.getYangModelCmHandle('ch-1') >> yangModelCmHandle
+        and: 'a trust level for the cm handle in the cache'
+            trustLevelPerCmHandle.put('ch-1', TrustLevel.COMPLETE)
         when: 'getting cm handle details for a given cm handle id from ncmp service'
-            def result = objectUnderTest.getNcmpServiceCmHandle('some-cm-handle')
+            def result = objectUnderTest.getNcmpServiceCmHandle('ch-1')
         then: 'the result is a ncmpServiceCmHandle'
-            result.class == NcmpServiceCmHandle.class
+            assert result.class == NcmpServiceCmHandle.class
         and: 'the cm handle contains the cm handle id'
-            result.cmHandleId == 'some-cm-handle'
+            assert result.cmHandleId == 'ch-1'
         and: 'the cm handle contains the alternate id'
-            result.alternateId == 'some-alternate-id'
+            assert result.alternateId == 'some-alternate-id'
         and: 'the cm handle contains the module-set-tag'
-            result.moduleSetTag == 'some-module-set-tag'
+            assert result.moduleSetTag == 'some-module-set-tag'
         and: 'the cm handle contains the DMI Properties'
-            result.dmiProperties ==[ Book:'Romance Novel' ]
+            assert result.dmiProperties ==[ Book:'Romance Novel' ]
         and: 'the cm handle contains the public Properties'
-            result.publicProperties == [ "Public Book":'Public Romance Novel' ]
+            assert result.publicProperties == [ "Public Book":'Public Romance Novel' ]
         and: 'the cm handle contains the cm handle composite state'
-            result.compositeState == compositeState
+            assert result.compositeState == compositeState
+        and: 'the cm handle contains the trust level from the cache'
+            assert result.currentTrustLevel == TrustLevel.COMPLETE
     }
 
     def 'Get cm handle public properties'() {
@@ -138,7 +141,7 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
         when: 'getting cm handle public properties for a given cm handle id from ncmp service'
             def result = objectUnderTest.getCmHandlePublicProperties('some-cm-handle')
         then: 'the result returns the correct data'
-            result == [ 'public prop' : 'some public prop' ]
+            assert result == [ 'public prop' : 'some public prop' ]
     }
 
     def 'Get cm handle composite state'() {
@@ -156,7 +159,7 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
         when: 'getting cm handle composite state for a given cm handle id from ncmp service'
             def result = objectUnderTest.getCmHandleCompositeState('some-cm-handle')
         then: 'the result returns the correct data'
-            result == compositeState
+            assert result == compositeState
     }
 
     def 'Execute cm handle id search'() {
@@ -197,14 +200,21 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
             conditionApiProperties.conditionName = 'hasAllModules'
             conditionApiProperties.conditionParameters = [[moduleName: 'module-name-1']]
             cmHandleQueryApiParameters.cmHandleQueryParameters = [conditionApiProperties]
-        and: 'query cm handle method return with a data node list'
+        and: 'query cm handle method returns two cm handles'
             mockParameterizedCmHandleQueryService.queryCmHandles(
                 spiedJsonObjectMapper.convertToValueType(cmHandleQueryApiParameters, CmHandleQueryServiceParameters.class))
-                >> [new NcmpServiceCmHandle(cmHandleId: 'cm-handle-id-1')]
+                >> [new NcmpServiceCmHandle(cmHandleId: 'ch-0'), new NcmpServiceCmHandle(cmHandleId: 'ch-1')]
+        and: ' a trust level for ch-1'
+            trustLevelPerCmHandle.put('ch-1', TrustLevel.COMPLETE)
         when: 'execute cm handle search is called'
             def result = objectUnderTest.executeCmHandleSearch(cmHandleQueryApiParameters)
-        then: 'result is the same collection as returned by the CPS Data Service'
-            assert result.stream().map(cmHandle -> cmHandle.cmHandleId).collect(Collectors.toSet()) == ['cm-handle-id-1'] as Set
+        then: 'result consists of the two cm handles returned by the CPS Data Service'
+            assert result.size() == 2
+            assert result[0].cmHandleId == 'ch-0'
+            assert result[1].cmHandleId == 'ch-1'
+        and: 'only ch-1 has a trust level'
+            assert result[0].currentTrustLevel == null
+            assert result[1].currentTrustLevel == TrustLevel.COMPLETE
     }
 
     def 'Set Cm Handle Data Sync flag.'() {
@@ -215,8 +225,7 @@ class NetworkCmProxyInventoryFacadeSpec extends Specification {
     }
 
     def dataStores() {
-        CompositeState.DataStores.builder()
-            .operationalDataStore(CompositeState.Operational.builder()
+        CompositeState.DataStores.builder().operationalDataStore(CompositeState.Operational.builder()
                 .dataStoreSyncState(DataStoreSyncState.NONE_REQUESTED)
                 .lastSyncTime('some-timestamp').build()).build()
     }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel
+package org.onap.cps.ncmp.impl.inventory.trustlevel
 
 import com.fasterxml.jackson.databind.ObjectMapper
 import io.cloudevents.CloudEvent
 import io.cloudevents.core.builder.CloudEventBuilder
 import org.apache.kafka.clients.consumer.ConsumerRecord
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.events.trustlevel.DeviceTrustLevel
 import org.onap.cps.utils.JsonObjectMapper
 import org.springframework.boot.test.context.SpringBootTest
 import spock.lang.Specification
 
 @SpringBootTest(classes = [ObjectMapper, JsonObjectMapper])
-class DeviceHeartbeatConsumerSpec extends Specification {
+class DeviceTrustLevelMessageConsumerSpec extends Specification {
 
     def mockTrustLevelManager = Mock(TrustLevelManager)
 
-    def objectUnderTest = new DeviceHeartbeatConsumer(mockTrustLevelManager)
+    def objectUnderTest = new DeviceTrustLevelMessageConsumer(mockTrustLevelManager)
     def objectMapper = new ObjectMapper()
     def jsonObjectMapper = new JsonObjectMapper(objectMapper)
 
@@ -46,7 +47,7 @@ class DeviceHeartbeatConsumerSpec extends Specification {
             def consumerRecord = new ConsumerRecord<String, CloudEvent>('test-device-heartbeat', 0, 0, 'sample-message-key', eventFromDmi)
             consumerRecord.headers().add('ce_id', objectMapper.writeValueAsBytes('ch-1'))
         when: 'the event is consumed'
-            objectUnderTest.heartbeatListener(consumerRecord)
+            objectUnderTest.deviceTrustLevelListener(consumerRecord)
         then: 'cm handles are stored with correct trust level'
             1 * mockTrustLevelManager.handleUpdateOfDeviceTrustLevel('"ch-1"', TrustLevel.COMPLETE)
     }
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel.dmiavailability
+package org.onap.cps.ncmp.impl.inventory.trustlevel
 
 import org.onap.cps.ncmp.api.impl.client.DmiRestClient
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.impl.inventory.CmHandleQueryService
 import spock.lang.Specification
 
-class DmiPluginWatchDogSpec extends Specification {
+class DmiPluginTrustLevelWatchDogSpec extends Specification {
 
     def mockDmiRestClient = Mock(DmiRestClient)
     def mockCmHandleQueryService = Mock(CmHandleQueryService)
@@ -34,7 +33,7 @@ class DmiPluginWatchDogSpec extends Specification {
     def trustLevelPerDmiPlugin = [:]
 
 
-    def objectUnderTest = new DmiPluginWatchDog(mockDmiRestClient, mockCmHandleQueryService, mockTrustLevelManager, trustLevelPerDmiPlugin)
+    def objectUnderTest = new DmiPluginTrustLevelWatchDog(mockDmiRestClient, mockCmHandleQueryService, mockTrustLevelManager, trustLevelPerDmiPlugin)
 
     def 'watch dmi plugin health status for #dmiHealhStatus'() {
         given: 'the cache has been initialised and "knows" about dmi-1'
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.config.embeddedcache
+package org.onap.cps.ncmp.impl.inventory.trustlevel
 
 import com.hazelcast.config.Config
 import com.hazelcast.core.Hazelcast
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.context.SpringBootTest
 import spock.lang.Specification
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.trustlevel
+package org.onap.cps.ncmp.impl.inventory.trustlevel
 
 import org.onap.cps.ncmp.api.impl.events.avc.ncmptoclient.AvcEventPublisher
+import org.onap.cps.ncmp.api.inventory.models.TrustLevel
 import org.onap.cps.ncmp.impl.inventory.InventoryPersistence
 import org.onap.cps.ncmp.impl.inventory.models.YangModelCmHandle
 import spock.lang.Specification
@@ -18,9 +18,8 @@
  *  ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.utils
+package org.onap.cps.ncmp.impl.utils
 
-import org.onap.cps.ncmp.impl.utils.YangDataConverter
 import org.onap.cps.spi.model.DataNode
 import spock.lang.Specification
 
@@ -34,8 +33,7 @@ class YangDataConverterSpec extends Specification{
                     leaves: ['name': 'pubProp1', 'value': 'pubValue1'])
             def dataNodeCmHandle = new DataNode(leaves:['id':'sample-id'], childDataNodes:[dataNodeAdditionalProperties, dataNodePublicProperties])
         when: 'the dataNode is converted'
-            def yangModelCmHandle =
-                YangDataConverter.convertCmHandleToYangModel(dataNodeCmHandle)
+            def yangModelCmHandle = YangDataConverter.toYangModelCmHandle(dataNodeCmHandle)
         then: 'the converted object has the correct id'
             assert yangModelCmHandle.id == 'sample-id'
         and: 'the additional (dmi, private) properties are included'
@@ -51,7 +49,7 @@ class YangDataConverterSpec extends Specification{
             def dataNodes = [new DataNode(xpath:'/dmi-registry/cm-handles[@id=\'some-cm-handle\']', leaves: ['id':'some-cm-handle']),
                              new DataNode(xpath:'/dmi-registry/cm-handles[@id=\'another-cm-handle\']', leaves: ['id':'another-cm-handle'])]
         when: 'the data nodes are converted'
-            def yangModelCmHandles = YangDataConverter.convertDataNodesToYangModelCmHandles(dataNodes)
+            def yangModelCmHandles = YangDataConverter.toYangModelCmHandles(dataNodes)
         then: 'verify both have returned and CmHandleIds are correct'
             assert yangModelCmHandles.size() == 2
             assert yangModelCmHandles.id.containsAll(['some-cm-handle', 'another-cm-handle'])