/** * 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 java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey; import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey; 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.ConvertorMessageToOFJava; import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava; import org.opendaylight.openflowplugin.extension.api.TypeVersionKey; import org.opendaylight.openflowplugin.extension.api.path.ActionPath; import org.opendaylight.openflowplugin.extension.api.path.AugmentationPath; import org.opendaylight.openflowplugin.extension.api.path.MatchPath; import org.opendaylight.openflowplugin.extension.api.path.MessagePath; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserActionFromOFJava; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserActionToOFJava; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserFromOFJava; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserMessageFromOFJava; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserMessageToOFJava; import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserToOFJava; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice; 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; /** * simple map-based registration engine implementation */ public class ExtensionConverterManagerImpl implements ExtensionConverterManager { private final Map, ConvertorFromOFJava> registryFromOFJAva; private final Map, ConvertorToOFJava> registryToOFJAva; private final Map, ConvertorActionToOFJava> registryActionToOFJAva; private final Map, ConvertorActionFromOFJava> registryActionFromOFJAva; private final Map, ConvertorMessageToOFJava> registryMessageToOFJAva; private final Map, ConvertorMessageFromOFJava> registryMessageFromOFJAva; /** * default ctor */ public ExtensionConverterManagerImpl() { registryFromOFJAva = new ConcurrentHashMap<>(); registryToOFJAva = new ConcurrentHashMap<>(); registryActionToOFJAva = new ConcurrentHashMap<>(); registryActionFromOFJAva = new ConcurrentHashMap<>(); registryMessageToOFJAva = new ConcurrentHashMap<>(); registryMessageFromOFJAva = new ConcurrentHashMap<>(); } /** * @param key * @param extConvertor * @return */ private > RegistrationCloserFromOFJava hireJanitor( final KEY key, final ConvertorFromOFJava extConvertor) { RegistrationCloserFromOFJava janitor = new RegistrationCloser.RegistrationCloserFromOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * @param key * @param extConvertor * @return */ private > RegistrationCloserActionFromOFJava hireJanitor( final KEY key, final ConvertorActionFromOFJava extConvertor) { RegistrationCloserActionFromOFJava janitor = new RegistrationCloser.RegistrationCloserActionFromOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * @param key * @param extConvertor * @return */ private RegistrationCloserToOFJava hireJanitor( final ConverterExtensionKey key, final ConvertorToOFJava extConvertor) { RegistrationCloserToOFJava janitor = new RegistrationCloser.RegistrationCloserToOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * @param key * @param extConvertor * @return */ private RegistrationCloserActionToOFJava hireJanitor( final TypeVersionKey key, final ConvertorActionToOFJava extConvertor) { RegistrationCloserActionToOFJava janitor = new RegistrationCloser.RegistrationCloserActionToOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * @param key * @param extConvertor * @return */ private RegistrationCloserMessageToOFJava hireMessageJanitor( final TypeVersionKey key, final ConvertorMessageToOFJava extConvertor) { RegistrationCloserMessageToOFJava janitor = new RegistrationCloserMessageToOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * @param key * @param extConvertor * @return */ private > RegistrationCloserMessageFromOFJava hireMessageJanitor( final KEY key, final ConvertorMessageFromOFJava extConvertor) { RegistrationCloserMessageFromOFJava janitor = new RegistrationCloserMessageFromOFJava<>(); janitor.setConverter(extConvertor); janitor.setKey(key); janitor.setRegistrator(this); return janitor; } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final ConverterExtensionKey key, final ConvertorToOFJava converter) { ConvertorToOFJava registeredConverter = registryToOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryToOFJAva.remove(key); } } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final TypeVersionKey key, final ConvertorActionToOFJava converter) { ConvertorActionToOFJava registeredConverter = registryActionToOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryActionToOFJAva.remove(key); } } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final MessageTypeKey key, final ConvertorFromOFJava converter) { ConvertorFromOFJava registeredConverter = registryFromOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryFromOFJAva.remove(key); } } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final MessageTypeKey key, final ConvertorActionFromOFJava converter) { ConvertorActionFromOFJava registeredConverter = registryActionFromOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryActionFromOFJAva.remove(key); } } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final MessageTypeKey key, final ConvertorMessageFromOFJava converter) { ConvertorMessageFromOFJava registeredConverter = registryMessageFromOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryMessageFromOFJAva.remove(key); } } /** * cancel registration of given converter * * @param key * @param converter */ public void unregister(final TypeVersionKey key, final ConvertorMessageToOFJava converter) { ConvertorMessageToOFJava registeredConverter = registryMessageToOFJAva.get(key); if (registeredConverter != null && registeredConverter == converter) { registryMessageToOFJAva.remove(key); } } @SuppressWarnings("unchecked") @Override public ConvertorToOFJava getConverter( final ConverterExtensionKey key) { return (ConvertorToOFJava) registryToOFJAva.get(key); } @SuppressWarnings("unchecked") @Override public ConvertorActionToOFJava getConverter( final TypeVersionKey key) { return (ConvertorActionToOFJava) registryActionToOFJAva.get(key); } @SuppressWarnings("unchecked") @Override public ConvertorFromOFJava getConverter( final MessageTypeKey key) { return (ConvertorFromOFJava) registryFromOFJAva.get(key); } @SuppressWarnings("unchecked") @Override public ConvertorActionFromOFJava getActionConverter( final MessageTypeKey key) { return (ConvertorActionFromOFJava) registryActionFromOFJAva.get(key); } @Override public ObjectRegistration> registerActionConvertor( final TypeVersionKey key, final ConvertorActionToOFJava convertor) { registryActionToOFJAva.put(key, convertor); return hireJanitor(key, convertor); } @Override public ObjectRegistration> registerActionConvertor( final ActionSerializerKey key, final ConvertorActionFromOFJava convertor) { registryActionFromOFJAva.put(key, convertor); return hireJanitor(key, convertor); } @Override public ObjectRegistration> registerMatchConvertor(final ConverterExtensionKey key, final ConvertorToOFJava convertor) { registryToOFJAva.put(key, convertor); return hireJanitor(key, convertor); } @Override public ObjectRegistration> registerMatchConvertor( final MatchEntrySerializerKey key, final ConvertorFromOFJava convertor) { registryFromOFJAva.put(key, convertor); return hireJanitor(key, convertor); } @Override public ObjectRegistration> registerMessageConvertor( TypeVersionKey key, ConvertorMessageToOFJava convertor) { registryMessageToOFJAva.put(key, convertor); return hireMessageJanitor(key, convertor); } @Override public ObjectRegistration> registerMessageConvertor( MessageTypeKey key, ConvertorMessageFromOFJava convertor) { registryMessageFromOFJAva.put(key, convertor); return hireMessageJanitor(key, convertor); } }