2 * Copyright (c) 2016, 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.genius.interfacemanager.servicebindings.flowbased.utilities;
10 import com.google.common.collect.ImmutableMap;
11 import java.util.ArrayList;
12 import java.util.List;
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;
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())
123 private ActionConverterUtil() {
127 public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
128 .types.rev131112.action.list.Action> convertServiceActionToFlowAction(
129 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
130 .action.list.Action> inActionList) {
131 return convertServiceActionToFlowAction(inActionList, 0);
135 * Convert service binding actions to flow actions, applying an offset to
138 * @param inActionList the service binding actions.
139 * @param keyOffset the offset.
140 * @return the flow actions.
142 public static List<org.opendaylight.yang.gen.v1.urn.opendaylight.action
143 .types.rev131112.action.list.Action> convertServiceActionToFlowAction(
144 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
145 .action.list.Action> inActionList,
147 List<org.opendaylight.yang.gen.v1.urn.opendaylight
148 .action.types.rev131112.action.list.Action> outActionList = new ArrayList<>();
149 if (inActionList != null) {
150 for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
151 .action.list.Action inAction : inActionList) {
153 new org.opendaylight.yang.gen.v1.urn.opendaylight
154 .action.types.rev131112.action.list.ActionBuilder()
155 .setAction(convertServiceActionToFlowAction(inAction.getAction()))
156 .withKey(new ActionKey(inAction.key().getOrder() + keyOffset))
160 return outActionList;
163 public static Action convertServiceActionToFlowAction(Action inAction) {
164 final Function<Action, Action> func = SERVICE_TO_OF.get(inAction.implementedInterface());
165 return func == null ? inAction : func.apply(inAction);