/*
* Copyright (c) 2013 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.MessageTypeKey;
/**
* Stores and handles serializers<br>
* K - {@link MessageTypeKey} parameter type,<br>
* S - returned serializer type
* @author michal.polkorab
*/
public interface SerializerRegistry {
/**
* Serializer registry provisioning
*/
void init();
/**
* @param <K> input key type
* @param <S> type of resulting serializer
* @param msgTypeKey lookup key
* @return serializer or NullPointerException if no serializer was found
*/
<K, S extends OFGeneralSerializer> S getSerializer(MessageTypeKey<K> msgTypeKey);
/**
* Registers serializer
* Throws IllegalStateException when there is
* a serializer already registered under given key.
*
* If the serializer implements {@link SerializerRegistryInjector} interface,
* the serializer is injected with SerializerRegistry instance.
*
* @param <K> serializer key type
* @param key used for serializer lookup
* @param serializer serializer implementation
*/
<K> void registerSerializer(MessageTypeKey<K> key,
OFGeneralSerializer serializer);
/**
* Unregisters serializer
* @param <K> serializer key type
* @param key used for serializer lookup
* @return true if serializer was removed,
* false if no serializer was found under specified key
*/
<K> boolean unregisterSerializer(MessageTypeKey<K> key);
}