f658f5f109d4197fe05136cac172e635d6fd7ee1
[openflowjava.git] / openflow-protocol-api / src / main / java / org / opendaylight / openflowjava / protocol / api / extensibility / SerializerExtensionProvider.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.api.extensibility;\r
10 \r
11 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;\r
12 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterActionSerializerKey;\r
13 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterIdSerializerKey;\r
14 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterInstructionSerializerKey;\r
15 import org.opendaylight.openflowjava.protocol.api.keys.experimenter.ExperimenterSerializerKey;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MatchField;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmClassBase;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ExperimenterInput;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
22 \r
23 \r
24 /**\r
25  * Provides methods for serialization part of extensibility.\r
26  * In case of handling multiple structures of same type (actions,\r
27  * instructions, match entries, ... ) which are differentiated by\r
28  * vendor / experimenter subtype, vendor has to switch / choose between\r
29  * these subtypes. <br />\r
30  * \r
31  * This has to be done in this way because of unknown augmentations\r
32  * - that's why vendor has to handle it in his own implementations.\r
33  * @author michal.polkorab\r
34  */\r
35 public interface SerializerExtensionProvider {\r
36 \r
37     /**\r
38      * Unregisters custom serializer\r
39      * @param key used for serializer lookup\r
40      * @return true if serializer was removed,\r
41      *  false if no serializer was found under specified key\r
42      */\r
43     boolean unregisterSerializer(ExperimenterSerializerKey key);\r
44 \r
45     /**\r
46      * Registers action serializer\r
47      * @param key used for serializer lookup\r
48      * @param serializer serializer implementation\r
49      */\r
50     void registerActionSerializer(ExperimenterActionSerializerKey key,\r
51             OFGeneralSerializer serializer);\r
52 \r
53     /**\r
54      * Registers instruction serializer\r
55      * @param key used for serializer lookup\r
56      * @param serializer serializer implementation\r
57      */\r
58     void registerInstructionSerializer(ExperimenterInstructionSerializerKey key,\r
59             OFGeneralSerializer serializer);\r
60 \r
61     /**\r
62      * Registers match entry serializer\r
63      * @param key used for serializer lookup\r
64      * @param serializer serializer implementation\r
65      */\r
66     <OXMCLASS extends OxmClassBase, OXMTYPE extends MatchField> void registerMatchEntrySerializer(\r
67             MatchEntrySerializerKey<OXMCLASS, OXMTYPE> key,OFGeneralSerializer serializer);\r
68 \r
69     /**\r
70      * Registers experimenter (vendor) message serializer\r
71      * @param key used for serializer lookup\r
72      * @param serializer serializer implementation\r
73      */\r
74     void registerExperimenterMessageSerializer(ExperimenterIdSerializerKey<ExperimenterInput> key,\r
75             OFSerializer<ExperimenterInput> serializer);\r
76 \r
77     /**\r
78      * Registers multipart-request (stats-request) serializer\r
79      * @param key used for serializer lookup\r
80      * @param serializer serializer implementation\r
81      */\r
82     void registerMultipartRequestSerializer(ExperimenterIdSerializerKey<MultipartRequestExperimenterCase> key,\r
83             OFSerializer<MultipartRequestExperimenterCase> serializer);\r
84 \r
85     /**\r
86      * Registers multipart-request table-features serializer\r
87      * @param key used for serializer lookup\r
88      * @param serializer serializer implementation\r
89      */\r
90     void registerMultipartRequestTFSerializer(ExperimenterIdSerializerKey<TableFeatureProperties> key,\r
91             OFGeneralSerializer serializer);\r
92 \r
93     /**\r
94      * Registers meter band serializer (used in meter-mod messages)\r
95      * @param key used for serializer lookup\r
96      * @param serializer serializer implementation\r
97      */\r
98     void registerMeterBandSerializer(ExperimenterIdSerializerKey<MeterBandExperimenterCase> key,\r
99             OFSerializer<MeterBandExperimenterCase> serializer);\r
100 }