X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FBindingDOMNotificationListenerAdapter.java;h=dc19d2795f1951a415e479ae0d25e66fa507cf2b;hb=HEAD;hp=86822274efb2d6dfa9965e9e7b33863bec141164;hpb=b75e917304cda8d1a925b4622e98d0189cfb79eb;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationListenerAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationListenerAdapter.java deleted file mode 100644 index 86822274ef..0000000000 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMNotificationListenerAdapter.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.controller.md.sal.binding.impl; - -import com.google.common.collect.ImmutableMap; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener; -import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer; -import org.opendaylight.yangtools.yang.binding.Notification; -import org.opendaylight.yangtools.yang.binding.NotificationListener; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; -import org.opendaylight.yangtools.yang.binding.util.NotificationListenerInvoker; -import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; - -class BindingDOMNotificationListenerAdapter implements DOMNotificationListener { - - private final BindingNormalizedNodeSerializer codec; - private final NotificationListener delegate; - private final Map invokers; - - public BindingDOMNotificationListenerAdapter(final BindingNormalizedNodeSerializer codec, final NotificationListener delegate) { - this.codec = codec; - this.delegate = delegate; - this.invokers = createInvokerMapFor(delegate.getClass()); - } - - @Override - public void onNotification(@Nonnull final DOMNotification notification) { - final Notification baNotification = deserialize(notification); - final QName notificationQName = notification.getType().getLastComponent(); - getInvoker(notification.getType()).invokeNotification(delegate, notificationQName, baNotification); - } - - private Notification deserialize(final DOMNotification notification) { - if(notification instanceof LazySerializedDOMNotification) { - return ((LazySerializedDOMNotification) notification).getBindingData(); - } - return codec.fromNormalizedNodeNotification(notification.getType(), notification.getBody()); - } - - private NotificationListenerInvoker getInvoker(final SchemaPath type) { - return invokers.get(type); - } - - protected Set getSupportedNotifications() { - return invokers.keySet(); - } - - public static Map createInvokerMapFor(final Class implClz) { - final Map builder = new HashMap<>(); - for(final Class iface : implClz.getInterfaces()) { - if(NotificationListener.class.isAssignableFrom(iface) && BindingReflections.isBindingClass(iface)) { - @SuppressWarnings("unchecked") - final Class listenerType = (Class) iface; - final NotificationListenerInvoker invoker = NotificationListenerInvoker.from(listenerType); - for(final SchemaPath path : getNotificationTypes(listenerType)) { - builder.put(path, invoker); - } - } - } - return ImmutableMap.copyOf(builder); - } - - private static Set getNotificationTypes(final Class type) { - // TODO: Investigate possibility and performance impact if we cache this or expose - // it from NotificationListenerInvoker - final Set ret = new HashSet<>(); - for(final Method method : type.getMethods()) { - if(BindingReflections.isNotificationCallback(method)) { - final Class notification = method.getParameterTypes()[0]; - final QName name = BindingReflections.findQName(notification); - ret.add(SchemaPath.create(true, name)); - } - } - return ret; - } -} \ No newline at end of file