X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fapi%2Fextensibility%2FDeserializerExtensionProvider.java;h=5a0658eb1b122c9b244c0e5de1c34a97c6463632;hb=27286e9d023c4ac7692fb30a8e8cbdf2cd92f9f7;hp=b821b168dd4f3f5e7948b1adeeab289cfbf6e56c;hpb=cd45764e40ef43a4a43979b3e8f04e8b0865739f;p=openflowjava.git
diff --git a/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/extensibility/DeserializerExtensionProvider.java b/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/extensibility/DeserializerExtensionProvider.java
index b821b168..5a0658eb 100644
--- a/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/extensibility/DeserializerExtensionProvider.java
+++ b/openflow-protocol-api/src/main/java/org/opendaylight/openflowjava/protocol/api/extensibility/DeserializerExtensionProvider.java
@@ -1,53 +1,145 @@
-/*
- * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.openflowjava.protocol.api.extensibility;
-
-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.ExperimenterInstructionDeserializerKey;
-
-/**
- * Provides methods for deserialization part of extensibility
- * @author michal.polkorab
- */
-public interface DeserializerExtensionProvider {
-
- /**
- * Unregisters custom deserializer
- * @param key used for deserializer lookup
- * @return true if deserializer was removed,
- * false if no deserializer was found under specified key
- */
- public boolean unregisterDeserializer(ExperimenterDeserializerKey key);
-
- /**
- * Registers action deserializer
- * @param key used for deserializer lookup
- * @param deserializer deserializer instance
- */
- public void registerActionDeserializer(ExperimenterActionDeserializerKey key,
- OFGeneralDeserializer deserializer);
-
- /**
- * Registers instruction deserializer
- * @param key used for deserializer lookup
- * @param deserializer deserializer instance
- */
- public void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
- OFGeneralDeserializer deserializer);
-
- /**
- * Registers match entry deserializer
- * @param key used for deserializer lookup
- * @param deserializer deserializer instance
- */
- public void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
- OFGeneralDeserializer deserializer);
-}
+/*
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+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.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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
+
+/**
+ * Provides methods for deserialization part of extensibility.
+ * 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.
+ *
+ * This has to be done in this way because of experimenter headers, which
+ * provide only vendor / experimenter ID. Subtype position may be different
+ * for different vendors (or not present at all) - that's why vendor has to
+ * handle it in his own implementations.
+ * @author michal.polkorab
+ */
+public interface DeserializerExtensionProvider {
+
+ /**
+ * Registers deserializer.
+ * Throws IllegalStateException when there is
+ * a deserializer already registered under given key.
+ *
+ * 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
+ * @return true if deserializer was removed,
+ * false if no deserializer was found under specified key
+ */
+ boolean unregisterDeserializer(ExperimenterDeserializerKey key);
+
+ /**
+ * Registers action deserializer
+ * @param key used for deserializer lookup
+ * @param deserializer deserializer instance
+ */
+ void registerActionDeserializer(ExperimenterActionDeserializerKey key,
+ OFGeneralDeserializer deserializer);
+
+ /**
+ * Registers instruction deserializer
+ * @param key used for deserializer lookup
+ * @param deserializer deserializer instance
+ */
+ void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
+ OFGeneralDeserializer deserializer);
+
+ /**
+ * Registers match entry deserializer
+ * @param key used for deserializer lookup
+ * @param deserializer deserializer instance
+ */
+ void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
+ OFGeneralDeserializer deserializer);
+
+ /**
+ * Registers error message deserializer
+ * @param key used for deserializer lookup
+ * @param deserializer deserializer instance
+ */
+ void registerErrorDeserializer(ExperimenterIdDeserializerKey key,
+ OFDeserializer