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.impl.util.ActionsDeserializer;
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+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.OF10ActionsDeserializer;
import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchDeserializer;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;
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
* @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,
EncodeConstants.EMPTY_VALUE, MatchV10.class), new OF10MatchDeserializer());
- registerDeserializer(new MessageCodeKey(EncodeConstants.OF10_VERSION_ID,
- EncodeConstants.EMPTY_VALUE, Action.class), new OF10ActionsDeserializer());
registerDeserializer(new MessageCodeKey(EncodeConstants.OF13_VERSION_ID,
EncodeConstants.EMPTY_VALUE, Match.class), new MatchDeserializer());
- registerDeserializer(new MessageCodeKey(EncodeConstants.OF13_VERSION_ID,
- EncodeConstants.EMPTY_VALUE, Action.class), new ActionsDeserializer());
// register match entry deserializers
MatchEntryDeserializerInitializer.registerMatchEntryDeserializers(this);
- //register instruction deserializers
+ // register action deserializers
+ ActionDeserializerInitializer.registerDeserializers(this);
+ // register instruction deserializers
InstructionDeserializerInitializer.registerDeserializers(this);
- // register default experimenter deserializers
- DefaultExperimenterDeserializerInitializer.registerDeserializers(this);
}
@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 IllegalArgumentException("MessageCodeKey is null");
+ }
+ OFGeneralDeserializer deserializer = registry.remove(key);
+ if (deserializer == null) {
+ return false;
+ }
+ return true;
}
}