Add methods that allows registering any serializer
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / DeserializerExtensionProvider.java
index b38b5cfacdbc46025cde504d678af2ce22b5ff41..6de50c310c431f680570958f80d0cfe0bb7141cd 100644 (file)
@@ -13,9 +13,9 @@ import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerK
 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdDeserializerKey;
 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterInstructionDeserializerKey;
 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
 
@@ -34,6 +34,20 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public interface DeserializerExtensionProvider {
 
+    /**
+     * Registers deserializer.
+     * Throws IllegalStateException when there is
+     * a deserializer already registered under given key.
+     * <p>
+     * If the deserializer implements {@link DeserializerRegistryInjector} interface,
+     * the deserializer is injected with DeserializerRegistry instance.
+     *
+     * @param key          used for deserializer lookup
+     * @param deserializer deserializer instance
+     */
+    void registerDeserializer(MessageCodeKey key,
+                              OFGeneralDeserializer deserializer);
+
     /**
      * Unregisters custom deserializer
      * @param key used for deserializer lookup
@@ -80,7 +94,7 @@ public interface DeserializerExtensionProvider {
      * @param deserializer deserializer instance
      */
     void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,
-            OFDeserializer<ExperimenterMessage> deserializer);
+                                                 OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
 
     /**
      * Registers multipart-reply (stats) message deserializer
@@ -88,7 +102,7 @@ public interface DeserializerExtensionProvider {
      * @param deserializer deserializer instance
      */
     void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,
-            OFDeserializer<MultipartReplyMessage> deserializer);
+                                                   OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
 
     /**
      * Registers multipart-reply table-features message deserializer