Mass replace CRLF->LF
[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.MatchEntryDeserializerKey;
12 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionDeserializerKey;
13 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterDeserializerKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdDeserializerKey;
15 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionDeserializerKey;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterMessage;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
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      * Unregisters custom deserializer
39      * @param key used for deserializer lookup
40      * @return true if deserializer was removed,
41      *  false if no deserializer was found under specified key
42      */
43     boolean unregisterDeserializer(ExperimenterDeserializerKey key);
44
45     /**
46      * Registers action deserializer
47      * @param key used for deserializer lookup
48      * @param deserializer deserializer instance
49      */
50     void registerActionDeserializer(ExperimenterActionDeserializerKey key,
51             OFGeneralDeserializer deserializer);
52
53     /**
54      * Registers instruction deserializer
55      * @param key used for deserializer lookup
56      * @param deserializer deserializer instance
57      */
58     void registerInstructionDeserializer(ExperimenterInstructionDeserializerKey key,
59             OFGeneralDeserializer deserializer);
60
61     /**
62      * Registers match entry deserializer
63      * @param key used for deserializer lookup
64      * @param deserializer deserializer instance
65      */
66     void registerMatchEntryDeserializer(MatchEntryDeserializerKey key,
67             OFGeneralDeserializer deserializer);
68
69     /**
70      * Registers error message deserializer
71      * @param key used for deserializer lookup
72      * @param deserializer deserializer instance
73      */
74     void registerErrorDeserializer(ExperimenterIdDeserializerKey key,
75             OFDeserializer<ErrorMessage> deserializer);
76
77     /**
78      * Registers experimenter (vendor) message deserializer
79      * @param key used for deserializer lookup
80      * @param deserializer deserializer instance
81      */
82     void registerExperimenterMessageDeserializer(ExperimenterIdDeserializerKey key,
83             OFDeserializer<ExperimenterMessage> deserializer);
84
85     /**
86      * Registers multipart-reply (stats) message deserializer
87      * @param key used for deserializer lookup
88      * @param deserializer deserializer instance
89      */
90     void registerMultipartReplyMessageDeserializer(ExperimenterIdDeserializerKey key,
91             OFDeserializer<MultipartReplyMessage> deserializer);
92
93     /**
94      * Registers multipart-reply table-features message deserializer
95      * @param key used for deserializer lookup
96      * @param deserializer deserializer instance
97      */
98     void registerMultipartReplyTFDeserializer(ExperimenterIdDeserializerKey key,
99             OFGeneralDeserializer deserializer);
100
101     /**
102      * Registers meter band deserializer (used in multipart-reply meter-config)
103      * @param key used for deserializer lookup
104      * @param deserializer deserializer instance
105      */
106     void registerMeterBandDeserializer(ExperimenterIdDeserializerKey key,
107             OFDeserializer<MeterBandExperimenterCase> deserializer);
108
109     /**
110      * Registers queue property (QUEUE_GET_CONFIG_REPLY message) deserializer
111      * @param key used for deserializer lookup
112      * @param deserializer deserializer instance
113      */
114     void registerQueuePropertyDeserializer(ExperimenterIdDeserializerKey key,
115             OFDeserializer<QueueProperty> deserializer);
116 }