140047cb608ef9d91b2beac0528e0ba5d1f49e11
[genius.git] / mdsalutil / mdsalutil-testutils / src / main / java / org / opendaylight / genius / datastoreutils / testutils / TestableDataTreeChangeListenerModule.java
1 /*
2  * Copyright (c) 2016 Red Hat, Inc. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.genius.datastoreutils.testutils;
9
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.ChainableDataTreeChangeListener;
16
17 /**
18  * Guice wiring module which binds a {@link TestableDataTreeChangeListener} as
19  * an {@link AsyncEventsWaiter}, and automatically registers all bound
20  * {@link ChainableDataTreeChangeListener} to it.
21  *
22  * @author Michael Vorburger
23  */
24 public class TestableDataTreeChangeListenerModule extends AbstractModule {
25
26     @Override
27     protected void configure() {
28     }
29
30     @Provides
31     @Singleton
32     @SuppressWarnings({ "unchecked", "rawtypes" })
33     AsyncEventsWaiter getTestableDataTreeChangeListener(Injector injector) {
34         TestableDataTreeChangeListener testableDataTreeChangeListener = new TestableDataTreeChangeListener();
35         for (Key<?> key : injector.getAllBindings().keySet()) {
36             if (ChainableDataTreeChangeListener.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {
37                 ChainableDataTreeChangeListener chainableListener
38                     = (ChainableDataTreeChangeListener) injector.getInstance(key);
39                 chainableListener.addAfterListener(testableDataTreeChangeListener);
40             }
41         }
42         return testableDataTreeChangeListener;
43     }
44
45 }