2 * Copyright (c) 2016 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.genius.datastoreutils.testutils;
10 import com.google.inject.AbstractModule;
11 import com.google.inject.Injector;
12 import com.google.inject.Key;
13 import com.google.inject.Provides;
14 import com.google.inject.Singleton;
15 import org.opendaylight.genius.datastoreutils.testutils.infra.AutoCloseableModule;
16 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
17 import org.opendaylight.serviceutils.tools.listener.ChainableDataTreeChangeListener;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
22 * Guice wiring module which binds a {@link TestableDataTreeChangeListener} as
23 * an {@link AsyncEventsWaiter}, and automatically registers all bound
24 * {@link ChainableDataTreeChangeListener} to it.
26 * @author Michael Vorburger.ch
28 public class TestableDataTreeChangeListenerModule extends AbstractModule {
30 private static final Logger LOG = LoggerFactory.getLogger(TestableDataTreeChangeListenerModule.class);
33 protected void configure() {
34 install(new AutoCloseableModule());
39 protected final AsyncEventsWaiter getAsyncEventsWaiter(Injector injector) {
40 return getRealAsyncEventsWaiter(injector);
43 protected AsyncEventsWaiter getRealAsyncEventsWaiter(Injector injector) {
44 return getTestableDataTreeChangeListener(injector);
47 @SuppressWarnings({ "unchecked", "rawtypes" })
48 protected TestableDataTreeChangeListener getTestableDataTreeChangeListener(Injector injector) {
49 TestableDataTreeChangeListener beforeTestableDataTreeChangeListener = new TestableDataTreeChangeListener();
50 DataTreeChangeListener afterTestableDataTreeChangeListener =
51 new DecrementingTestableDataTreeChangeDecoratorListener(beforeTestableDataTreeChangeListener);
52 for (Key<?> key : injector.getAllBindings().keySet()) {
53 if (ChainableDataTreeChangeListener.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {
54 ChainableDataTreeChangeListener chainableListener
55 = (ChainableDataTreeChangeListener) injector.getInstance(key);
56 chainableListener.addBeforeListener(beforeTestableDataTreeChangeListener);
57 chainableListener.addAfterListener(afterTestableDataTreeChangeListener);
58 LOG.info("AsyncEventsWaiter: {}", chainableListener);
61 return beforeTestableDataTreeChangeListener;