2 * Copyright (c) 2013 Pantheon Technologies s.r.o. 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
9 package org.opendaylight.openflowjava.protocol.impl.deserialization;
11 import java.util.HashMap;
14 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
16 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
17 import org.opendaylight.openflowjava.protocol.api.extensibility.OFGeneralDeserializer;
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
19 import org.opendaylight.openflowjava.protocol.impl.util.MatchDeserializer;
20 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchDeserializer;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.Match;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10;
25 * Stores and registers deserializers
26 * @author michal.polkorab
28 public class DeserializerRegistryImpl implements DeserializerRegistry {
30 private Map<MessageCodeKey, OFGeneralDeserializer> registry;
33 * Decoder table provisioning
37 registry = new HashMap<>();
38 // register message deserializers
39 MessageDerializerInitializer.registerMessageDeserializers(this);
41 // register common structure deserializers
42 registerDeserializer(new MessageCodeKey(EncodeConstants.OF10_VERSION_ID,
43 EncodeConstants.EMPTY_VALUE, MatchV10.class), new OF10MatchDeserializer());
44 registerDeserializer(new MessageCodeKey(EncodeConstants.OF13_VERSION_ID,
45 EncodeConstants.EMPTY_VALUE, Match.class), new MatchDeserializer());
47 // register match entry deserializers
48 MatchEntryDeserializerInitializer.registerMatchEntryDeserializers(this);
49 // register action deserializers
50 ActionDeserializerInitializer.registerDeserializers(this);
51 // register instruction deserializers
52 InstructionDeserializerInitializer.registerDeserializers(this);
56 @SuppressWarnings("unchecked")
57 public <DESERIALIZER_TYPE extends OFGeneralDeserializer> DESERIALIZER_TYPE getDeserializer(
59 OFGeneralDeserializer deserializer = registry.get(key);
60 if (deserializer == null) {
61 throw new NullPointerException("Deserializer for key: " + key.toString()
64 return (DESERIALIZER_TYPE) deserializer;
68 public void registerDeserializer(MessageCodeKey key,
69 OFGeneralDeserializer deserializer) {
70 if ((key == null) || (deserializer == null)) {
71 throw new NullPointerException("MessageCodeKey or Deserializer is null");
73 if (deserializer instanceof DeserializerRegistryInjector) {
74 ((DeserializerRegistryInjector) deserializer).injectDeserializerRegistry(this);
76 registry.put(key, deserializer);
80 public boolean unregisterDeserializer(MessageCodeKey key) {
82 throw new NullPointerException("MessageCodeKey is null");
84 OFGeneralDeserializer deserializer = registry.remove(key);
85 if (deserializer == null) {