Merge "Fixed for bug 1197"
[controller.git] / opendaylight / md-sal / sal-common-impl / src / main / java / org / opendaylight / controller / md / sal / common / impl / routing / AbstractDataReadRouter.java
index 200948cc0c78c2bff6959b7fbfb9d03a2aa1ea68..5dfb55ebd939615a10c6b0b0ceb4c4a6758c0940 100644 (file)
@@ -19,18 +19,19 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
 
 /**
  * Base abstract implementation of DataReadRouter, which performs
  * a read operation on multiple data readers and then merges result.
- * 
+ *
  * @param <P>
  * @param <D>
  */
 public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements DataReader<P, D> {
 
-    Multimap<P, DataReaderRegistration<P, D>> configReaders = HashMultimap.create();
-    Multimap<P, DataReaderRegistration<P, D>> operationalReaders = HashMultimap.create();
+    Multimap<P, DataReaderRegistration<P, D>> configReaders = Multimaps.synchronizedSetMultimap(HashMultimap.<P, DataReaderRegistration<P, D>>create());
+    Multimap<P, DataReaderRegistration<P, D>> operationalReaders = Multimaps.synchronizedSetMultimap(HashMultimap.<P, DataReaderRegistration<P, D>>create());
 
     @Override
     public D readConfigurationData(P path) {
@@ -49,7 +50,7 @@ public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements Da
 
     /**
      * Merges data readed by reader instances from specified path
-     * 
+     *
      * @param path Path on which read was performed
      * @param data Data which was returned by read operation.
      * @return Merged result.
@@ -58,11 +59,11 @@ public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements Da
 
     /**
      * Returns a function which performs configuration read for supplied path
-     * 
+     *
      * @param path
      * @return function which performs configuration read for supplied path
      */
-    
+
     private Function<DataReader<P, D>, D> configurationRead(final P path) {
         return new Function<DataReader<P, D>, D>() {
             @Override
@@ -74,7 +75,7 @@ public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements Da
 
     /**
      * Returns a function which performs operational read for supplied path
-     * 
+     *
      * @param path
      * @return function which performs operational read for supplied path
      */
@@ -91,18 +92,18 @@ public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements Da
 
     /**
      * Register's a reader for operational data.
-     * 
+     *
      * @param path Path which is served by this reader
      * @param reader Reader instance which is responsible for reading particular subpath.
-     * @return 
+     * @return
      */
-    public Registration<DataReader<P, D>> registerOperationalReader(P path, DataReader<P, D> reader) {
+    public Registration registerOperationalReader(P path, DataReader<P, D> reader) {
         OperationalDataReaderRegistration<P, D> ret = new OperationalDataReaderRegistration<>(path, reader);
         operationalReaders.put(path, ret);
         return ret;
     }
 
-    public Registration<DataReader<P, D>> registerConfigurationReader(P path, DataReader<P, D> reader) {
+    public Registration registerConfigurationReader(P path, DataReader<P, D> reader) {
         ConfigurationDataReaderRegistration<P, D> ret = new ConfigurationDataReaderRegistration<>(path, reader);
         configReaders.put(path, ret);
         return ret;
@@ -141,15 +142,15 @@ public abstract class AbstractDataReadRouter<P extends Path<P>, D> implements Da
     }
 
     private Predicate<? super Entry<P, DataReaderRegistration<P, D>>> affects(final P path) {
-        
+
         return new Predicate<Entry<P, DataReaderRegistration<P, D>>>() {
-            
+
             @Override
             public boolean apply(Entry<P, DataReaderRegistration<P, D>> input) {
                 final P key = input.getKey();
                 return key.contains(path) || ((P) path).contains(key);
             }
-            
+
         };
     }