/*
* 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