Merge "Ncmp out event for REJECTED scenario"
[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-2024 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.JsonInclude;
25 import com.fasterxml.jackson.annotation.JsonInclude.Include;
26 import com.fasterxml.jackson.annotation.JsonProperty;
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Map;
30 import lombok.AllArgsConstructor;
31 import lombok.Data;
32 import lombok.EqualsAndHashCode;
33 import lombok.Getter;
34 import lombok.NoArgsConstructor;
35 import lombok.Setter;
36 import org.apache.commons.lang3.StringUtils;
37 import org.onap.cps.ncmp.api.impl.inventory.CompositeState;
38 import org.onap.cps.ncmp.api.impl.operations.RequiredDmiService;
39 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
40
41 /**
42  * Cm Handle which follows the Yang resource dmi registry model when persisting data to DMI or the DB.
43  * Yang model CmHandle
44  */
45 @Getter
46 @Setter
47 @NoArgsConstructor
48 @JsonInclude(Include.NON_NULL)
49 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
50 public class YangModelCmHandle {
51
52     @EqualsAndHashCode.Include
53     private String id;
54
55     @JsonProperty("dmi-service-name")
56     private String dmiServiceName;
57
58     @JsonProperty("dmi-data-service-name")
59     private String dmiDataServiceName;
60
61     @JsonProperty("state")
62     private CompositeState compositeState;
63
64     @JsonProperty("dmi-model-service-name")
65     private String dmiModelServiceName;
66
67     @JsonProperty("module-set-tag")
68     private String moduleSetTag;
69
70     @JsonProperty("alternate-id")
71     private String alternateId;
72
73     @JsonProperty("data-producer-identifier")
74     private String dataProducerIdentifier;
75
76     @JsonProperty("additional-properties")
77     private List<Property> dmiProperties;
78
79     @JsonProperty("public-properties")
80     private List<Property> publicProperties;
81
82     /**
83      * Creates a deep copy of Yang Model Cm Handle.
84      *
85      * @param original Yang Model Cm Handle
86      * @return instance of yangModelCmHandle
87      */
88     public static YangModelCmHandle deepCopyOf(final YangModelCmHandle original) {
89         final YangModelCmHandle copy = new YangModelCmHandle();
90         copy.id = original.getId();
91         copy.dmiServiceName = original.getDmiServiceName();
92         copy.dmiDataServiceName = original.getDmiDataServiceName();
93         copy.dmiModelServiceName = original.getDmiModelServiceName();
94         copy.compositeState =
95                 original.getCompositeState() == null ? null : new CompositeState(original.getCompositeState());
96         copy.dmiProperties = original.getDmiProperties() == null ? null : new ArrayList<>(original.getDmiProperties());
97         copy.publicProperties =
98                 original.getPublicProperties() == null ? null : new ArrayList<>(original.getPublicProperties());
99         copy.moduleSetTag = original.getModuleSetTag();
100         copy.alternateId = original.getAlternateId();
101         copy.dataProducerIdentifier = original.getDataProducerIdentifier();
102         return copy;
103     }
104
105     /**
106      * Create a yangModelCmHandle.
107      *
108      * @param dmiServiceName      dmi service name
109      * @param dmiDataServiceName  dmi data service name
110      * @param dmiModelServiceName dmi model service name
111      * @param ncmpServiceCmHandle the cm handle
112      * @param moduleSetTag moduleSetTag
113      * @param alternateId alternateId
114      * @param dataProducerIdentifier dataProducerIdentifier
115      * @return instance of yangModelCmHandle
116      */
117     public static YangModelCmHandle toYangModelCmHandle(final String dmiServiceName,
118                                                         final String dmiDataServiceName,
119                                                         final String dmiModelServiceName,
120                                                         final NcmpServiceCmHandle ncmpServiceCmHandle,
121                                                         final String moduleSetTag,
122                                                         final String alternateId,
123                                                         final String dataProducerIdentifier) {
124         final YangModelCmHandle yangModelCmHandle = new YangModelCmHandle();
125         yangModelCmHandle.setId(ncmpServiceCmHandle.getCmHandleId());
126         yangModelCmHandle.setDmiServiceName(dmiServiceName);
127         yangModelCmHandle.setDmiDataServiceName(dmiDataServiceName);
128         yangModelCmHandle.setDmiModelServiceName(dmiModelServiceName);
129         yangModelCmHandle.setModuleSetTag(moduleSetTag == null ? StringUtils.EMPTY : moduleSetTag);
130         yangModelCmHandle.setAlternateId(alternateId == null ? StringUtils.EMPTY : alternateId);
131         yangModelCmHandle.setDataProducerIdentifier(
132             dataProducerIdentifier == null ? StringUtils.EMPTY : dataProducerIdentifier);
133         yangModelCmHandle.setDmiProperties(asYangModelCmHandleProperties(ncmpServiceCmHandle.getDmiProperties()));
134         yangModelCmHandle.setPublicProperties(asYangModelCmHandleProperties(
135                 ncmpServiceCmHandle.getPublicProperties()));
136         yangModelCmHandle.setCompositeState(ncmpServiceCmHandle.getCompositeState());
137         return yangModelCmHandle;
138     }
139
140     /**
141      * Resolve a dmi service name.
142      *
143      * @param requiredService indicates what typo of service is required
144      * @return dmi service name
145      */
146     public String resolveDmiServiceName(final RequiredDmiService requiredService) {
147         if (StringUtils.isBlank(dmiServiceName)) {
148             if (RequiredDmiService.DATA.equals(requiredService)) {
149                 return dmiDataServiceName;
150             }
151             return dmiModelServiceName;
152         }
153         return dmiServiceName;
154     }
155
156     private static List<Property> asYangModelCmHandleProperties(final Map<String, String> propertiesAsMap) {
157         final List<Property> yangModelCmHandleProperties = new ArrayList<>(propertiesAsMap.size());
158         for (final Map.Entry<String, String> entry : propertiesAsMap.entrySet()) {
159             yangModelCmHandleProperties.add(new YangModelCmHandle.Property(entry.getKey(), entry.getValue()));
160         }
161         return yangModelCmHandleProperties;
162     }
163
164     @AllArgsConstructor
165     @Data
166     public static class Property {
167
168         @JsonProperty()
169         private final String name;
170
171         @JsonProperty()
172         private final String value;
173     }
174
175 }