Fixed (de)serialization issue
[openflowplugin.git] / extension / openflowjava-extension-nicira-api / src / main / java / org / opendaylight / openflowjava / nx / api / impl / NiciraExtensionCodecRegistratorImpl.java
1 /**
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  * 
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
7  */
8 package org.opendaylight.openflowjava.nx.api.impl;
9
10 import java.util.List;
11 import java.util.Map;
12 import java.util.concurrent.ConcurrentHashMap;
13
14 import org.opendaylight.openflowjava.nx.api.NiciraActionDeserializerKey;
15 import org.opendaylight.openflowjava.nx.api.NiciraActionSerializerKey;
16 import org.opendaylight.openflowjava.nx.api.NiciraExtensionCodecRegistrator;
17 import org.opendaylight.openflowjava.nx.api.NiciraUtil;
18 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralSerializer;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
22 import org.opendaylight.openflowjava.protocol.api.keys.ActionSerializerKey;
23 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
24 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
25 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterSerializerKey;
26 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
27 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
28 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
29 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
34
35 /**
36  * @author msunal
37  *
38  */
39 public class NiciraExtensionCodecRegistratorImpl implements NiciraExtensionCodecRegistrator, AutoCloseable {
40
41     private static final Map<NiciraActionDeserializerKey, OFDeserializer<Action>> actionDeserializers = new ConcurrentHashMap<>();
42
43     private final List<SwitchConnectionProvider> providers;
44
45     /**
46      * @param providers
47      */
48     public NiciraExtensionCodecRegistratorImpl(List<SwitchConnectionProvider> providers) {
49         this.providers = providers;
50         ActionDeserializer of10ActionDeserializer = new ActionDeserializer(EncodeConstants.OF10_VERSION_ID);
51         ActionDeserializer of13ActionDeserializer = new ActionDeserializer(EncodeConstants.OF13_VERSION_ID);
52         registerActionDeserializer(ActionDeserializer.OF10_DESERIALIZER_KEY, of10ActionDeserializer);
53         registerActionDeserializer(ActionDeserializer.OF13_DESERIALIZER_KEY, of13ActionDeserializer);
54     }
55
56     private void registerActionDeserializer(ExperimenterActionDeserializerKey key, OFGeneralDeserializer deserializer) {
57         for (SwitchConnectionProvider provider : providers) {
58             provider.registerActionDeserializer(key, deserializer);
59         }
60     }
61
62     private void registerActionSerializer(ActionSerializerKey<?> key, OFGeneralSerializer serializer) {
63         for (SwitchConnectionProvider provider : providers) {
64             provider.registerActionSerializer(key, serializer);
65         }
66     }
67
68     private void unregisterDeserializer(ExperimenterDeserializerKey key) {
69         for (SwitchConnectionProvider provider : providers) {
70             provider.unregisterDeserializer(key);
71         }
72     }
73
74     private void unregisterSerializer(ExperimenterSerializerKey key) {
75         for (SwitchConnectionProvider provider : providers) {
76             provider.unregisterSerializer(key);
77         }
78     }
79
80     /*
81      * (non-Javadoc)
82      * 
83      * @see org.opendaylight.openflow.extension.nicira.api.
84      * NiciraExtensionCodecRegistrator
85      * #registerActionDeserializer(org.opendaylight
86      * .openflow.extension.nicira.api.NiciraActionDeserializerKey,
87      * org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer)
88      */
89     @Override
90     public void registerActionDeserializer(NiciraActionDeserializerKey key, OFDeserializer<Action> deserializer) {
91         actionDeserializers.put(key, deserializer);
92     }
93
94     /*
95      * (non-Javadoc)
96      * 
97      * @see org.opendaylight.openflow.extension.nicira.api.
98      * NiciraExtensionCodecRegistrator
99      * #unregisterActionDeserializer(org.opendaylight
100      * .openflow.extension.nicira.api.NiciraActionDeserializerKey)
101      */
102     @Override
103     public void unregisterActionDeserializer(NiciraActionDeserializerKey key) {
104         actionDeserializers.remove(key);
105     }
106
107     static OFDeserializer<Action> getActionDeserializer(NiciraActionDeserializerKey key) {
108         return actionDeserializers.get(key);
109     }
110
111     /*
112      * (non-Javadoc)
113      * 
114      * @see org.opendaylight.openflow.extension.nicira.api.
115      * NiciraExtensionCodecRegistrator
116      * #registerActionSerializer(org.opendaylight.
117      * openflow.extension.nicira.api.NiciraActionSerializerKey,
118      * org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer)
119      */
120     @Override
121     public void registerActionSerializer(NiciraActionSerializerKey key, OFSerializer<Action> serializer) {
122         registerActionSerializer(NiciraUtil.createOfJavaKeyFrom(key), serializer);
123     }
124
125     /*
126      * (non-Javadoc)
127      * 
128      * @see org.opendaylight.openflow.extension.nicira.api.
129      * NiciraExtensionCodecRegistrator
130      * #unregisterActionSerializer(org.opendaylight
131      * .openflow.extension.nicira.api.NiciraActionSerializerKey)
132      */
133     @Override
134     public void unregisterActionSerializer(NiciraActionSerializerKey key) {
135         unregisterSerializer(NiciraUtil.createOfJavaKeyFrom(key));
136     }
137
138     /*
139      * (non-Javadoc)
140      * 
141      * @see org.opendaylight.openflow.extension.nicira.api.
142      * NiciraExtensionCodecRegistrator
143      * #registerMatchEntryDeserializer(org.opendaylight
144      * .openflowjava.protocol.api.keys.MatchEntryDeserializerKey,
145      * org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer)
146      */
147     @Override
148     public void registerMatchEntryDeserializer(MatchEntryDeserializerKey key, OFDeserializer<MatchEntry> deserializer) {
149         for (SwitchConnectionProvider provider : providers) {
150             provider.registerMatchEntryDeserializer(key, deserializer);
151         }
152     }
153
154     /*
155      * (non-Javadoc)
156      * 
157      * @see org.opendaylight.openflow.extension.nicira.api.
158      * NiciraExtensionCodecRegistrator
159      * #unregisterMatchEntryDeserializer(org.opendaylight
160      * .openflowjava.protocol.api.keys.MatchEntryDeserializerKey)
161      */
162     @Override
163     public void unregisterMatchEntryDeserializer(MatchEntryDeserializerKey key) {
164         unregisterDeserializer(key);
165     }
166
167     /*
168      * (non-Javadoc)
169      * 
170      * @see org.opendaylight.openflow.extension.nicira.api.
171      * NiciraExtensionCodecRegistrator
172      * #registerMatchEntrySerializer(org.opendaylight
173      * .openflowjava.protocol.api.keys.MatchEntrySerializerKey,
174      * org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer)
175      */
176     @Override
177     public void registerMatchEntrySerializer(MatchEntrySerializerKey<? extends OxmClassBase, ? extends MatchField> key,
178             OFSerializer<MatchEntry> serializer) {
179         for (SwitchConnectionProvider provider : providers) {
180             provider.registerMatchEntrySerializer(key, serializer);
181         }
182     }
183
184     /*
185      * (non-Javadoc)
186      * 
187      * @see org.opendaylight.openflow.extension.nicira.api.
188      * NiciraExtensionCodecRegistrator
189      * #unregisterMatchEntrySerializer(org.opendaylight
190      * .openflowjava.protocol.api.keys.MatchEntrySerializerKey)
191      */
192     @Override
193     public void unregisterMatchEntrySerializer(MatchEntrySerializerKey<? extends OxmClassBase, ? extends MatchField> key) {
194         unregisterSerializer(key);
195     }
196
197     @Override
198     public void close() throws Exception {
199         // TODO Auto-generated method stub
200         
201     }
202
203 }