Add methods that allows registering any serializer
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / DeserializerExtensionProvider.java
1 /*
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. 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
9 package org.opendaylight.openflowjava.protocol.api.extensibility;
10
11 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterActionDeserializerKey;
12 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterDeserializerKey;
13 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterIdDeserializerKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.ExperimenterInstructionDeserializerKey;
15 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
16 import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;
21
22 /**
23  * Provides methods for deserialization part of extensibility.
24  * In case of handling multiple multiple structures of same type (actions,
25  * instructions, match entries, ... ) which are differentiated by
26  * vendor / experimenter subtype, vendor has to switch / choose between
27  * these subtypes.<br>
28  *
29  * This has to be done in this way because of experimenter headers, which
30  * provide only vendor / experimenter ID. Subtype position may be different
31  * for different vendors (or not present at all) - that's why vendor has to
32  * handle it in his own implementations.
33  * @author michal.polkorab
34  */
35 public interface DeserializerExtensionProvider {
36
37     /**
38      * Registers deserializer.
39      * Throws IllegalStateException when there is
40      * a deserializer already registered under given key.
41      * <p>
42      * If the deserializer implements {@link DeserializerRegistryInjector} interface,
43      * the deserializer is injected with DeserializerRegistry instance.
44      *
45      * @param key          used for deserializer lookup
46      * @param deserializer deserializer instance
47      */
48     void registerDeserializer(MessageCodeKey key,
49                               OFGeneralDeserializer deserializer);
50
51     /**
52      * Unregisters custom deserializer
53      * @param key used for deserializer lookup
54      * @return true if deserializer was removed,
55      *  false if no deserializer was found under specified key
56      */
57     boolean unregisterDeserializer(ExperimenterDeserializerKey key);
58
59     /**
60      * Registers action deserializer
61      * @param key used for deserializer lookup
62      * @param deserializer deserializer instance
63      */
64     void registerActionDeserializer(ExperimenterActionDeserializerKey key,
65             OFGeneralDeserializer deserializer);
66
67     /**
68      * Registers instruction deserializer
69      * @param key used for deserializer lookup
70      * @param deserializer deserializer instance
71      */
72     void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
73             OFGeneralDeserializer deserializer);
74
75     /**
76      * Registers match entry deserializer
77      * @param key used for deserializer lookup
78      * @param deserializer deserializer instance
79      */
80     void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
81             OFGeneralDeserializer deserializer);
82
83     /**
84      * Registers error message deserializer
85      * @param key used for deserializer lookup
86      * @param deserializer deserializer instance
87      */
88     void registerErrorDeserializer(ExperimenterIdDeserializerKey key,
89             OFDeserializer<ErrorMessage> deserializer);
90
91     /**
92      * Registers experimenter (vendor) message deserializer
93      * @param key used for deserializer lookup
94      * @param deserializer deserializer instance
95      */
96     void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,
97                                                  OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
98
99     /**
100      * Registers multipart-reply (stats) message deserializer
101      * @param key used for deserializer lookup
102      * @param deserializer deserializer instance
103      */
104     void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,
105                                                    OFDeserializer<? extends ExperimenterDataOfChoice> deserializer);
106
107     /**
108      * Registers multipart-reply table-features message deserializer
109      * @param key used for deserializer lookup
110      * @param deserializer deserializer instance
111      */
112     void registerMultipartReplyTFDeserializer(ExperimenterIdDeserializerKey key,
113             OFGeneralDeserializer deserializer);
114
115     /**
116      * Registers meter band deserializer (used in multipart-reply meter-config)
117      * @param key used for deserializer lookup
118      * @param deserializer deserializer instance
119      */
120     void registerMeterBandDeserializer(ExperimenterIdDeserializerKey key,
121             OFDeserializer<MeterBandExperimenterCase> deserializer);
122
123     /**
124      * Registers queue property (QUEUE_GET_CONFIG_REPLY message) deserializer
125      * @param key used for deserializer lookup
126      * @param deserializer deserializer instance
127      */
128     void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
129             OFDeserializer<QueueProperty> deserializer);
130 }