From 7f298238337e4f88952a2c0938fee9c34cea5fdd Mon Sep 17 00:00:00 2001
From: "puthuparambil.aditya" <aditya.puthuparambil@bell.ca>
Date: Wed, 25 May 2022 15:29:59 +0100
Subject: CompositeStateBuilder added for building the compositeState

Added composite state to YangModelCmHandleRetriever

Issue-ID: CPS-878
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
Change-Id: I8bdea55c0a8e27a906e24fc367dedf81c9b3501c
Signed-off-by: puthuparambil.aditya <aditya.puthuparambil@bell.ca>
---
 .../operations/YangModelCmHandleRetriever.java     |  12 +-
 .../ncmp/api/inventory/CompositeStateBuilder.java  | 147 +++++++++++++++++++++
 2 files changed, 157 insertions(+), 2 deletions(-)
 create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CompositeStateBuilder.java

(limited to 'cps-ncmp-service/src/main/java/org')

diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/YangModelCmHandleRetriever.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/YangModelCmHandleRetriever.java
index 5063e8298a..0edd68c3d5 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/YangModelCmHandleRetriever.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/YangModelCmHandleRetriever.java
@@ -1,6 +1,7 @@
 /*
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2021-2022 Nordix Foundation
+ *  Modifications Copyright (C) 2021 Bell Canada
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -25,6 +26,8 @@ import java.util.Map;
 import lombok.AllArgsConstructor;
 import org.onap.cps.api.CpsDataService;
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle;
+import org.onap.cps.ncmp.api.inventory.CompositeState;
+import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
 import org.onap.cps.spi.FetchDescendantsOption;
 import org.onap.cps.spi.model.DataNode;
@@ -53,7 +56,7 @@ public class YangModelCmHandleRetriever {
         final DataNode cmHandleDataNode = getCmHandleDataNode(cmHandleId);
         final NcmpServiceCmHandle ncmpServiceCmHandle = new NcmpServiceCmHandle();
         ncmpServiceCmHandle.setCmHandleId(cmHandleId);
-        populateCmHandleProperties(cmHandleDataNode, ncmpServiceCmHandle);
+        populateCmHandleDetails(cmHandleDataNode, ncmpServiceCmHandle);
         return YangModelCmHandle.toYangModelCmHandle(
             (String) cmHandleDataNode.getLeaves().get("dmi-service-name"),
             (String) cmHandleDataNode.getLeaves().get("dmi-data-service-name"),
@@ -70,19 +73,24 @@ public class YangModelCmHandleRetriever {
             FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS);
     }
 
-    private static void populateCmHandleProperties(final DataNode cmHandleDataNode,
+    private static void populateCmHandleDetails(final DataNode cmHandleDataNode,
                                                    final NcmpServiceCmHandle ncmpServiceCmHandle) {
         final Map<String, String> dmiProperties = new LinkedHashMap<>();
         final Map<String, String> publicProperties = new LinkedHashMap<>();
+        final CompositeStateBuilder compositeStateBuilder = new CompositeStateBuilder();
+        CompositeState compositeState = compositeStateBuilder.build();
         for (final DataNode childDataNode: cmHandleDataNode.getChildDataNodes()) {
             if (childDataNode.getXpath().contains("/additional-properties[@name=")) {
                 addProperty(childDataNode, dmiProperties);
             } else if (childDataNode.getXpath().contains("/public-properties[@name=")) {
                 addProperty(childDataNode, publicProperties);
+            } else if (childDataNode.getXpath().endsWith("/state")) {
+                compositeState = compositeStateBuilder.fromDataNode(childDataNode).build();
             }
         }
         ncmpServiceCmHandle.setDmiProperties(dmiProperties);
         ncmpServiceCmHandle.setPublicProperties(publicProperties);
+        ncmpServiceCmHandle.setCompositeState(compositeState);
     }
 
     private static void addProperty(final DataNode propertyDataNode, final Map<String, String> propertiesAsMap) {
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CompositeStateBuilder.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CompositeStateBuilder.java
new file mode 100644
index 0000000000..d8f7080311
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/CompositeStateBuilder.java
@@ -0,0 +1,147 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2022 Bell Canada
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.ncmp.api.inventory;
+
+import org.onap.cps.ncmp.api.inventory.CompositeState.DataStores;
+import org.onap.cps.ncmp.api.inventory.CompositeState.LockReason;
+import org.onap.cps.ncmp.api.inventory.CompositeState.Operational;
+import org.onap.cps.ncmp.api.inventory.CompositeState.Running;
+import org.onap.cps.spi.model.DataNode;
+
+public class CompositeStateBuilder {
+
+    private CmHandleState cmHandleState;
+    private LockReason lockReason;
+    private DataStores datastores;
+    private String lastUpdatedTime;
+
+    /**
+     * To create the {@link CompositeState}.
+     *
+     * @return {@link DataNode}
+     */
+    public CompositeState build() {
+        final CompositeState compositeState = new CompositeState();
+        compositeState.setCmhandleState(cmHandleState);
+        compositeState.setLockReason(lockReason);
+        compositeState.setDataStores(datastores);
+        compositeState.setLastUpdateTime(lastUpdatedTime);
+        return compositeState;
+    }
+
+    /**
+     * To use attributes for creating {@link CompositeState}.
+     *
+     * @param cmHandleState for the data node
+     * @return CompositeStateBuilder
+     */
+    public CompositeStateBuilder withCmHandleState(final CmHandleState cmHandleState) {
+        this.cmHandleState = cmHandleState;
+        return this;
+    }
+
+    /**
+     * To use attributes for creating {@link CompositeState}.
+     *
+     * @param reason for the locked state
+     * @param details for the locked state
+     * @return CompositeStateBuilder
+     */
+    public CompositeStateBuilder withLockReason(final String reason, final String details) {
+        this.lockReason = LockReason.builder().reason(reason).details(details).build();
+        return this;
+    }
+
+    /**
+     * To use attributes for creating {@link CompositeState}.
+     *
+     * @param time for the state change
+     * @return CompositeStateBuilder
+     */
+    public CompositeStateBuilder withLastUpdatedTime(final String time) {
+        this.lastUpdatedTime = time;
+        return this;
+    }
+
+    /**
+     * To use attributes for creating {@link CompositeState}.
+     *
+     * @param syncState for the locked state
+     * @param lastSyncTime for the locked state
+     * @return CompositeStateBuilder
+     */
+    public CompositeStateBuilder withOperationalDataStores(final String syncState, final String lastSyncTime) {
+        this.datastores = DataStores.builder().operationalDataStore(
+            Operational.builder().syncState(syncState).lastSyncTime(lastSyncTime).build()).build();
+        return this;
+    }
+
+    /**
+     * To use attributes for creating {@link CompositeState}.
+     *
+     * @param syncState for the locked state
+     * @param lastSyncTime for the locked state
+     * @return CompositeStateBuilder
+     */
+    public CompositeStateBuilder withRunningDataStores(final String syncState, final String lastSyncTime) {
+        this.datastores = DataStores.builder().runningDataStore(
+            Running.builder().syncState(syncState).lastSyncTime(lastSyncTime).build()).build();
+        return this;
+    }
+
+    /**
+     * To use dataNode for creating {@link CompositeState}.
+     *
+     * @param dataNode for the dataNode
+     * @return CompositeState
+     */
+    public CompositeStateBuilder fromDataNode(final DataNode dataNode) {
+        this.cmHandleState = CmHandleState.valueOf((String) dataNode.getLeaves()
+            .get("cm-handle-state"));
+        for (final DataNode stateChildNode : dataNode.getChildDataNodes()) {
+            if (stateChildNode.getXpath().endsWith("/lock-reason")) {
+                this.lockReason = new LockReason((String) stateChildNode.getLeaves().get("reason"),
+                    (String) stateChildNode.getLeaves().get("details"));
+            }
+            if (stateChildNode.getXpath().endsWith("/datastores")) {
+                for (final DataNode dataStoreNodes : stateChildNode.getChildDataNodes()) {
+                    Operational operationalDataStore = null;
+                    Running runningDataStore = null;
+                    if (dataStoreNodes.getXpath().contains("/operational")) {
+                        operationalDataStore = Operational.builder()
+                            .syncState((String) dataStoreNodes.getLeaves().get("sync-state"))
+                            .lastSyncTime((String) dataStoreNodes.getLeaves().get("last-sync-time"))
+                            .build();
+                    } else {
+                        runningDataStore = Running.builder()
+                            .syncState((String) dataStoreNodes.getLeaves().get("sync-state"))
+                            .lastSyncTime((String) dataStoreNodes.getLeaves().get("last-sync-time"))
+                            .build();
+                    }
+                    this.datastores = DataStores.builder().operationalDataStore(operationalDataStore)
+                        .runningDataStore(runningDataStore).build();
+                }
+            }
+        }
+        return this;
+    }
+
+}
-- 
cgit