Fix codestyle
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / protocol / deserialization / ActionDeserializerInjector.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.deserialization;
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.DeserializerExtensionProvider;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
16 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
17 import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
18 import org.opendaylight.openflowplugin.api.openflow.protocol.deserialization.MessageCodeExperimenterKey;
19 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.CopyTtlInActionDeserializer;
20 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.CopyTtlOutActionDeserializer;
21 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.DecMplsTtlActionDeserializer;
22 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.DecNwTtlActionDeserializer;
23 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.GroupActionDeserializer;
24 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.OutputActionDeserializer;
25 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopMplsActionDeserializer;
26 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopPbbActionDeserializer;
27 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PopVlanActionDeserializer;
28 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushMplsActionDeserializer;
29 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushPbbActionDeserializer;
30 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.PushVlanActionDeserializer;
31 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetFieldActionDeserializer;
32 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetMplsTtlActionDeserializer;
33 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetNwTtlActionDeserializer;
34 import org.opendaylight.openflowplugin.impl.protocol.deserialization.action.SetQueueActionDeserializer;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
36
37 class ActionDeserializerInjector {
38
39     /**
40      * Injects action deserializers into provided
41      * {@link org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerExtensionProvider}.
42      *
43      * @param provider OpenflowJava deserializer extension provider
44      */
45     static void injectDeserializers(final DeserializerExtensionProvider provider) {
46         // Inject new message deserializers here using injector created by createInjector method
47         final Function<Byte, Consumer<OFDeserializer<Action>>> injector =
48                 createInjector(provider, EncodeConstants.OF13_VERSION_ID);
49
50         injector.apply(ActionConstants.COPY_TTL_IN_CODE).accept(new CopyTtlInActionDeserializer());
51         injector.apply(ActionConstants.COPY_TTL_OUT_CODE).accept(new CopyTtlOutActionDeserializer());
52         injector.apply(ActionConstants.OUTPUT_CODE).accept(new OutputActionDeserializer());
53         injector.apply(ActionConstants.DEC_MPLS_TTL_CODE).accept(new DecMplsTtlActionDeserializer());
54         injector.apply(ActionConstants.DEC_NW_TTL_CODE).accept(new DecNwTtlActionDeserializer());
55         injector.apply(ActionConstants.GROUP_CODE).accept(new GroupActionDeserializer());
56         injector.apply(ActionConstants.POP_MPLS_CODE).accept(new PopMplsActionDeserializer());
57         injector.apply(ActionConstants.POP_PBB_CODE).accept(new PopPbbActionDeserializer());
58         injector.apply(ActionConstants.POP_VLAN_CODE).accept(new PopVlanActionDeserializer());
59         injector.apply(ActionConstants.PUSH_MPLS_CODE).accept(new PushMplsActionDeserializer());
60         injector.apply(ActionConstants.PUSH_PBB_CODE).accept(new PushPbbActionDeserializer());
61         injector.apply(ActionConstants.PUSH_VLAN_CODE).accept(new PushVlanActionDeserializer());
62         injector.apply(ActionConstants.SET_MPLS_TTL_CODE).accept(new SetMplsTtlActionDeserializer());
63         injector.apply(ActionConstants.SET_NW_TTL_CODE).accept(new SetNwTtlActionDeserializer());
64         injector.apply(ActionConstants.SET_QUEUE_CODE).accept(new SetQueueActionDeserializer());
65         injector.apply((byte) ActionConstants.SET_FIELD_CODE).accept(new SetFieldActionDeserializer());
66     }
67
68     /**
69      * Create injector that will inject new deserializers into
70      * #{@link org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerExtensionProvider}.
71      *
72      * @param provider OpenflowJava deserializer extension provider
73      * @param version  Openflow version
74      * @return injector
75      */
76     private static Function<Byte, Consumer<OFDeserializer<Action>>> createInjector(
77             final DeserializerExtensionProvider provider,
78             final short version) {
79         return code -> deserializer -> provider.registerDeserializer(
80                 new MessageCodeExperimenterKey(version, code, Action.class, null),
81                 deserializer);
82     }
83
84 }