summaryrefslogtreecommitdiffstats
path: root/v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-07-27 11:05:51 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-07-29 16:32:07 +0200
commit0578156b721fa01c8c645b8f9625ecebdb6449e4 (patch)
tree49d36f24e5d984a8c9f151b1440de88619f8b7de /v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java
parent007d4542388ca89be409ce1a4a4c7a36ddcb538f (diff)
HONEYCOMB-130: Separate v3po plugin from HC infra
Creating folders: - common/ - infra/ - v3po/ - vpp-common/ Change-Id: I2c39e1b17e39e7c0f0628f44aa5fe08563fa06e4 Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java')
-rw-r--r--v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java112
1 files changed, 0 insertions, 112 deletions
diff --git a/v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java b/v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java
deleted file mode 100644
index 8fba700bd..000000000
--- a/v3po/notification/impl/src/main/java/io/fd/honeycomb/v3po/notification/impl/NotificationProducerRegistry.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- *
- * 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.
- */
-package io.fd.honeycomb.v3po.notification.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Multimap;
-import io.fd.honeycomb.v3po.notification.ManagedNotificationProducer;
-import io.fd.honeycomb.v3po.notification.NotificationProducer;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.annotation.concurrent.ThreadSafe;
-import org.opendaylight.yangtools.yang.binding.Notification;
-import org.opendaylight.yangtools.yang.common.QName;
-
-/**
- * Holds the collection of registered notification producers.
- * Provides additional information about the types of notifications produced per producer and overall.
- */
-@ThreadSafe
-public final class NotificationProducerRegistry {
-
- private final Set<Class<? extends Notification>> notificationTypes;
- private final Map<QName, ManagedNotificationProducer> notificationQNameToProducer;
- private final Multimap<ManagedNotificationProducer, QName> notificationProducerQNames;
-
- public NotificationProducerRegistry(final List<ManagedNotificationProducer> notificationProducersDependency) {
- this.notificationTypes = toTypes(notificationProducersDependency);
- this.notificationQNameToProducer = toQNameMap(notificationProducersDependency);
- this.notificationProducerQNames = toQNameMapReversed(notificationProducersDependency);
- }
-
- private static Multimap<ManagedNotificationProducer, QName> toQNameMapReversed(final List<ManagedNotificationProducer> notificationProducers) {
- final Multimap<ManagedNotificationProducer, QName> multimap = HashMultimap.create();
-
- for (ManagedNotificationProducer producer : notificationProducers) {
- for (Class<? extends Notification> aClass : producer.getNotificationTypes()) {
- multimap.put(producer, getQName(aClass));
- }
- }
- return multimap;
- }
-
- private static Set<Class<? extends Notification>> toTypes(final List<ManagedNotificationProducer> notificationProducersDependency) {
- // Get all notification types registered from HC notification producers
- return notificationProducersDependency
- .stream()
- .flatMap(producer -> producer.getNotificationTypes().stream())
- .collect(Collectors.toSet());
- }
-
-
- private static Map<QName, ManagedNotificationProducer> toQNameMap(final List<ManagedNotificationProducer> producerDependencies) {
- // Only a single notification producer per notification type is allowed
- final Map<QName, ManagedNotificationProducer> qNamesToProducers = Maps.newHashMap();
- for (ManagedNotificationProducer notificationProducer : producerDependencies) {
- for (QName qName : typesToQNames(notificationProducer.getNotificationTypes())) {
- final NotificationProducer previousProducer = qNamesToProducers.put(qName, notificationProducer);
- checkArgument(previousProducer == null, "2 producers of the same notification type: %s. " +
- "Producer 1: {} Producer 2: {}" , qName, previousProducer, notificationProducer);
- }
- }
- return qNamesToProducers;
- }
-
-
- private static Set<QName> typesToQNames(final Collection<Class<? extends Notification>> notificationTypes) {
- return notificationTypes
- .stream()
- .map(NotificationProducerRegistry::getQName)
- .collect(Collectors.toSet());
- }
-
-
- public static QName getQName(final Class<? extends Notification> aClass) {
- try {
- return (QName) aClass.getField("QNAME").get(null);
- } catch (NoSuchFieldException | IllegalAccessException e) {
- throw new IllegalArgumentException("Unable to retrieve QName for notification of type: " + aClass, e);
- }
- }
-
- Set<Class<? extends Notification>> getNotificationTypes() {
- return notificationTypes;
- }
-
- Map<QName, ManagedNotificationProducer> getNotificationQNameToProducer() {
- return notificationQNameToProducer;
- }
-
- Multimap<ManagedNotificationProducer, QName> getNotificationProducerQNames() {
- return notificationProducerQNames;
- }
-}