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;
/**
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,
@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) {