Merge "Bug fix for delete data node not working for root node"
[cps.git] / cps-ncmp-service / src / main / java / org / onap / cps / ncmp / api / impl / yangmodels / YangModelCmHandle.java
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-2022 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21
22 package org.onap.cps.ncmp.api.impl.yangmodels;
23
24 import com.fasterxml.jackson.annotation.JsonProperty;
25 import com.google.common.base.Strings;
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.Map;
29 import lombok.AllArgsConstructor;
30 import lombok.Data;
31 import lombok.Getter;
32 import lombok.NoArgsConstructor;
33 import lombok.Setter;
34 import org.onap.cps.ncmp.api.impl.operations.RequiredDmiService;
35 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
36
37 /**
38  * Cm Handle which follows the Yang resource dmi registry model when persisting data to DMI or the DB.
39  * Yang model CmHandle
40  */
41 @Getter
42 @Setter
43 @NoArgsConstructor
44 public class YangModelCmHandle {
45
46     private String id;
47
48     @JsonProperty("dmi-service-name")
49     private String dmiServiceName;
50
51     @JsonProperty("dmi-data-service-name")
52     private String dmiDataServiceName;
53
54     @JsonProperty("dmi-model-service-name")
55     private String dmiModelServiceName;
56
57     @JsonProperty("additional-properties")
58     private List<Property> dmiProperties;
59
60     @JsonProperty("public-properties")
61     private List<Property> publicProperties;
62
63     /**
64      * Create a yangModelCmHandle.
65      * @param dmiServiceName dmi service name
66      * @param dmiDataServiceName dmi data service name
67      * @param dmiModelServiceName dmi model service name
68      * @param ncmpServiceCmHandle the cm handle
69      * @return instance of yangModelCmHandle
70      */
71     public static YangModelCmHandle toYangModelCmHandle(final String dmiServiceName,
72                                                         final String dmiDataServiceName,
73                                                         final String dmiModelServiceName,
74                                                         final NcmpServiceCmHandle ncmpServiceCmHandle) {
75         final YangModelCmHandle yangModelCmHandle = new YangModelCmHandle();
76         yangModelCmHandle.setId(ncmpServiceCmHandle.getCmHandleID());
77         yangModelCmHandle.setDmiServiceName(dmiServiceName);
78         yangModelCmHandle.setDmiDataServiceName(dmiDataServiceName);
79         yangModelCmHandle.setDmiModelServiceName(dmiModelServiceName);
80         yangModelCmHandle.setDmiProperties(asYangModelCmHandleProperties(ncmpServiceCmHandle.getDmiProperties()));
81         yangModelCmHandle.setPublicProperties(asYangModelCmHandleProperties(
82             ncmpServiceCmHandle.getPublicProperties()));
83         return yangModelCmHandle;
84     }
85
86     /**
87      * Resolve a dmi service name.
88      * @param requiredService indicates what typo of service is required
89      * @return dmi service name
90      */
91     public String resolveDmiServiceName(final RequiredDmiService requiredService) {
92         if (isNullEmptyOrBlank(dmiServiceName)) {
93             if (RequiredDmiService.DATA.equals(requiredService)) {
94                 return dmiDataServiceName;
95             }
96             return dmiModelServiceName;
97         }
98         return dmiServiceName;
99     }
100
101     private static List<Property> asYangModelCmHandleProperties(final Map<String, String> propertiesAsMap) {
102         final List<Property> yangModelCmHandleProperties = new ArrayList<>(propertiesAsMap.size());
103         for (final Map.Entry<String, String> entry : propertiesAsMap.entrySet()) {
104             yangModelCmHandleProperties.add(new YangModelCmHandle.Property(entry.getKey(), entry.getValue()));
105         }
106         return yangModelCmHandleProperties;
107     }
108
109     private static boolean isNullEmptyOrBlank(final String serviceName) {
110         return Strings.isNullOrEmpty(serviceName) || serviceName.isBlank();
111     }
112
113     @AllArgsConstructor
114     @Data
115     public static class Property {
116
117         @JsonProperty()
118         private final String name;
119
120         @JsonProperty()
121         private final String value;
122     }
123
124 }