2 * ============LICENSE_START=======================================================
3 * Copyright (C) 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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.cps.ncmp.api.impl.event.lcm;
23 import static org.onap.cps.ncmp.api.impl.event.lcm.LcmEventType.CREATE;
24 import static org.onap.cps.ncmp.api.impl.event.lcm.LcmEventType.DELETE;
25 import static org.onap.cps.ncmp.api.impl.event.lcm.LcmEventType.UPDATE;
26 import static org.onap.cps.ncmp.api.inventory.CmHandleState.DELETED;
28 import com.google.common.collect.MapDifference;
29 import com.google.common.collect.Maps;
30 import java.util.HashMap;
31 import java.util.List;
33 import lombok.AccessLevel;
34 import lombok.NoArgsConstructor;
35 import lombok.extern.slf4j.Slf4j;
36 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
37 import org.onap.ncmp.cmhandle.event.lcm.Values;
40 * LcmEventsCreatorHelper has helper methods to create LcmEvent.
41 * Determine the lcm event type i.e create,update and delete.
42 * Based on lcm event type create the LcmEvent payload.
45 @NoArgsConstructor(access = AccessLevel.PRIVATE)
46 public class LcmEventsCreatorHelper {
49 * Determining the event type based on the composite state.
51 * @param targetNcmpServiceCmHandle target ncmpServiceCmHandle
52 * @param existingNcmpServiceCmHandle existing ncmpServiceCmHandle
55 public static LcmEventType determineEventType(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
56 final NcmpServiceCmHandle existingNcmpServiceCmHandle) {
58 if (existingNcmpServiceCmHandle.getCompositeState() == null) {
60 } else if (targetNcmpServiceCmHandle.getCompositeState().getCmHandleState() == DELETED) {
67 * Determine the cmhandle value difference pair.Contains the difference in the form of oldValues and newValues.
69 * @param targetNcmpServiceCmHandle target ncmpServiceCmHandle
70 * @param existingNcmpServiceCmHandle existing ncmpServiceCmHandle
71 * @param lcmEventType lcm event type
72 * @return Lcm Event Value difference pair
74 public static LcmEventsCreator.CmHandleValuesHolder determineEventValues(
75 final NcmpServiceCmHandle targetNcmpServiceCmHandle, final NcmpServiceCmHandle existingNcmpServiceCmHandle,
76 final LcmEventType lcmEventType) {
78 if (CREATE == lcmEventType) {
79 return determineCreateEventValues(targetNcmpServiceCmHandle);
80 } else if (UPDATE == lcmEventType) {
81 return determineUpdateEventValues(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle);
83 return new LcmEventsCreator.CmHandleValuesHolder();
87 private static LcmEventsCreator.CmHandleValuesHolder determineCreateEventValues(
88 final NcmpServiceCmHandle ncmpServiceCmHandle) {
89 final LcmEventsCreator.CmHandleValuesHolder cmHandleValuesHolder = new LcmEventsCreator.CmHandleValuesHolder();
90 cmHandleValuesHolder.setNewValues(new Values());
91 cmHandleValuesHolder.getNewValues().setDataSyncEnabled(getDataSyncEnabledFlag(ncmpServiceCmHandle));
92 cmHandleValuesHolder.getNewValues()
93 .setCmHandleState(mapCmHandleStateToLcmEventCmHandleState(ncmpServiceCmHandle));
94 cmHandleValuesHolder.getNewValues().setCmHandleProperties(List.of(ncmpServiceCmHandle.getPublicProperties()));
95 return cmHandleValuesHolder;
98 private static LcmEventsCreator.CmHandleValuesHolder determineUpdateEventValues(
99 final NcmpServiceCmHandle targetNcmpServiceCmHandle,
100 final NcmpServiceCmHandle existingNcmpServiceCmHandle) {
102 final boolean isDataSyncFlagEnabledChanged =
103 isDataSyncEnabledFlagChanged(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle);
104 final boolean isCmHandleStateChanged =
105 isCmHandleStateChanged(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle);
106 final boolean isPublicCmHandlePropertiesEqual =
107 isPublicCmHandlePropertiesEqual(targetNcmpServiceCmHandle.getPublicProperties(),
108 existingNcmpServiceCmHandle.getPublicProperties());
110 final LcmEventsCreator.CmHandleValuesHolder cmHandleValuesHolder = new LcmEventsCreator.CmHandleValuesHolder();
112 if (isDataSyncFlagEnabledChanged || isCmHandleStateChanged || (!isPublicCmHandlePropertiesEqual)) {
113 cmHandleValuesHolder.setOldValues(new Values());
114 cmHandleValuesHolder.setNewValues(new Values());
116 return cmHandleValuesHolder;
119 if (isDataSyncFlagEnabledChanged) {
120 setDataSyncEnabledFlag(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle, cmHandleValuesHolder);
123 if (isCmHandleStateChanged) {
124 setCmHandleStateChange(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle, cmHandleValuesHolder);
127 if (!isPublicCmHandlePropertiesEqual) {
128 setPublicCmHandlePropertiesChange(targetNcmpServiceCmHandle, existingNcmpServiceCmHandle,
129 cmHandleValuesHolder);
132 return cmHandleValuesHolder;
136 private static void setDataSyncEnabledFlag(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
137 final NcmpServiceCmHandle existingNcmpServiceCmHandle,
138 final LcmEventsCreator.CmHandleValuesHolder cmHandleValuesHolder) {
140 cmHandleValuesHolder.getOldValues().setDataSyncEnabled(getDataSyncEnabledFlag(existingNcmpServiceCmHandle));
141 cmHandleValuesHolder.getNewValues().setDataSyncEnabled(getDataSyncEnabledFlag(targetNcmpServiceCmHandle));
145 private static void setCmHandleStateChange(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
146 final NcmpServiceCmHandle existingNcmpServiceCmHandle,
147 final LcmEventsCreator.CmHandleValuesHolder cmHandleValuesHolder) {
148 cmHandleValuesHolder.getOldValues()
149 .setCmHandleState(mapCmHandleStateToLcmEventCmHandleState(existingNcmpServiceCmHandle));
150 cmHandleValuesHolder.getNewValues()
151 .setCmHandleState(mapCmHandleStateToLcmEventCmHandleState(targetNcmpServiceCmHandle));
154 private static void setPublicCmHandlePropertiesChange(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
155 final NcmpServiceCmHandle existingNcmpServiceCmHandle,
156 final LcmEventsCreator.CmHandleValuesHolder cmHandleValuesHolder) {
158 final Map<String, Map<String, String>> publicCmHandlePropertiesDifference =
159 getPublicCmHandlePropertiesDifference(targetNcmpServiceCmHandle.getPublicProperties(),
160 existingNcmpServiceCmHandle.getPublicProperties());
161 cmHandleValuesHolder.getOldValues()
162 .setCmHandleProperties(List.of(publicCmHandlePropertiesDifference.get("oldValues")));
163 cmHandleValuesHolder.getNewValues()
164 .setCmHandleProperties(List.of(publicCmHandlePropertiesDifference.get("newValues")));
168 private static Values.CmHandleState mapCmHandleStateToLcmEventCmHandleState(
169 final NcmpServiceCmHandle ncmpServiceCmHandle) {
170 return Values.CmHandleState.fromValue(ncmpServiceCmHandle.getCompositeState().getCmHandleState().name());
173 private static Boolean getDataSyncEnabledFlag(final NcmpServiceCmHandle ncmpServiceCmHandle) {
174 return ncmpServiceCmHandle.getCompositeState().getDataSyncEnabled();
177 private static boolean isDataSyncEnabledFlagChanged(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
178 final NcmpServiceCmHandle existingNcmpServiceCmHandle) {
180 return !targetNcmpServiceCmHandle.getCompositeState().getDataSyncEnabled()
181 .equals(existingNcmpServiceCmHandle.getCompositeState().getDataSyncEnabled());
184 private static boolean isCmHandleStateChanged(final NcmpServiceCmHandle targetNcmpServiceCmHandle,
185 final NcmpServiceCmHandle existingNcmpServiceCmHandle) {
187 return targetNcmpServiceCmHandle.getCompositeState().getCmHandleState()
188 != existingNcmpServiceCmHandle.getCompositeState().getCmHandleState();
191 private static boolean isPublicCmHandlePropertiesEqual(final Map<String, String> targetCmHandleProperties,
192 final Map<String, String> existingCmHandleProperties) {
193 if (targetCmHandleProperties.size() != existingCmHandleProperties.size()) {
197 return targetCmHandleProperties.equals(existingCmHandleProperties);
200 private static Map<String, Map<String, String>> getPublicCmHandlePropertiesDifference(
201 final Map<String, String> targetCmHandleProperties, final Map<String, String> existingCmHandleProperties) {
202 final Map<String, Map<String, String>> oldAndNewPropertiesDifferenceMap = new HashMap<>(2);
204 final MapDifference<String, String> cmHandlePropertiesDifference =
205 Maps.difference(targetCmHandleProperties, existingCmHandleProperties);
207 final Map<String, String> newValues = new HashMap<>(cmHandlePropertiesDifference.entriesOnlyOnLeft());
208 final Map<String, String> oldValues = new HashMap<>(cmHandlePropertiesDifference.entriesOnlyOnRight());
210 cmHandlePropertiesDifference.entriesDiffering().keySet().forEach(cmHandlePropertyName -> {
211 oldValues.put(cmHandlePropertyName, existingCmHandleProperties.get(cmHandlePropertyName));
212 newValues.put(cmHandlePropertyName, targetCmHandleProperties.get(cmHandlePropertyName));
215 oldAndNewPropertiesDifferenceMap.put("oldValues", oldValues);
216 oldAndNewPropertiesDifferenceMap.put("newValues", newValues);
218 return oldAndNewPropertiesDifferenceMap;