aboutsummaryrefslogtreecommitdiffstats
path: root/cps-ncmp-service/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'cps-ncmp-service/src/main')
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NcmpResponseStatus.java5
-rwxr-xr-xcps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java206
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java3
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiInEventProducer.java74
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiOutEventConsumer.java62
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java9
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandleRegistrationResponse.java38
-rw-r--r--cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java4
8 files changed, 283 insertions, 118 deletions
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NcmpResponseStatus.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NcmpResponseStatus.java
index b9c834c559..462679e74f 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NcmpResponseStatus.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NcmpResponseStatus.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2023 Nordix Foundation
+ * Copyright (C) 2023-2024 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,7 +36,8 @@ public enum NcmpResponseStatus {
SUBSCRIPTION_PENDING("106", "subscription pending for all cm handles"),
UNKNOWN_ERROR("108", "Unknown error"),
CM_HANDLE_ALREADY_EXIST("109", "cm-handle already exists"),
- CM_HANDLE_INVALID_ID("110", "cm-handle has an invalid character(s) in id");
+ CM_HANDLE_INVALID_ID("110", "cm-handle has an invalid character(s) in id"),
+ ALTERNATE_ID_ALREADY_ASSOCIATED("111", "alternate id already associated");
private final String code;
private final String message;
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
index 1f2748b4af..08afde49a1 100755
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
@@ -24,6 +24,7 @@
package org.onap.cps.ncmp.api.impl;
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.ALTERNATE_ID_ALREADY_ASSOCIATED;
import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_FOUND;
import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_READY;
import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLE_ALREADY_EXIST;
@@ -306,45 +307,17 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
return inventoryPersistence.getYangModelCmHandle(cmHandleId).getCompositeState();
}
- /**
- * THis method registers a cm handle and initiates modules sync.
- *
- * @param dmiPluginRegistration dmi plugin registration information.
- * @return cm-handle registration response for create cm-handle requests.
- */
- public List<CmHandleRegistrationResponse> parseAndProcessCreatedCmHandlesInRegistration(
- final DmiPluginRegistration dmiPluginRegistration, final Collection<String> acceptedCmHandleIds) {
- final List<NcmpServiceCmHandle> cmHandlesToBeCreated = dmiPluginRegistration.getCreatedCmHandles();
- final Map<String, TrustLevel> initialTrustLevelPerCmHandleId = new HashMap<>(cmHandlesToBeCreated.size());
- final List<YangModelCmHandle> yangModelCmHandles = new ArrayList<>(cmHandlesToBeCreated.size());
- cmHandlesToBeCreated
- .forEach(cmHandle -> {
- if (acceptedCmHandleIds.contains(cmHandle.getCmHandleId())) {
- final YangModelCmHandle yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle(
- dmiPluginRegistration.getDmiPlugin(),
- dmiPluginRegistration.getDmiDataPlugin(),
- dmiPluginRegistration.getDmiModelPlugin(),
- cmHandle,
- cmHandle.getModuleSetTag(),
- cmHandle.getAlternateId());
- yangModelCmHandles.add(yangModelCmHandle);
- initialTrustLevelPerCmHandleId.put(cmHandle.getCmHandleId(),
- cmHandle.getRegistrationTrustLevel());
- }
- });
- return registerNewCmHandles(yangModelCmHandles, initialTrustLevelPerCmHandleId);
- }
-
- protected List<CmHandleRegistrationResponse> parseAndProcessDeletedCmHandlesInRegistration(
- final List<String> tobeRemovedCmHandles) {
+ protected void processRemovedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
+ final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
+ final List<String> tobeRemovedCmHandleIds = dmiPluginRegistration.getRemovedCmHandles();
final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses =
- new ArrayList<>(tobeRemovedCmHandles.size());
+ new ArrayList<>(tobeRemovedCmHandleIds.size());
final Collection<YangModelCmHandle> yangModelCmHandles =
- inventoryPersistence.getYangModelCmHandles(tobeRemovedCmHandles);
+ inventoryPersistence.getYangModelCmHandles(tobeRemovedCmHandleIds);
updateCmHandleStateBatch(yangModelCmHandles, CmHandleState.DELETING);
final Set<String> notDeletedCmHandles = new HashSet<>();
- for (final List<String> tobeRemovedCmHandleBatch : Lists.partition(tobeRemovedCmHandles, DELETE_BATCH_SIZE)) {
+ for (final List<String> tobeRemovedCmHandleBatch : Lists.partition(tobeRemovedCmHandleIds, DELETE_BATCH_SIZE)) {
try {
batchDeleteCmHandlesFromDbAndModuleSyncMap(tobeRemovedCmHandleBatch);
tobeRemovedCmHandleBatch.forEach(cmHandleId ->
@@ -362,60 +335,58 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
}
}
}
-
yangModelCmHandles.removeIf(yangModelCmHandle -> notDeletedCmHandles.contains(yangModelCmHandle.getId()));
updateCmHandleStateBatch(yangModelCmHandles, CmHandleState.DELETED);
-
- return cmHandleRegistrationResponses;
+ dmiPluginRegistrationResponse.setRemovedCmHandles(cmHandleRegistrationResponses);
}
- private void processRemovedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
+ protected void processCreatedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
- if (!dmiPluginRegistration.getRemovedCmHandles().isEmpty()) {
- dmiPluginRegistrationResponse.setRemovedCmHandles(
- parseAndProcessDeletedCmHandlesInRegistration(dmiPluginRegistration.getRemovedCmHandles()));
- }
- }
+ final List<NcmpServiceCmHandle> ncmpServiceCmHandles = dmiPluginRegistration.getCreatedCmHandles();
+ final List<CmHandleRegistrationResponse> failedCmHandleRegistrationResponses = new ArrayList<>();
- private void processCreatedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
- final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
- final Collection<String> acceptedCmHandleIds = alternateIdChecker
- .getIdsOfCmHandlesWithAcceptableAlternateId(dmiPluginRegistration.getCreatedCmHandles());
- if (!acceptedCmHandleIds.isEmpty()) {
- dmiPluginRegistrationResponse.setCreatedCmHandles(
- parseAndProcessCreatedCmHandlesInRegistration(dmiPluginRegistration, acceptedCmHandleIds));
- }
- }
+ try {
+ final Collection<String> rejectedCmHandleIds
+ = checkAlternateIds(ncmpServiceCmHandles, failedCmHandleRegistrationResponses);
- private void processUpdatedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
- final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
- if (!dmiPluginRegistration.getUpdatedCmHandles().isEmpty()) {
- dmiPluginRegistrationResponse.setUpdatedCmHandles(
- networkCmProxyDataServicePropertyHandler
- .updateCmHandleProperties(dmiPluginRegistration.getUpdatedCmHandles()));
+ final Collection<String> succeededCmHandleIds = persistCmHandlesWithState(dmiPluginRegistration,
+ dmiPluginRegistrationResponse, ncmpServiceCmHandles, rejectedCmHandleIds);
+
+ processTrustLevels(ncmpServiceCmHandles, succeededCmHandleIds);
+
+ } catch (final AlreadyDefinedException alreadyDefinedException) {
+ failedCmHandleRegistrationResponses.addAll(CmHandleRegistrationResponse.createFailureResponsesFromXpaths(
+ alreadyDefinedException.getAlreadyDefinedObjectNames(), CM_HANDLE_ALREADY_EXIST));
+ } catch (final Exception exception) {
+ final Collection<String> cmHandleIds =
+ ncmpServiceCmHandles.stream().map(NcmpServiceCmHandle::getCmHandleId).collect(Collectors.toList());
+ failedCmHandleRegistrationResponses.addAll(CmHandleRegistrationResponse
+ .createFailureResponses(cmHandleIds, exception));
}
+ final List<CmHandleRegistrationResponse> mergedCmHandleRegistrationResponses
+ = new ArrayList<>(failedCmHandleRegistrationResponses);
+ mergedCmHandleRegistrationResponses.addAll(dmiPluginRegistrationResponse.getCreatedCmHandles());
+
+ dmiPluginRegistrationResponse.setCreatedCmHandles(mergedCmHandleRegistrationResponses);
}
- private void processUpgradedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
- final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
- if (dmiPluginRegistration.getUpgradedCmHandles() != null
- && !dmiPluginRegistration.getUpgradedCmHandles().getCmHandles().isEmpty()) {
- dmiPluginRegistrationResponse.setUpgradedCmHandles(
- parseAndProcessUpgradedCmHandlesInRegistration(dmiPluginRegistration));
- }
+ protected void processUpdatedCmHandles(final DmiPluginRegistration dmiPluginRegistration,
+ final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
+ dmiPluginRegistrationResponse.setUpdatedCmHandles(networkCmProxyDataServicePropertyHandler
+ .updateCmHandleProperties(dmiPluginRegistration.getUpdatedCmHandles()));
}
+ protected void processUpgradedCmHandles(
+ final DmiPluginRegistration dmiPluginRegistration,
+ final DmiPluginRegistrationResponse dmiPluginRegistrationResponse) {
- protected List<CmHandleRegistrationResponse> parseAndProcessUpgradedCmHandlesInRegistration(
- final DmiPluginRegistration dmiPluginRegistration) {
-
- final List<String> upgradedCmHandleIds = dmiPluginRegistration.getUpgradedCmHandles().getCmHandles();
+ final List<String> cmHandleIds = dmiPluginRegistration.getUpgradedCmHandles().getCmHandles();
final String upgradedModuleSetTag = dmiPluginRegistration.getUpgradedCmHandles().getModuleSetTag();
final Map<YangModelCmHandle, CmHandleState> acceptedCmHandleStatePerCmHandle
- = new HashMap<>(upgradedCmHandleIds.size());
- final List<CmHandleRegistrationResponse> cmHandleUpgradeResponses = new ArrayList<>(upgradedCmHandleIds.size());
+ = new HashMap<>(cmHandleIds.size());
+ final List<CmHandleRegistrationResponse> cmHandleUpgradeResponses = new ArrayList<>(cmHandleIds.size());
- for (final String cmHandleId : upgradedCmHandleIds) {
+ for (final String cmHandleId : cmHandleIds) {
try {
final YangModelCmHandle yangModelCmHandle = inventoryPersistence.getYangModelCmHandle(cmHandleId);
if (yangModelCmHandle.getCompositeState().getCmHandleState() == CmHandleState.READY) {
@@ -442,7 +413,61 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
}
}
cmHandleUpgradeResponses.addAll(upgradeCmHandles(acceptedCmHandleStatePerCmHandle));
- return cmHandleUpgradeResponses;
+ dmiPluginRegistrationResponse.setUpgradedCmHandles(cmHandleUpgradeResponses);
+ }
+
+ private Collection<String> checkAlternateIds(
+ final List<NcmpServiceCmHandle> cmHandlesToBeCreated,
+ final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses) {
+ final Collection<String> rejectedCmHandleIds = alternateIdChecker
+ .getIdsOfCmHandlesWithRejectedAlternateId(cmHandlesToBeCreated);
+ cmHandleRegistrationResponses.addAll(CmHandleRegistrationResponse.createFailureResponses(
+ rejectedCmHandleIds, ALTERNATE_ID_ALREADY_ASSOCIATED));
+ return rejectedCmHandleIds;
+ }
+
+ private List<String> persistCmHandlesWithState(final DmiPluginRegistration dmiPluginRegistration,
+ final DmiPluginRegistrationResponse dmiPluginRegistrationResponse,
+ final List<NcmpServiceCmHandle> cmHandlesToBeCreated,
+ final Collection<String> rejectedCmHandleIds) {
+ final List<String> succeededCmHandleIds = new ArrayList<>(cmHandlesToBeCreated.size());
+ final List<YangModelCmHandle> yangModelCmHandlesToRegister = new ArrayList<>(cmHandlesToBeCreated.size());
+ final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses =
+ new ArrayList<>(cmHandlesToBeCreated.size());
+ for (final NcmpServiceCmHandle ncmpServiceCmHandle: cmHandlesToBeCreated) {
+ if (!rejectedCmHandleIds.contains(ncmpServiceCmHandle.getCmHandleId())) {
+ yangModelCmHandlesToRegister.add(getYangModelCmHandle(dmiPluginRegistration, ncmpServiceCmHandle));
+ cmHandleRegistrationResponses.add(
+ CmHandleRegistrationResponse.createSuccessResponse(ncmpServiceCmHandle.getCmHandleId()));
+ succeededCmHandleIds.add(ncmpServiceCmHandle.getCmHandleId());
+ }
+ }
+ lcmEventsCmHandleStateHandler.initiateStateAdvised(yangModelCmHandlesToRegister);
+ dmiPluginRegistrationResponse.setCreatedCmHandles(cmHandleRegistrationResponses);
+ return succeededCmHandleIds;
+ }
+
+ private YangModelCmHandle getYangModelCmHandle(final DmiPluginRegistration dmiPluginRegistration,
+ final NcmpServiceCmHandle ncmpServiceCmHandle) {
+ return YangModelCmHandle.toYangModelCmHandle(
+ dmiPluginRegistration.getDmiPlugin(),
+ dmiPluginRegistration.getDmiDataPlugin(),
+ dmiPluginRegistration.getDmiModelPlugin(),
+ ncmpServiceCmHandle,
+ ncmpServiceCmHandle.getModuleSetTag(),
+ ncmpServiceCmHandle.getAlternateId());
+ }
+
+ private void processTrustLevels(final Collection<NcmpServiceCmHandle> cmHandlesToBeCreated,
+ final Collection<String> succeededCmHandleIds) {
+ final Map<String, TrustLevel> initialTrustLevelPerCmHandleId = new HashMap<>(cmHandlesToBeCreated.size());
+ for (final NcmpServiceCmHandle ncmpServiceCmHandle: cmHandlesToBeCreated) {
+ if (succeededCmHandleIds.contains(ncmpServiceCmHandle.getCmHandleId())) {
+ initialTrustLevelPerCmHandleId.put(ncmpServiceCmHandle.getCmHandleId(),
+ ncmpServiceCmHandle.getRegistrationTrustLevel());
+ }
+ }
+ trustLevelManager.handleInitialRegistrationOfTrustLevels(initialTrustLevelPerCmHandleId);
}
private static boolean moduleUpgradeCanBeSkipped(final YangModelCmHandle yangModelCmHandle,
@@ -488,15 +513,14 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
private void deleteCmHandleFromDbAndModuleSyncMap(final String cmHandleId) {
inventoryPersistence.deleteSchemaSetWithCascade(cmHandleId);
- inventoryPersistence.deleteDataNode(NCMP_DMI_REGISTRY_PARENT + "/cm-handles[@id='" + cmHandleId
- + "']");
+ inventoryPersistence.deleteDataNode(NCMP_DMI_REGISTRY_PARENT + "/cm-handles[@id='" + cmHandleId + "']");
removeDeletedCmHandleFromModuleSyncMap(cmHandleId);
}
- private void batchDeleteCmHandlesFromDbAndModuleSyncMap(final Collection<String> tobeRemovedCmHandles) {
- inventoryPersistence.deleteSchemaSetsWithCascade(tobeRemovedCmHandles);
- inventoryPersistence.deleteDataNodes(mapCmHandleIdsToXpaths(tobeRemovedCmHandles));
- tobeRemovedCmHandles.forEach(this::removeDeletedCmHandleFromModuleSyncMap);
+ private void batchDeleteCmHandlesFromDbAndModuleSyncMap(final Collection<String> cmHandleIds) {
+ inventoryPersistence.deleteSchemaSetsWithCascade(cmHandleIds);
+ inventoryPersistence.deleteDataNodes(mapCmHandleIdsToXpaths(cmHandleIds));
+ cmHandleIds.forEach(this::removeDeletedCmHandleFromModuleSyncMap);
}
private Collection<String> mapCmHandleIdsToXpaths(final Collection<String> cmHandles) {
@@ -506,25 +530,9 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
}
// CPS-1239 Robustness cleaning of in progress cache
- private void removeDeletedCmHandleFromModuleSyncMap(final String deletedCmHandleId) {
- if (moduleSyncStartedOnCmHandles.remove(deletedCmHandleId) != null) {
- log.debug("{} removed from in progress map", deletedCmHandleId);
- }
- }
-
- private List<CmHandleRegistrationResponse> registerNewCmHandles(final List<YangModelCmHandle> yangModelCmHandles,
- final Map<String, TrustLevel>
- initialTrustLevelPerCmHandleId) {
- final Set<String> cmHandleIds = initialTrustLevelPerCmHandleId.keySet();
- try {
- lcmEventsCmHandleStateHandler.initiateStateAdvised(yangModelCmHandles);
- trustLevelManager.handleInitialRegistrationOfTrustLevels(initialTrustLevelPerCmHandleId);
- return CmHandleRegistrationResponse.createSuccessResponses(cmHandleIds);
- } catch (final AlreadyDefinedException alreadyDefinedException) {
- return CmHandleRegistrationResponse.createFailureResponses(
- alreadyDefinedException.getAlreadyDefinedObjectNames(), CM_HANDLE_ALREADY_EXIST);
- } catch (final Exception exception) {
- return CmHandleRegistrationResponse.createFailureResponses(cmHandleIds, exception);
+ private void removeDeletedCmHandleFromModuleSyncMap(final String cmHandleId) {
+ if (moduleSyncStartedOnCmHandles.remove(cmHandleId) != null) {
+ log.debug("{} removed from in progress map", cmHandleId);
}
}
@@ -553,6 +561,4 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
}
}
-
-
}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java
index 1478c86c24..f5d22af281 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java
@@ -77,7 +77,8 @@ public class NetworkCmProxyDataServicePropertyHandler {
*/
public List<CmHandleRegistrationResponse> updateCmHandleProperties(
final Collection<NcmpServiceCmHandle> ncmpServiceCmHandles) {
- final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses = new ArrayList<>();
+ final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses
+ = new ArrayList<>(ncmpServiceCmHandles.size());
for (final NcmpServiceCmHandle ncmpServiceCmHandle : ncmpServiceCmHandles) {
final String cmHandleId = ncmpServiceCmHandle.getCmHandleId();
try {
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiInEventProducer.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiInEventProducer.java
new file mode 100644
index 0000000000..5c192a953f
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiInEventProducer.java
@@ -0,0 +1,74 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation
+ * ================================================================================
+ * 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.impl.events.cmsubscription;
+
+import io.cloudevents.CloudEvent;
+import io.cloudevents.core.builder.CloudEventBuilder;
+import java.net.URI;
+import java.util.UUID;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.onap.cps.events.EventsPublisher;
+import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.ncmp_to_dmi.CmNotificationSubscriptionDmiInEvent;
+import org.onap.cps.utils.JsonObjectMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+@RequiredArgsConstructor
+@ConditionalOnProperty(name = "notification.enabled", havingValue = "true", matchIfMissing = true)
+public class CmNotificationSubscriptionDmiInEventProducer {
+
+ private final EventsPublisher<CloudEvent> eventsPublisher;
+ private final JsonObjectMapper jsonObjectMapper;
+
+ @Value("${app.ncmp.avc.subscription-forward-topic-prefix}")
+ private String cmNotificationSubscriptionDmiInEventTopic;
+
+ /**
+ * Publish the event to the provided dmi plugin with key as subscription id and the event is in Cloud Event format.
+ *
+ * @param subscriptionId Cm Subscription Id
+ * @param dmiPluginName Dmi Plugin Name
+ * @param eventType Type of event
+ * @param cmNotificationSubscriptionDmiInEvent Cm Notification Subscription event for Dmi
+ */
+ public void publishCmNotificationSubscriptionDmiInEvent(final String subscriptionId, final String dmiPluginName,
+ final String eventType, final CmNotificationSubscriptionDmiInEvent cmNotificationSubscriptionDmiInEvent) {
+ eventsPublisher.publishCloudEvent(cmNotificationSubscriptionDmiInEventTopic, subscriptionId,
+ buildAndGetCmNotificationDmiInEventAsCloudEvent(subscriptionId, dmiPluginName, eventType,
+ cmNotificationSubscriptionDmiInEvent));
+
+ }
+
+ private CloudEvent buildAndGetCmNotificationDmiInEventAsCloudEvent(final String subscriptionId,
+ final String dmiPluginName, final String eventType,
+ final CmNotificationSubscriptionDmiInEvent cmNotificationSubscriptionDmiInEvent) {
+ return CloudEventBuilder.v1().withId(UUID.randomUUID().toString()).withType(eventType)
+ .withSource(URI.create("NCMP")).withDataSchema(URI.create("org.onap.ncmp.dmi.cm.subscription:1.0.0"))
+ .withExtension("correlationid", subscriptionId.concat("#").concat(dmiPluginName))
+ .withData(jsonObjectMapper.asJsonBytes(cmNotificationSubscriptionDmiInEvent)).build();
+ }
+
+
+}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiOutEventConsumer.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiOutEventConsumer.java
new file mode 100644
index 0000000000..ea72fd217b
--- /dev/null
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionDmiOutEventConsumer.java
@@ -0,0 +1,62 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Nordix Foundation
+ * ================================================================================
+ * 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.impl.events.cmsubscription;
+
+import static org.onap.cps.ncmp.api.impl.events.mapper.CloudEventMapper.toTargetEvent;
+
+import io.cloudevents.CloudEvent;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.dmi_to_ncmp.CmNotificationSubscriptionDmiOutEvent;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class CmNotificationSubscriptionDmiOutEventConsumer {
+
+ /**
+ * Consume the Cm Notification Subscription event from the dmi-plugin.
+ *
+ * @param cmNotificationSubscriptionDmiOutEventConsumerRecord the event to be consumed
+ */
+ @KafkaListener(topics = "${app.ncmp.avc.subscription-response-topic}",
+ containerFactory = "cloudEventConcurrentKafkaListenerContainerFactory")
+ public void consumeCmNotificationSubscriptionDmiOutEvent(
+ final ConsumerRecord<String, CloudEvent> cmNotificationSubscriptionDmiOutEventConsumerRecord) {
+ final CloudEvent cloudEvent = cmNotificationSubscriptionDmiOutEventConsumerRecord.value();
+ final CmNotificationSubscriptionDmiOutEvent cmNotificationSubscriptionDmiOutEvent =
+ toTargetEvent(cloudEvent, CmNotificationSubscriptionDmiOutEvent.class);
+ final String correlationId = String.valueOf(cloudEvent.getExtension("correlationid"));
+ if ("subscriptionCreateResponse".equals(cloudEvent.getType()) && cmNotificationSubscriptionDmiOutEvent != null
+ && correlationId != null) {
+ handleCmSubscriptionCreate(correlationId, cmNotificationSubscriptionDmiOutEvent);
+ }
+ }
+
+ private void handleCmSubscriptionCreate(final String correlationId,
+ final CmNotificationSubscriptionDmiOutEvent cmNotificationSubscriptionDmiOutEvent) {
+ final String subscriptionId = correlationId.split("#")[0];
+ final String dmiPluginName = correlationId.split("#")[1];
+ log.info("Cm Subscription with id : {} handled by the dmi-plugin : {} has the status : {}", subscriptionId,
+ dmiPluginName, cmNotificationSubscriptionDmiOutEvent.getData().getStatusMessage());
+ }
+}
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java
index 1be1a90853..4ac6537494 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java
@@ -103,10 +103,10 @@ public class AlternateIdChecker {
* @param newNcmpServiceCmHandles the proposed new cm handles
* @return collection of cm handles ids which are acceptable
*/
- public Collection<String> getIdsOfCmHandlesWithAcceptableAlternateId(
+ public Collection<String> getIdsOfCmHandlesWithRejectedAlternateId(
final Collection<NcmpServiceCmHandle> newNcmpServiceCmHandles) {
final Set<String> acceptedAlternateIds = new HashSet<>(newNcmpServiceCmHandles.size());
- final Collection<String> acceptedCmHandleIds = new ArrayList<>(newNcmpServiceCmHandles.size());
+ final Collection<String> rejectedCmHandleIds = new ArrayList<>();
for (final NcmpServiceCmHandle ncmpServiceCmHandle : newNcmpServiceCmHandles) {
final String cmHandleId = ncmpServiceCmHandle.getCmHandleId();
final String proposedAlternateId = ncmpServiceCmHandle.getAlternateId();
@@ -124,10 +124,11 @@ public class AlternateIdChecker {
}
if (isAcceptable) {
acceptedAlternateIds.add(proposedAlternateId);
- acceptedCmHandleIds.add(cmHandleId);
+ } else {
+ rejectedCmHandleIds.add(cmHandleId);
}
}
- return acceptedCmHandleIds;
+ return rejectedCmHandleIds;
}
private boolean alternateIdAlreadyInDb(final String alternateId) {
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandleRegistrationResponse.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandleRegistrationResponse.java
index 82283228a1..52b8d6926a 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandleRegistrationResponse.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmHandleRegistrationResponse.java
@@ -1,7 +1,7 @@
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2022 Bell Canada
- * Modifications Copyright (C) 2022-2023 Nordix Foundation
+ * Modifications Copyright (C) 2022-2024 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -76,20 +76,22 @@ public class CmHandleRegistrationResponse {
}
/**
- * Creates a failure response based on registration error.
+ * Create a failure response of cm handle registration based on xpath and registration error.
+ * Conditions:
+ * - the xpath should be valid according to the cps path, otherwise xpath is not included in the response.
*
- * @param failedXpaths list of failed Xpaths
- * @param ncmpResponseStatus enum describing the type of registration error
- * @return CmHandleRegistrationResponse
+ * @param failedXpaths the failed xpaths
+ * @param ncmpResponseStatus type of the registration error
+ * @return collection of cm handle registration response
*/
- public static List<CmHandleRegistrationResponse> createFailureResponses(final Collection<String> failedXpaths,
- final NcmpResponseStatus ncmpResponseStatus) {
+ public static List<CmHandleRegistrationResponse> createFailureResponsesFromXpaths(
+ final Collection<String> failedXpaths, final NcmpResponseStatus ncmpResponseStatus) {
final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses = new ArrayList<>(failedXpaths.size());
for (final String xpath : failedXpaths) {
try {
final String cmHandleId = YangDataConverter.extractCmHandleIdFromXpath(xpath);
- cmHandleRegistrationResponses.add(
- CmHandleRegistrationResponse.createFailureResponse(cmHandleId, ncmpResponseStatus));
+ cmHandleRegistrationResponses
+ .add(CmHandleRegistrationResponse.createFailureResponse(cmHandleId, ncmpResponseStatus));
} catch (IllegalArgumentException | IllegalStateException e) {
log.warn("Unexpected xpath {}", xpath);
}
@@ -98,6 +100,24 @@ public class CmHandleRegistrationResponse {
}
/**
+ * Create a failure response of cm handle registration based on cm handle id and registration error.
+ *
+ * @param failedCmHandleIds the failed cm handle ids
+ * @param ncmpResponseStatus type of the registration error
+ * @return collection of cm handle registration response
+ */
+ public static List<CmHandleRegistrationResponse> createFailureResponses(
+ final Collection<String> failedCmHandleIds, final NcmpResponseStatus ncmpResponseStatus) {
+ final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses =
+ new ArrayList<>(failedCmHandleIds.size());
+ for (final String failedCmHandleId : failedCmHandleIds) {
+ cmHandleRegistrationResponses.add(
+ CmHandleRegistrationResponse.createFailureResponse(failedCmHandleId, ncmpResponseStatus));
+ }
+ return cmHandleRegistrationResponses;
+ }
+
+ /**
* Creates a failure response based on other exception.
*
* @param cmHandleIds list of failed cmHandleIds
diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
index 4615af61c1..7d6a8e1407 100644
--- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
+++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DmiPluginRegistration.java
@@ -1,6 +1,6 @@
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2021-2023 Nordix Foundation
+ * Copyright (C) 2021-2024 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -50,7 +50,7 @@ public class DmiPluginRegistration {
private List<String> removedCmHandles = Collections.emptyList();
- private UpgradedCmHandles upgradedCmHandles;
+ private UpgradedCmHandles upgradedCmHandles = new UpgradedCmHandles();
/**
* Validates plugin service names.