MRI version bump for Aluminium
[genius.git] / interfacemanager / interfacemanager-impl / src / main / java / org / opendaylight / genius / interfacemanager / servicebindings / flowbased / utilities / ActionConverterUtil.java
1 /*
2  * Copyright (c) 2016, 2017 Ericsson India Global Services Pvt Ltd. 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 package org.opendaylight.genius.interfacemanager.servicebindings.flowbased.utilities;
9
10 import com.google.common.collect.ImmutableMap;
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.Map;
14 import java.util.function.Function;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionConntrackApplyActionsCase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionDecNshTtlApplyActionsCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionDecapApplyActionsCase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionEncapApplyActionsCase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionLearnApplyActionsCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionMultipathApplyActionsCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionOutputRegApplyActionsCase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionRegLoadApplyActionsCase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionRegMoveApplyActionsCase;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.apply.actions._case.apply.actions.action.action.ServiceBindingNxActionResubmitApplyActionsCase;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionConntrackWriteActionsCase;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionDecNshTtlWriteActionsCase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionDecapWriteActionsCase;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionEncapWriteActionsCase;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionLearnWriteActionsCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionMultipathWriteActionsCase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionOutputRegWriteActionsCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionRegLoadWriteActionsCase;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionRegMoveWriteActionsCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.bound.services.instruction.instruction.write.actions._case.write.actions.action.action.ServiceBindingNxActionResubmitWriteActionsCase;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionConntrackNodesNodeTableFlowApplyActionsCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionDecNshTtlNodesNodeTableFlowApplyActionsCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionDecapNodesNodeTableFlowApplyActionsCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionEncapNodesNodeTableFlowApplyActionsCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionLearnNodesNodeTableFlowApplyActionsCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionMultipathNodesNodeTableFlowApplyActionsCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionOutputRegNodesNodeTableFlowApplyActionsCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionRegMoveNodesNodeTableFlowApplyActionsCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.apply.actions._case.apply.actions.action.action.NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionDecNshTtlNodesNodeTableFlowWriteActionsCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionDecapNodesNodeTableFlowWriteActionsCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionEncapNodesNodeTableFlowWriteActionsCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionLearnNodesNodeTableFlowWriteActionsCaseBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionMultipathNodesNodeTableFlowWriteActionsCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionOutputRegNodesNodeTableFlowWriteActionsCaseBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionRegLoadNodesNodeTableFlowWriteActionsCaseBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionRegMoveNodesNodeTableFlowWriteActionsCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nodes.node.table.flow.instructions.instruction.instruction.write.actions._case.write.actions.action.action.NxActionResubmitNodesNodeTableFlowWriteActionsCaseBuilder;
57
58 public final class ActionConverterUtil {
59     private static final Map<Class<? extends Action>, Function<Action, Action>> SERVICE_TO_OF =
60             ImmutableMap.<Class<? extends Action>, Function<Action, Action>>builder()
61             .put(ServiceBindingNxActionConntrackApplyActionsCase.class,
62                 input -> new NxActionConntrackNodesNodeTableFlowApplyActionsCaseBuilder(
63                     (ServiceBindingNxActionConntrackApplyActionsCase) input).build())
64             .put(ServiceBindingNxActionLearnApplyActionsCase.class,
65                 input -> new NxActionLearnNodesNodeTableFlowApplyActionsCaseBuilder(
66                     (ServiceBindingNxActionLearnApplyActionsCase) input).build())
67             .put(ServiceBindingNxActionMultipathApplyActionsCase.class,
68                 input -> new NxActionMultipathNodesNodeTableFlowApplyActionsCaseBuilder(
69                     (ServiceBindingNxActionMultipathApplyActionsCase) input).build())
70             .put(ServiceBindingNxActionOutputRegApplyActionsCase.class,
71                 input -> new NxActionOutputRegNodesNodeTableFlowApplyActionsCaseBuilder(
72                     (ServiceBindingNxActionOutputRegApplyActionsCase) input).build())
73             .put(ServiceBindingNxActionDecapApplyActionsCase.class,
74                 input -> new NxActionDecapNodesNodeTableFlowApplyActionsCaseBuilder(
75                     (ServiceBindingNxActionDecapApplyActionsCase) input).build())
76             .put(ServiceBindingNxActionEncapApplyActionsCase.class,
77                 input -> new NxActionEncapNodesNodeTableFlowApplyActionsCaseBuilder(
78                     (ServiceBindingNxActionEncapApplyActionsCase) input).build())
79             .put(ServiceBindingNxActionRegLoadApplyActionsCase.class,
80                 input -> new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder(
81                     (ServiceBindingNxActionRegLoadApplyActionsCase) input).build())
82             .put(ServiceBindingNxActionRegMoveApplyActionsCase.class,
83                 input -> new NxActionRegMoveNodesNodeTableFlowApplyActionsCaseBuilder(
84                     (ServiceBindingNxActionRegMoveApplyActionsCase) input).build())
85             .put(ServiceBindingNxActionResubmitApplyActionsCase.class,
86                 input -> new NxActionResubmitNodesNodeTableFlowApplyActionsCaseBuilder(
87                     (ServiceBindingNxActionResubmitApplyActionsCase) input).build())
88             .put(ServiceBindingNxActionDecNshTtlApplyActionsCase.class,
89                 input -> new NxActionDecNshTtlNodesNodeTableFlowApplyActionsCaseBuilder(
90                     (ServiceBindingNxActionDecNshTtlApplyActionsCase) input).build())
91             .put(ServiceBindingNxActionConntrackWriteActionsCase.class,
92                 input -> new NxActionConntrackNodesNodeTableFlowWriteActionsCaseBuilder(
93                     (ServiceBindingNxActionConntrackWriteActionsCase) input).build())
94             .put(ServiceBindingNxActionLearnWriteActionsCase.class,
95                 input -> new NxActionLearnNodesNodeTableFlowWriteActionsCaseBuilder(
96                     (ServiceBindingNxActionLearnWriteActionsCase) input).build())
97             .put(ServiceBindingNxActionMultipathWriteActionsCase.class,
98                 input -> new NxActionMultipathNodesNodeTableFlowWriteActionsCaseBuilder(
99                     (ServiceBindingNxActionMultipathWriteActionsCase) input).build())
100             .put(ServiceBindingNxActionOutputRegWriteActionsCase.class,
101                 input -> new NxActionOutputRegNodesNodeTableFlowWriteActionsCaseBuilder(
102                     (ServiceBindingNxActionOutputRegWriteActionsCase) input).build())
103             .put(ServiceBindingNxActionDecapWriteActionsCase.class,
104                 input -> new NxActionDecapNodesNodeTableFlowWriteActionsCaseBuilder(
105                     (ServiceBindingNxActionDecapWriteActionsCase) input).build())
106             .put(ServiceBindingNxActionEncapWriteActionsCase.class,
107                 input -> new NxActionEncapNodesNodeTableFlowWriteActionsCaseBuilder(
108                     (ServiceBindingNxActionEncapWriteActionsCase) input).build())
109             .put(ServiceBindingNxActionRegLoadWriteActionsCase.class,
110                 input -> new NxActionRegLoadNodesNodeTableFlowWriteActionsCaseBuilder(
111                     (ServiceBindingNxActionRegLoadWriteActionsCase) input).build())
112             .put(ServiceBindingNxActionRegMoveWriteActionsCase.class,
113                 input -> new NxActionRegMoveNodesNodeTableFlowWriteActionsCaseBuilder(
114                     (ServiceBindingNxActionRegMoveWriteActionsCase) input).build())
115             .put(ServiceBindingNxActionResubmitWriteActionsCase.class,
116                 input -> new NxActionResubmitNodesNodeTableFlowWriteActionsCaseBuilder(
117                     (ServiceBindingNxActionResubmitWriteActionsCase) input).build())
118             .put(ServiceBindingNxActionDecNshTtlWriteActionsCase.class,
119                 input -> new NxActionDecNshTtlNodesNodeTableFlowWriteActionsCaseBuilder(
120                     (ServiceBindingNxActionDecNshTtlWriteActionsCase) input).build())
121             .build();
122
123     private ActionConverterUtil() {
124
125     }
126
127     public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
128         .types.rev131112.action.list.Action> convertServiceActionToFlowAction(
129             Map<ActionKey, org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>
130                     inActionList) {
131         return convertServiceActionToFlowAction(inActionList, 0);
132     }
133
134     /**
135      * Convert service binding actions to flow actions, applying an offset to
136      * its order.
137      *
138      * @param inActionList the service binding actions.
139      * @param keyOffset the offset.
140      * @return the flow actions.
141      */
142     public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
143             .types.rev131112.action.list.Action> convertServiceActionToFlowAction(Map<ActionKey,
144             org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> inActionList,
145             int keyOffset) {
146         List<org.opendaylight.yang.gen.v1.urn.opendaylight
147                 .action.types.rev131112.action.list.Action> outActionList = new ArrayList<>();
148         if (inActionList != null) {
149             for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
150                      .action.list.Action inAction : inActionList.values()) {
151                 outActionList.add(
152                         new org.opendaylight.yang.gen.v1.urn.opendaylight
153                                 .action.types.rev131112.action.list.ActionBuilder()
154                                 .setAction(convertServiceActionToFlowAction(inAction.getAction()))
155                                 .withKey(new ActionKey(inAction.key().getOrder() + keyOffset))
156                                 .build());
157             }
158         }
159         return outActionList;
160     }
161
162     public static Action convertServiceActionToFlowAction(Action inAction) {
163         final Function<Action, Action> func = SERVICE_TO_OF.get(inAction.implementedInterface());
164         return func == null ? inAction : func.apply(inAction);
165     }
166 }