Bug 2756 - Match model update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / DeserializerRegistryImpl.java
index f7f8b6fba9682cefdfbfeb61aa712ce3947d8888..0ee3fb281ea6dec2204b4c82d1bb8634cd2048a7 100644 (file)
@@ -13,20 +13,23 @@ 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.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Stores and registers deserializers
  * @author michal.polkorab
  */
 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,32 +57,37 @@ 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()
-                    + " was not found");
+            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
     public void registerDeserializer(MessageCodeKey key,
             OFGeneralDeserializer deserializer) {
         if ((key == null) || (deserializer == null)) {
-            throw new NullPointerException("MessageCodeKey or Deserializer is 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
     public boolean unregisterDeserializer(MessageCodeKey key) {
         if (key == null) {
-            throw new NullPointerException("MessageCodeKey is null");
+            throw new IllegalArgumentException("MessageCodeKey is null");
         }
         OFGeneralDeserializer deserializer = registry.remove(key);
         if (deserializer == null) {