From 2a1e5aac09411523e38fc7126b523ea4f6ac5f78 Mon Sep 17 00:00:00 2001 From: emaclee Date: Tue, 16 Apr 2024 09:56:59 +0100 Subject: Reject create request with duplicated subscriptionId Issue-ID: CPS-2184 Change-Id: I1bddb02239e6a2d3f47aa731eb24a9f1f64e63b5 Signed-off-by: emaclee Signed-off-by: seanbeirne --- ...otificationSubscriptionNcmpInEventConsumer.java | 15 +++-- ...NotificationSubscriptionNcmpOutEventMapper.java | 18 ++++++ .../CmNotificationSubscriptionHandlerService.java | 35 +++++++++++ ...NotificationSubscriptionHandlerServiceImpl.java | 70 ++++++++++++++++++++++ 4 files changed, 130 insertions(+), 8 deletions(-) create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerService.java create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerServiceImpl.java (limited to 'cps-ncmp-service/src/main') diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumer.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumer.java index 362fbeb9e2..377e155311 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumer.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumer.java @@ -23,12 +23,11 @@ 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 java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.onap.cps.ncmp.api.impl.events.cmsubscription.service.CmNotificationSubscriptionHandlerService; import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.CmNotificationSubscriptionNcmpInEvent; -import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.Predicate; import org.springframework.beans.factory.annotation.Value; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @@ -38,7 +37,7 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class CmNotificationSubscriptionNcmpInEventConsumer { - private final DmiCmNotificationSubscriptionCacheHandler dmiCmNotificationSubscriptionCacheHandler; + private final CmNotificationSubscriptionHandlerService cmNotificationSubscriptionHandlerService; @Value("${notification.enabled:true}") private boolean notificationFeatureEnabled; @@ -56,12 +55,12 @@ public class CmNotificationSubscriptionNcmpInEventConsumer { toTargetEvent(cloudEvent, CmNotificationSubscriptionNcmpInEvent.class); log.info("Subscription with name {} to be mapped to hazelcast object...", cmNotificationSubscriptionNcmpInEvent.getData().getSubscriptionId()); + final String subscriptionId = cmNotificationSubscriptionNcmpInEvent.getData().getSubscriptionId(); - final List predicates = cmNotificationSubscriptionNcmpInEvent.getData().getPredicates(); - dmiCmNotificationSubscriptionCacheHandler.add(subscriptionId, predicates); - if ("subscriptionCreated".equals(cloudEvent.getType()) && cmNotificationSubscriptionNcmpInEvent != null) { - log.info("Subscription for ClientID {} with name {} ...", cloudEvent.getSource(), - cmNotificationSubscriptionNcmpInEvent.getData().getSubscriptionId()); + if ("subscriptionCreateRequest".equals(cloudEvent.getType())) { + log.info("Subscription for source {} with subscription id {} ...", cloudEvent.getSource(), subscriptionId); + cmNotificationSubscriptionHandlerService.processSubscriptionCreateRequest( + cmNotificationSubscriptionNcmpInEvent); } } } \ No newline at end of file diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/mapper/CmNotificationSubscriptionNcmpOutEventMapper.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/mapper/CmNotificationSubscriptionNcmpOutEventMapper.java index 668f4517e8..ea21751691 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/mapper/CmNotificationSubscriptionNcmpOutEventMapper.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/mapper/CmNotificationSubscriptionNcmpOutEventMapper.java @@ -56,6 +56,24 @@ public class CmNotificationSubscriptionNcmpOutEventMapper { return cmNotificationSubscriptionNcmpOutEvent; } + /** + * Mapper to form a rejected response for the client for the Cm Notification Subscription Request. + * + * @param subscriptionId subscription id + * @param rejectedTargetFilters list of rejected target filters for the subscription request + * @return to sent back to the client + */ + public CmNotificationSubscriptionNcmpOutEvent toCmNotificationSubscriptionNcmpOutEventForRejectedRequest( + final String subscriptionId, final List rejectedTargetFilters) { + final CmNotificationSubscriptionNcmpOutEvent cmNotificationSubscriptionNcmpOutEvent = + new CmNotificationSubscriptionNcmpOutEvent(); + final Data cmSubscriptionData = new Data(); + cmSubscriptionData.setSubscriptionId(subscriptionId); + cmSubscriptionData.setRejectedTargets(rejectedTargetFilters); + cmNotificationSubscriptionNcmpOutEvent.setData(cmSubscriptionData); + return cmNotificationSubscriptionNcmpOutEvent; + } + private void populateCmNotificationSubscriptionNcmpOutEventWithCmHandleIds( final Map dmiCmNotificationSubscriptionDetailsMap, final Data cmSubscriptionData) { diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerService.java new file mode 100644 index 0000000000..536693ee4e --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerService.java @@ -0,0 +1,35 @@ +/* + * ============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.service; + +import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.CmNotificationSubscriptionNcmpInEvent; + +public interface CmNotificationSubscriptionHandlerService { + + /** + * Process cm notification subscription request. + * + * @param cmNotificationSubscriptionNcmpInEvent CM Notification Subscription event + */ + void processSubscriptionCreateRequest( + final CmNotificationSubscriptionNcmpInEvent cmNotificationSubscriptionNcmpInEvent); + +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerServiceImpl.java new file mode 100644 index 0000000000..8204f05c9f --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionHandlerServiceImpl.java @@ -0,0 +1,70 @@ +/* + * ============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.service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; +import org.onap.cps.ncmp.api.impl.events.cmsubscription.CmNotificationSubscriptionNcmpOutEventProducer; +import org.onap.cps.ncmp.api.impl.events.cmsubscription.DmiCmNotificationSubscriptionCacheHandler; +import org.onap.cps.ncmp.api.impl.events.cmsubscription.mapper.CmNotificationSubscriptionNcmpOutEventMapper; +import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.CmNotificationSubscriptionNcmpInEvent; +import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.Predicate; +import org.onap.cps.ncmp.events.cmsubscription_merge1_0_0.ncmp_to_client.CmNotificationSubscriptionNcmpOutEvent; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CmNotificationSubscriptionHandlerServiceImpl implements CmNotificationSubscriptionHandlerService { + + private final CmNotificationSubscriptionPersistenceService cmNotificationSubscriptionPersistenceService; + private final CmNotificationSubscriptionNcmpOutEventMapper cmNotificationSubscriptionNcmpOutEventMapper; + private final CmNotificationSubscriptionNcmpOutEventProducer cmNotificationSubscriptionNcmpOutEventProducer; + private final DmiCmNotificationSubscriptionCacheHandler dmiCmNotificationSubscriptionCacheHandler; + + @Override + public void processSubscriptionCreateRequest( + final CmNotificationSubscriptionNcmpInEvent cmNotificationSubscriptionNcmpInEvent) { + final String subscriptionId = cmNotificationSubscriptionNcmpInEvent.getData().getSubscriptionId(); + final List predicates = cmNotificationSubscriptionNcmpInEvent.getData().getPredicates(); + + if (cmNotificationSubscriptionPersistenceService.isUniqueSubscriptionId(subscriptionId)) { + dmiCmNotificationSubscriptionCacheHandler.add(subscriptionId, predicates); + } else { + final Set subscriptionTargetFilters = predicates.stream().flatMap( + predicate -> predicate.getTargetFilter().stream()).collect(Collectors.toSet()); + rejectAndPublishCmNotificationSubscriptionCreateRequest(subscriptionId, + new ArrayList<>(subscriptionTargetFilters)); + } + } + + private void rejectAndPublishCmNotificationSubscriptionCreateRequest(final String subscriptionId, + final List subscriptionTargetFilters) { + final CmNotificationSubscriptionNcmpOutEvent cmNotificationSubscriptionNcmpOutEvent = + cmNotificationSubscriptionNcmpOutEventMapper + .toCmNotificationSubscriptionNcmpOutEventForRejectedRequest(subscriptionId, + subscriptionTargetFilters); + cmNotificationSubscriptionNcmpOutEventProducer.publishCmNotificationSubscriptionNcmpOutEvent(subscriptionId, + "subscriptionCreateResponse", cmNotificationSubscriptionNcmpOutEvent, false); + } +} -- cgit 1.2.3-korg