/**
* Copyright (c) 2014 Cisco Systems, Inc. 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.openflowplugin.openflow.md.core.extension;
import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
import org.opendaylight.openflowplugin.extension.api.ConverterExtensionKey;
import org.opendaylight.openflowplugin.extension.api.ConvertorActionFromOFJava;
import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava;
import org.opendaylight.openflowplugin.extension.api.ConvertorMessageFromOFJava;
import org.opendaylight.openflowplugin.extension.api.ConverterMessageToOFJava;
import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava;
import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
import org.opendaylight.openflowplugin.extension.api.path.AugmentationPath;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.experimenter.core.message.ExperimenterMessageOfChoice;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey;
import org.opendaylight.yangtools.concepts.ObjectRegistration;
import org.opendaylight.yangtools.yang.binding.DataContainer;
/**
* @param <KEY> converter key
* @param <CONVERTER> converter instance
*/
public abstract class RegistrationCloser<KEY, CONVERTER> implements ObjectRegistration<CONVERTER> {
private ExtensionConverterManagerImpl registrator;
private KEY key;
private CONVERTER converter;
/**
* @param registrator the registrator to set
*/
public void setRegistrator(ExtensionConverterManagerImpl registrator) {
this.registrator = registrator;
}
/**
* @param key the key to set
*/
public void setKey(KEY key) {
this.key = key;
}
/**
* @param converter the converter to set
*/
public void setConverter(CONVERTER converter) {
this.converter = converter;
}
/**
* @return the registrator
*/
public ExtensionConverterManagerImpl getRegistrator() {
return registrator;
}
/**
* @return the key
*/
public KEY getKey() {
return key;
}
/**
* @return the converter
*/
public CONVERTER getConverter() {
return converter;
}
@Override
public CONVERTER getInstance() {
return getConverter();
}
/**
* standalone deregistrator
* @param <TO> target type of wrapped convertor
*/
public static class RegistrationCloserToOFJava<TO extends DataContainer> extends
RegistrationCloser<ConverterExtensionKey<? extends ExtensionKey>, ConvertorToOFJava<TO>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
/**
* standalone deregistrator
* @param <FROM> source type of wrapped convertor
* @param <PATH> associated augmentation path
*/
public static class RegistrationCloserFromOFJava<FROM extends DataContainer, PATH extends AugmentationPath> extends RegistrationCloser<MessageTypeKey<?>, ConvertorFromOFJava<FROM, PATH>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
/**
* standalone deregistrator
* @param <TO> target type of wrapped convertor
*/
public static class RegistrationCloserActionToOFJava<TO extends DataContainer> extends
RegistrationCloser<TypeVersionKey<? extends Action>, ConvertorActionToOFJava<Action, TO>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
/**
* standalone deregistrator
* @param <FROM> source type of wrapped convertor
* @param <PATH> associated augmentation path
*/
public static class RegistrationCloserActionFromOFJava<FROM extends DataContainer, PATH extends AugmentationPath> extends
RegistrationCloser<MessageTypeKey<?>, ConvertorActionFromOFJava<FROM, PATH>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
/**
* standalone deregistrator
*
* @param <TO> target type of wrapped convertor
*/
public static class RegistrationCloserMessageToOFJava<TO extends DataContainer, K extends ExperimenterMessageOfChoice> extends
RegistrationCloser<TypeVersionKey<K>, ConverterMessageToOFJava<K, TO>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
/**
* standalone deregistrator
*
* @param <FROM> source type of wrapped convertor
* @param <PATH> associated augmentation path
*/
public static class RegistrationCloserMessageFromOFJava<FROM extends DataContainer, PATH extends AugmentationPath> extends
RegistrationCloser<MessageTypeKey<?>, ConvertorMessageFromOFJava<FROM, PATH>> {
@Override
public void close() throws Exception {
getRegistrator().unregister(getKey(), getConverter());
}
}
}