LcmEvent state handler refactoring
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / event / lcm / LcmEventsCmHandleStateHandlerImpl.java
index 9027a6e..fd46ee8 100644 (file)
@@ -30,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.onap.cps.ncmp.api.impl.utils.YangDataConverter;
 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.inventory.CompositeStateUtils;
 import org.onap.cps.ncmp.api.inventory.InventoryPersistence;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
@@ -45,15 +46,20 @@ public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleState
     private final LcmEventsCreator lcmEventsCreator;
     private final LcmEventsService lcmEventsService;
 
-
     @Override
     public void updateCmHandleState(final YangModelCmHandle yangModelCmHandle,
             final CmHandleState targetCmHandleState) {
-        if (yangModelCmHandle.getCompositeState().getCmHandleState() == targetCmHandleState) {
+
+        final CompositeState compositeState = yangModelCmHandle.getCompositeState();
+
+        if (compositeState != null && compositeState.getCmHandleState() == targetCmHandleState) {
             log.debug("CmHandle with id : {} already in state : {}", yangModelCmHandle.getId(), targetCmHandleState);
         } else {
+            final NcmpServiceCmHandle existingNcmpServiceCmHandle =
+                    new NcmpServiceCmHandle(toNcmpServiceCmHandle(yangModelCmHandle));
             updateToSpecifiedCmHandleState(yangModelCmHandle, targetCmHandleState);
-            publishLcmEvent(yangModelCmHandle);
+            final NcmpServiceCmHandle targetNcmpServiceCmHandle = toNcmpServiceCmHandle(yangModelCmHandle);
+            publishLcmEvent(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle);
         }
 
     }
@@ -66,10 +72,10 @@ public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleState
                     .accept(yangModelCmHandle.getCompositeState());
             inventoryPersistence.saveCmHandleState(yangModelCmHandle.getId(), yangModelCmHandle.getCompositeState());
         } else if (ADVISED == targetCmHandleState) {
-            if (yangModelCmHandle.getCompositeState().getCmHandleState() == LOCKED) {
-                retryCmHandle(yangModelCmHandle);
-            } else {
+            if (yangModelCmHandle.getCompositeState() == null) {
                 registerNewCmHandle(yangModelCmHandle);
+            } else if (yangModelCmHandle.getCompositeState().getCmHandleState() == LOCKED) {
+                retryCmHandle(yangModelCmHandle);
             }
         } else if (DELETED == targetCmHandleState) {
             setCmHandleState(yangModelCmHandle, targetCmHandleState);
@@ -84,20 +90,21 @@ public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleState
     }
 
     private void registerNewCmHandle(final YangModelCmHandle yangModelCmHandle) {
+        yangModelCmHandle.setCompositeState(new CompositeState());
         setCmHandleState(yangModelCmHandle, ADVISED);
         inventoryPersistence.saveCmHandle(yangModelCmHandle);
     }
 
-    private void publishLcmEvent(final YangModelCmHandle yangModelCmHandle) {
-        final NcmpServiceCmHandle ncmpServiceCmHandle =
-                YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelCmHandle);
-        final String cmHandleId = ncmpServiceCmHandle.getCmHandleId();
-        final LcmEvent lcmEvent = lcmEventsCreator.populateLcmEvent(cmHandleId);
+    private void publishLcmEvent(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
+            final NcmpServiceCmHandle existingNcmpServiceCmHandle) {
+        final String cmHandleId = targetNcmpServiceCmHandle.getCmHandleId();
+        final LcmEvent lcmEvent =
+                lcmEventsCreator.populateLcmEvent(cmHandleId, targetNcmpServiceCmHandle, existingNcmpServiceCmHandle);
         lcmEventsService.publishLcmEvent(cmHandleId, lcmEvent);
     }
 
     private void updateAndSaveCmHandleState(final YangModelCmHandle yangModelCmHandle,
-                                            final CmHandleState targetCmHandleState) {
+            final CmHandleState targetCmHandleState) {
         setCmHandleState(yangModelCmHandle, targetCmHandleState);
         inventoryPersistence.saveCmHandleState(yangModelCmHandle.getId(), yangModelCmHandle.getCompositeState());
     }
@@ -105,4 +112,8 @@ public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleState
     private void setCmHandleState(final YangModelCmHandle yangModelCmHandle, final CmHandleState targetCmHandleState) {
         CompositeStateUtils.setCompositeState(targetCmHandleState).accept(yangModelCmHandle.getCompositeState());
     }
+
+    private NcmpServiceCmHandle toNcmpServiceCmHandle(final YangModelCmHandle yangModelCmHandle) {
+        return YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelCmHandle);
+    }
 }