Merge "Fix junit dependencies in poms. Reuse existing from parent, add missing ones."
[bgpcep.git] / concepts / src / main / java / org / opendaylight / protocol / concepts / HandlerRegistry.java
index 440dab4f57f928307836291496f9d80617c55b75..d0165c68f5e32f258987343fb9cbafd8553948f4 100644 (file)
@@ -7,63 +7,26 @@
  */
 package org.opendaylight.protocol.concepts;
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
 import javax.annotation.concurrent.ThreadSafe;
 
-import com.google.common.base.Preconditions;
-
 @ThreadSafe
 public class HandlerRegistry<CLASS, PARSER, SERIALIZER> {
-       private final Map<Class<? extends CLASS>, SERIALIZER> serializers = new ConcurrentHashMap<>();
-       private final Map<Integer, PARSER> parsers = new ConcurrentHashMap<>();
-
-       public AutoCloseable registerParser(final int type, final PARSER parser) {
-               synchronized (parsers) {
-                       Preconditions.checkArgument(!parsers.containsKey(type), "Type %s already registered", type);
-                       parsers.put(type, parser);
+       private final MultiRegistry<Class<? extends CLASS>, SERIALIZER> serializers = new MultiRegistry<>();
+       private final MultiRegistry<Integer, PARSER> parsers = new MultiRegistry<>();
 
-                       return new AbstractRegistration() {
-                               @Override
-                               protected void removeRegistration() {
-                                       synchronized (parsers) {
-                                               parsers.remove(type);
-                                       }
-                               }
-                       };
-               }
+       public AbstractRegistration registerParser(final int type, final PARSER parser) {
+               return parsers.register(type, parser);
        }
 
-       public PARSER getParser(final int messageType) {
-               return parsers.get(messageType);
+       public PARSER getParser(final int type) {
+               return parsers.get(type);
        }
 
-       public AutoCloseable registerSerializer(final Class<? extends CLASS> clazz, final SERIALIZER serializer) {
-               synchronized (serializers) {
-                       Preconditions.checkArgument(!serializers.containsKey(clazz), "Message class %s already registered", clazz);
-                       serializers.put(clazz, serializer);
-
-                       return new AbstractRegistration() {
-                               @Override
-                               protected void removeRegistration() {
-                                       synchronized (serializers) {
-                                               serializers.remove(clazz);
-                                       }
-                               }
-                       };
-               }
+       public AbstractRegistration registerSerializer(final Class<? extends CLASS> clazz, final SERIALIZER serializer) {
+               return serializers.register(clazz, serializer);
        }
 
-       public SERIALIZER getSerializer(final CLASS obj) {
-               final Class<?> c = obj.getClass();
-
-               for (Map.Entry<Class<? extends CLASS>, SERIALIZER> e : serializers.entrySet()) {
-                       if (e.getKey().isAssignableFrom(c)) {
-                               return e.getValue();
-                       }
-               }
-
-               return null;
+       public SERIALIZER getSerializer(final Class<? extends CLASS> clazz) {
+               return serializers.get(clazz);
        }
 }