2 * ============LICENSE_START=======================================================
3 * Copyright (C) 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
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.impl.cmnotificationsubscription.dmi;
23 import static org.onap.cps.ncmp.api.data.models.DatastoreType.fromDatastoreName;
24 import static org.onap.cps.ncmp.impl.cmnotificationsubscription.models.CmSubscriptionStatus.PENDING;
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.HashSet;
31 import java.util.List;
34 import java.util.stream.Collectors;
35 import org.onap.cps.ncmp.api.data.models.DatastoreType;
36 import org.onap.cps.ncmp.impl.cmnotificationsubscription.models.DmiCmSubscriptionDetails;
37 import org.onap.cps.ncmp.impl.cmnotificationsubscription.models.DmiCmSubscriptionKey;
38 import org.onap.cps.ncmp.impl.cmnotificationsubscription.models.DmiCmSubscriptionPredicate;
39 import org.springframework.stereotype.Component;
42 public class DmiCmSubscriptionDetailsPerDmiMapper {
45 * Maps Dmi Subscription Keys grouped by Dmi Plugin to DmiCmSubscriptionDetails per Dmi plugin.
47 * @param subscribersPerDmi Details managed by each dmi plugin
48 * @return Grouped Dmi Subscription details per dmi plugin
50 public Map<String, DmiCmSubscriptionDetails> toDmiCmSubscriptionsPerDmi(
51 final Map<String, Collection<DmiCmSubscriptionKey>> subscribersPerDmi) {
53 final Map<String, DmiCmSubscriptionDetails> dmiSubscriptionsPerDmi = new HashMap<>();
55 subscribersPerDmi.forEach((dmiPluginName, dmiCmSubscriptionKeys) -> {
56 final Map<DatastoreTypeAndXpath, List<DmiCmSubscriptionKey>> groupedByDatastoreTypeAndXpath =
57 groupByDatastoreTypeAndXpath(dmiCmSubscriptionKeys);
59 final List<DmiCmSubscriptionPredicate> dmiSubscriptionPredicates =
60 createDmiCmSubscriptionPredicates(groupedByDatastoreTypeAndXpath);
62 final DmiCmSubscriptionDetails dmiCmSubscriptionDetails =
63 new DmiCmSubscriptionDetails(dmiSubscriptionPredicates, PENDING);
65 dmiSubscriptionsPerDmi.put(dmiPluginName, dmiCmSubscriptionDetails);
68 return dmiSubscriptionsPerDmi;
71 private static Map<DatastoreTypeAndXpath, List<DmiCmSubscriptionKey>> groupByDatastoreTypeAndXpath(
72 final Collection<DmiCmSubscriptionKey> dmiCmSubscriptionKeys) {
73 return dmiCmSubscriptionKeys.stream().collect(Collectors.groupingBy(
74 datastoreTypeAndXpath -> new DatastoreTypeAndXpath(
75 fromDatastoreName(datastoreTypeAndXpath.datastoreName()), datastoreTypeAndXpath.xpath())));
78 private static List<DmiCmSubscriptionPredicate> createDmiCmSubscriptionPredicates(
79 final Map<DatastoreTypeAndXpath, List<DmiCmSubscriptionKey>> groupedByDatastoreTypeAndXpath) {
80 final List<DmiCmSubscriptionPredicate> dmiCmSubscriptionPredicates = new ArrayList<>();
82 for (final Map.Entry<DatastoreTypeAndXpath, List<DmiCmSubscriptionKey>> datastoreTypeXpathGroupEntry :
83 groupedByDatastoreTypeAndXpath.entrySet()) {
84 final DatastoreTypeAndXpath datastoreTypeAndXpath = datastoreTypeXpathGroupEntry.getKey();
85 final Set<String> cmHandleIds = new HashSet<>();
87 for (final DmiCmSubscriptionKey dmiCmSubscriptionKey : datastoreTypeXpathGroupEntry.getValue()) {
88 cmHandleIds.add(dmiCmSubscriptionKey.cmHandleId());
91 final Set<String> xpaths = Collections.singleton(datastoreTypeAndXpath.xpath());
92 dmiCmSubscriptionPredicates.add(
93 new DmiCmSubscriptionPredicate(cmHandleIds, datastoreTypeAndXpath.datastoreType(), xpaths));
96 return dmiCmSubscriptionPredicates;
100 private record DatastoreTypeAndXpath(DatastoreType datastoreType, String xpath) { }