Fix codestyle
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / protocol / serialization / ActionSerializerInjector.java
1 /*
2  * Copyright (c) 2016 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.openflowplugin.impl.protocol.serialization;
10
11 import com.google.common.annotations.VisibleForTesting;
12 import java.util.function.Consumer;
13 import java.util.function.Function;
14 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerExtensionProvider;
16 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
17 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
18 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.CopyTtlInActionSerializer;
19 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.CopyTtlOutActionSerializer;
20 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.DecMplsTtlActionSerializer;
21 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.DecNwTtlActionSerializer;
22 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.DropActionSerializer;
23 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.GroupActionSerializer;
24 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.OutputActionSerializer;
25 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PopMplsActionSerializer;
26 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PopPbbActionSerializer;
27 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PopVlanActionSerializer;
28 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PushMplsActionSerializer;
29 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PushPbbActionSerializer;
30 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.PushVlanActionSerializer;
31 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetDlDstActionSerializer;
32 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetDlSrcActionSerializer;
33 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetFieldActionSerializer;
34 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetMplsTtlActionSerializer;
35 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetNwDstActionSerializer;
36 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetNwSrcActionSerializer;
37 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetNwTosActionSerializer;
38 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetNwTtlActionSerializer;
39 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetQueueActionSerializer;
40 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetTpDstActionSerializer;
41 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetTpSrcActionSerializer;
42 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetVlanIdActionSerializer;
43 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.SetVlanPcpActionSerializer;
44 import org.opendaylight.openflowplugin.impl.protocol.serialization.actions.StripVlanActionSerializer;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCase;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCase;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCase;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCase;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCase;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCase;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCase;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCase;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCase;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCase;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCase;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCase;
73
74 /**
75  * Util class for injecting new action serializers into OpenflowJava.
76  */
77 class ActionSerializerInjector {
78
79     /**
80      * Injects serializers into provided
81      * {@link org.opendaylight.openflowjava.protocol.api.extensibility.SerializerExtensionProvider}.
82      *
83      * @param provider OpenflowJava serializer extension provider
84      */
85     static void injectSerializers(final SerializerExtensionProvider provider) {
86         // Inject new action serializers here using injector created by createInjector method
87         final Function<Class<? extends Action>, Consumer<OFSerializer<? extends Action>>> injector =
88                 createInjector(provider, EncodeConstants.OF13_VERSION_ID);
89
90         injector.apply(SetFieldCase.class).accept(new SetFieldActionSerializer());
91         injector.apply(CopyTtlInCase.class).accept(new CopyTtlInActionSerializer());
92         injector.apply(CopyTtlOutCase.class).accept(new CopyTtlOutActionSerializer());
93         injector.apply(DecMplsTtlCase.class).accept(new DecMplsTtlActionSerializer());
94         injector.apply(DecNwTtlCase.class).accept(new DecNwTtlActionSerializer());
95         injector.apply(GroupActionCase.class).accept(new GroupActionSerializer());
96         injector.apply(OutputActionCase.class).accept(new OutputActionSerializer());
97         injector.apply(PopMplsActionCase.class).accept(new PopMplsActionSerializer());
98         injector.apply(PopPbbActionCase.class).accept(new PopPbbActionSerializer());
99         injector.apply(PopVlanActionCase.class).accept(new PopVlanActionSerializer());
100         injector.apply(PushMplsActionCase.class).accept(new PushMplsActionSerializer());
101         injector.apply(PushPbbActionCase.class).accept(new PushPbbActionSerializer());
102         injector.apply(PushVlanActionCase.class).accept(new PushVlanActionSerializer());
103         injector.apply(SetMplsTtlActionCase.class).accept(new SetMplsTtlActionSerializer());
104         injector.apply(SetNwTtlActionCase.class).accept(new SetNwTtlActionSerializer());
105         injector.apply(SetQueueActionCase.class).accept(new SetQueueActionSerializer());
106         injector.apply(DropActionCase.class).accept(new DropActionSerializer());
107         injector.apply(SetVlanIdActionCase.class).accept(new SetVlanIdActionSerializer());
108         injector.apply(SetVlanPcpActionCase.class).accept(new SetVlanPcpActionSerializer());
109         injector.apply(StripVlanActionCase.class).accept(new StripVlanActionSerializer());
110         injector.apply(SetDlSrcActionCase.class).accept(new SetDlSrcActionSerializer());
111         injector.apply(SetDlDstActionCase.class).accept(new SetDlDstActionSerializer());
112         injector.apply(SetNwSrcActionCase.class).accept(new SetNwSrcActionSerializer());
113         injector.apply(SetNwDstActionCase.class).accept(new SetNwDstActionSerializer());
114         injector.apply(SetTpSrcActionCase.class).accept(new SetTpSrcActionSerializer());
115         injector.apply(SetTpDstActionCase.class).accept(new SetTpDstActionSerializer());
116         injector.apply(SetNwTosActionCase.class).accept(new SetNwTosActionSerializer());
117     }
118
119     /**
120      * Create injector that will inject new serializers into
121      * #{@link org.opendaylight.openflowjava.protocol.api.extensibility.SerializerExtensionProvider}.
122      *
123      * @param provider OpenflowJava serializer extension provider
124      * @param version  Openflow version
125      * @return injector
126      */
127     @VisibleForTesting
128     static Function<Class<? extends Action>, Consumer<OFSerializer<? extends Action>>> createInjector(
129             final SerializerExtensionProvider provider,
130             final byte version) {
131         return type -> serializer ->
132                 provider.registerSerializer(
133                         new MessageTypeKey<>(version, type),
134                         serializer);
135     }
136 }