Bug 2245 Fixed Avoid cycle between java packages
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / DeserializerRegistryImpl.java
index a1efd1dc37a763154886e56b05dd4c96d1c3abbe..0cd70fd8f18ea382c9ee8411e83bbd59ba1073e9 100644 (file)
@@ -13,13 +13,15 @@ import java.util.Map;
 
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
-import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer;
 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchDeserializer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Stores and registers deserializers
@@ -27,6 +29,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.matc
  */
 public class DeserializerRegistryImpl implements DeserializerRegistry {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(DeserializerRegistryImpl.class);
     private Map<MessageCodeKey, OFGeneralDeserializer> registry;
 
     /**
@@ -36,7 +39,7 @@ public class DeserializerRegistryImpl implements DeserializerRegistry {
     public void init() {
         registry = new HashMap<>();
         // register message deserializers
-        MessageDerializerInitializer.registerMessageDeserializers(this);
+        MessageDeserializerInitializer.registerMessageDeserializers(this);
 
         // register common structure deserializers
         registerDeserializer(new MessageCodeKey(EncodeConstants.OF10_VERSION_ID,
@@ -54,14 +57,14 @@ public class DeserializerRegistryImpl implements DeserializerRegistry {
 
     @Override
     @SuppressWarnings("unchecked")
-    public <DESERIALIZER_TYPE extends OFGeneralDeserializer> DESERIALIZER_TYPE getDeserializer(
+    public <T extends OFGeneralDeserializer> T getDeserializer(
             MessageCodeKey key) {
         OFGeneralDeserializer deserializer = registry.get(key);
         if (deserializer == null) {
-            throw new NullPointerException("Deserializer for key: " + key.toString()
+            throw new IllegalStateException("Deserializer for key: " + key
                     + " was not found - please verify that all needed deserializers ale loaded correctly");
         }
-        return (DESERIALIZER_TYPE) deserializer;
+        return (T) deserializer;
     }
 
     @Override
@@ -70,10 +73,15 @@ public class DeserializerRegistryImpl implements DeserializerRegistry {
         if ((key == null) || (deserializer == null)) {
             throw new IllegalArgumentException("MessageCodeKey or Deserializer is null");
         }
+        OFGeneralDeserializer desInRegistry = registry.put(key, deserializer);
+        if (desInRegistry != null) {
+            LOGGER.debug("Deserializer for key " + key + " overwritten. Old deserializer: "
+                    + desInRegistry.getClass().getName() + ", new deserializer: "
+                    + deserializer.getClass().getName() );
+        }
         if (deserializer instanceof DeserializerRegistryInjector) {
             ((DeserializerRegistryInjector) deserializer).injectDeserializerRegistry(this);
         }
-        registry.put(key, deserializer);
     }
 
     @Override