Add methods that allows registering any serializer
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / DeserializerExtensionProvider.java
index 516113b8e7989dc81ef7f96ed71dea08350b351b..6de50c310c431f680570958f80d0cfe0bb7141cd 100644 (file)
@@ -8,14 +8,14 @@
 
 package org.opendaylight.openflowjava.protocol.api.extensibility;
 
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
+import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
+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.experimenter.ExperimenterActionDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;
-import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;
+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;
 
@@ -24,7 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * In case of handling multiple multiple structures of same type (actions,
  * instructions, match entries, ... ) which are differentiated by
  * vendor / experimenter subtype, vendor has to switch / choose between
- * these subtypes. <br />
+ * these subtypes.<br>
  *
  * This has to be done in this way because of experimenter headers, which
  * provide only vendor / experimenter ID. Subtype position may be different
@@ -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
@@ -113,4 +127,4 @@ public interface DeserializerExtensionProvider {
      */
     void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
             OFDeserializer<QueueProperty> deserializer);
-}
\ No newline at end of file
+}