Add methods for modifying deserializer mapping
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / DeserializerExtensionProvider.java
index b227453e627f982d188655cac2e66abee4b0b881..5a0658eb1b122c9b244c0e5de1c34a97c6463632 100644 (file)
@@ -13,6 +13,8 @@ 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.openflowjava.protocol.api.keys.TypeToClassKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
 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;
@@ -33,6 +35,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
@@ -112,4 +128,18 @@ public interface DeserializerExtensionProvider {
      */
     void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
             OFDeserializer<QueueProperty> deserializer);
+
+    /**
+     * Registers type to class mapping used to assign return type when deserializing message
+     * @param key type to class key
+     * @param clazz return class
+     */
+    void registerDeserializerMapping(TypeToClassKey key, Class<?> clazz);
+
+    /**
+     * Unregisters type to class mapping used to assign return type when deserializing message
+     * @param key type to class key
+     * @return true if mapping was successfully removed
+     */
+    boolean unregisterDeserializerMapping(TypeToClassKey key);
 }