Changed multimaps to synchronized multimaps
[controller.git] / opendaylight / md-sal / sal-common-impl / src / main / java / org / opendaylight / controller / md / sal / common / impl / routing / AbstractDataReadRouter.java
index d6b3c5334aa1c4d02563d51cef0a0d27d8939c61..4ddceb3b5f015a709e508f73cbb91e4cc46e66e0 100644 (file)
@@ -12,6 +12,7 @@ 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
@@ -20,10 +21,10 @@ import com.google.common.collect.Multimap;
  * @param <P>
  * @param <D>
  */
-public abstract class AbstractDataReadRouter<P extends Path<?>, D> implements DataReader<P, 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) {
@@ -139,14 +140,15 @@ public abstract class AbstractDataReadRouter<P extends Path<?>, D> implements Da
             
             @Override
             public boolean apply(Entry<P, DataReaderRegistration<P, D>> input) {
-                final Path key = input.getKey();
-                return key.contains(path) || ((Path) path).contains(key);
+                final P key = input.getKey();
+                return key.contains(path) || ((P) path).contains(key);
             }
             
         };
     }
 
-    private class ConfigurationDataReaderRegistration<P extends Path<?>, D> extends DataReaderRegistration<P, D> {
+    @SuppressWarnings("hiding")
+    private class ConfigurationDataReaderRegistration<P extends Path<P>, D> extends DataReaderRegistration<P, D> {
 
         public ConfigurationDataReaderRegistration(P key, DataReader<P, D> instance) {
             super(key, instance);
@@ -158,7 +160,8 @@ public abstract class AbstractDataReadRouter<P extends Path<?>, D> implements Da
         }
     }
 
-    private class OperationalDataReaderRegistration<P extends Path<?>, D> extends DataReaderRegistration<P, D> {
+    @SuppressWarnings("hiding")
+    private class OperationalDataReaderRegistration<P extends Path<P>, D> extends DataReaderRegistration<P, D> {
 
         public OperationalDataReaderRegistration(P key, DataReader<P, D> instance) {
             super(key, instance);
@@ -170,7 +173,7 @@ public abstract class AbstractDataReadRouter<P extends Path<?>, D> implements Da
         }
     }
 
-    private abstract static class DataReaderRegistration<P extends Path<?>, D> extends
+    private abstract static class DataReaderRegistration<P extends Path<P>, D> extends
             AbstractObjectRegistration<DataReader<P, D>> {
 
         private final P key;