2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowplugin.openflow.md.core.extension;
11 import java.util.concurrent.ConcurrentHashMap;
13 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
15 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;
16 import org.opendaylight.openflowplugin.extension.api.ConverterExtensionKey;
17 import org.opendaylight.openflowplugin.extension.api.ConvertorActionFromOFJava;
18 import org.opendaylight.openflowplugin.extension.api.ConvertorActionToOFJava;
19 import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava;
20 import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava;
21 import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
22 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
23 import org.opendaylight.openflowplugin.extension.api.path.AugmentationPath;
24 import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
25 import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserActionFromOFJava;
26 import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserActionToOFJava;
27 import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserFromOFJava;
28 import org.opendaylight.openflowplugin.openflow.md.core.extension.RegistrationCloser.RegistrationCloserToOFJava;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey;
34 import org.opendaylight.yangtools.concepts.ObjectRegistration;
35 import org.opendaylight.yangtools.yang.binding.DataContainer;
38 * simple map-based registration engine implementation
40 public class ExtensionConverterManagerImpl implements ExtensionConverterManager {
42 private Map<MessageTypeKey<?>, ConvertorFromOFJava<?, ?>> registryFromOFJAva;
43 private Map<ConverterExtensionKey<?>, ConvertorToOFJava<?>> registryToOFJAva;
44 private Map<TypeVersionKey<? extends Action>, ConvertorActionToOFJava<? extends Action, ? extends DataContainer>> registryActionToOFJAva;
45 private Map<MessageTypeKey<?>, ConvertorActionFromOFJava<?, ?>> registryActionFromOFJAva;
50 public ExtensionConverterManagerImpl() {
51 registryFromOFJAva = new ConcurrentHashMap<>();
52 registryToOFJAva = new ConcurrentHashMap<>();
53 registryActionToOFJAva = new ConcurrentHashMap<>();
54 registryActionFromOFJAva = new ConcurrentHashMap<>();
62 private <FROM extends DataContainer, PATH extends AugmentationPath, KEY extends MessageTypeKey<?>>
63 RegistrationCloserFromOFJava<FROM, PATH> hireJanitor(
64 KEY key, ConvertorFromOFJava<FROM, PATH> extConvertor) {
65 RegistrationCloserFromOFJava<FROM, PATH> janitor = new RegistrationCloser.RegistrationCloserFromOFJava<>();
66 janitor.setConverter(extConvertor);
68 janitor.setRegistrator(this);
77 private <FROM extends DataContainer, PATH extends AugmentationPath, KEY extends MessageTypeKey<?>>
78 RegistrationCloserActionFromOFJava<FROM, PATH> hireJanitor(
79 KEY key, ConvertorActionFromOFJava<FROM, PATH> extConvertor) {
80 RegistrationCloserActionFromOFJava<FROM, PATH> janitor = new RegistrationCloser.RegistrationCloserActionFromOFJava<>();
81 janitor.setConverter(extConvertor);
83 janitor.setRegistrator(this);
92 private <TO extends DataContainer> RegistrationCloserToOFJava<TO> hireJanitor(
93 ConverterExtensionKey<? extends ExtensionKey> key, ConvertorToOFJava<TO> extConvertor) {
94 RegistrationCloserToOFJava<TO> janitor = new RegistrationCloser.RegistrationCloserToOFJava<>();
95 janitor.setConverter(extConvertor);
97 janitor.setRegistrator(this);
103 * @param extConvertor
106 private <TO extends DataContainer> RegistrationCloserActionToOFJava<TO> hireJanitor(
107 TypeVersionKey<? extends Action> key, ConvertorActionToOFJava<Action, TO> extConvertor) {
108 RegistrationCloserActionToOFJava<TO> janitor = new RegistrationCloser.RegistrationCloserActionToOFJava<>();
109 janitor.setConverter(extConvertor);
111 janitor.setRegistrator(this);
116 * cancel registration of given converter
121 public void unregister(ConverterExtensionKey<?> key, ConvertorToOFJava<?> converter) {
122 ConvertorToOFJava<?> registeredConverter = registryToOFJAva.get(key);
123 if (registeredConverter != null && registeredConverter == converter) {
124 registryToOFJAva.remove(key);
129 * cancel registration of given converter
134 public void unregister(TypeVersionKey<? extends Action> key, ConvertorActionToOFJava<?, ?> converter) {
135 ConvertorActionToOFJava<?, ?> registeredConverter = registryActionToOFJAva.get(key);
136 if (registeredConverter != null && registeredConverter == converter) {
137 registryActionToOFJAva.remove(key);
142 * cancel registration of given converter
147 public void unregister(MessageTypeKey<?> key, ConvertorFromOFJava<?, ?> converter) {
148 ConvertorFromOFJava<?, ?> registeredConverter = registryFromOFJAva.get(key);
149 if (registeredConverter != null && registeredConverter == converter) {
150 registryFromOFJAva.remove(key);
155 * cancel registration of given converter
160 public void unregister(MessageTypeKey<?> key, ConvertorActionFromOFJava<?, ?> converter) {
161 ConvertorActionFromOFJava<?, ?> registeredConverter = registryActionFromOFJAva.get(key);
162 if (registeredConverter != null && registeredConverter == converter) {
163 registryActionFromOFJAva.remove(key);
167 @SuppressWarnings("unchecked")
169 public <FROM extends DataContainer> ConvertorToOFJava<FROM> getConverter(
170 ConverterExtensionKey<?> key) {
171 return (ConvertorToOFJava<FROM>) registryToOFJAva.get(key);
174 @SuppressWarnings("unchecked")
176 public <FROM extends Action, TO extends DataContainer> ConvertorActionToOFJava<FROM, TO> getConverter(
177 TypeVersionKey<FROM> key) {
178 return (ConvertorActionToOFJava<FROM, TO>) registryActionToOFJAva.get(key);
181 @SuppressWarnings("unchecked")
183 public <FROM extends DataContainer, PATH extends AugmentationPath> ConvertorFromOFJava<FROM, PATH> getConverter(
184 MessageTypeKey<?> key) {
185 return (ConvertorFromOFJava<FROM, PATH>) registryFromOFJAva.get(key);
188 @SuppressWarnings("unchecked")
190 public <FROM extends DataContainer, PATH extends AugmentationPath> ConvertorActionFromOFJava<FROM, PATH> getActionConverter(
191 MessageTypeKey<?> key) {
192 return (ConvertorActionFromOFJava<FROM, PATH>) registryActionFromOFJAva.get(key);
196 public ObjectRegistration<ConvertorActionToOFJava<Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action>>
197 registerActionConvertor(
198 TypeVersionKey<? extends Action> key,
199 ConvertorActionToOFJava<Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action> convertor) {
200 registryActionToOFJAva.put(key, convertor);
201 return hireJanitor(key, convertor);
205 public ObjectRegistration<ConvertorActionFromOFJava<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action, ActionPath>>
206 registerActionConvertor(
207 ExperimenterActionSerializerKey key,
208 ConvertorActionFromOFJava<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action, ActionPath> convertor) {
209 registryActionFromOFJAva.put(key, convertor);
210 return hireJanitor(key, convertor);
214 public ObjectRegistration<ConvertorToOFJava<MatchEntries>> registerMatchConvertor(ConverterExtensionKey<? extends ExtensionKey> key,
215 ConvertorToOFJava<MatchEntries> convertor) {
216 registryToOFJAva.put(key, convertor);
217 return hireJanitor(key, convertor);
221 public ObjectRegistration<ConvertorFromOFJava<MatchEntries, MatchPath>> registerMatchConvertor(
222 MatchEntrySerializerKey<? extends OxmClassBase, ? extends MatchField> key,
223 ConvertorFromOFJava<MatchEntries, MatchPath> convertor) {
224 registryFromOFJAva.put(key, convertor);
225 return hireJanitor(key, convertor);