Fixup Augmentable and Identifiable methods changing
[openflowplugin.git] / extension / test-extension / src / main / java / org / opendaylight / openflowplugin / extension / test / Test.java
index 288147e85fbaba580dda7332120de634f5e1682c..04f35928379fb7660279583551b85d6f9c200029 100644 (file)
-/**\r
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.\r
- * \r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-package org.opendaylight.openflowplugin.extension.test;\r
-\r
-import java.math.BigInteger;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.concurrent.Future;\r
-\r
-import org.opendaylight.openflowplugin.extension.api.AugmentTuple;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;\r
-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;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestService;\r
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
-import org.opendaylight.yangtools.yang.common.RpcResult;\r
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;\r
-\r
-import com.google.common.util.concurrent.Futures;\r
-\r
-/**\r
- * @author msunal\r
- *\r
- */\r
-public class Test implements TestService {\r
-    \r
-    private SalFlowService flowService;\r
-\r
-\r
-    @Override\r
-    public Future<RpcResult<Void>> testFlow(TestFlowInput input) {\r
-        AddFlowInputBuilder flow = new AddFlowInputBuilder();\r
-        flow.setPriority(2);\r
-        flow.setMatch(createMatchBld().build());\r
-        flow.setInstructions(createDecNwTtlInstructionsBld().build());\r
-        flow.setBarrier(Boolean.FALSE);\r
-        BigInteger value = BigInteger.valueOf(10L);\r
-        flow.setCookie(new FlowCookie(value));\r
-        flow.setCookieMask(new FlowCookie(value));\r
-        flow.setHardTimeout(0);\r
-        flow.setIdleTimeout(0);\r
-        flow.setInstallHw(false);\r
-        flow.setStrict(false);\r
-        flow.setContainerName(null);\r
-        flow.setFlags(new FlowModFlags(false, false, false, false, true));\r
-        flow.setTableId((short) 0);\r
-\r
-        flow.setFlowName("NiciraFLOW");\r
-        \r
-        // Construct the flow instance id\r
-        final InstanceIdentifier<Node> flowInstanceId = InstanceIdentifier\r
-                .builder(Nodes.class) // File under nodes\r
-                .child(Node.class, new NodeKey(new NodeId("openflow:1"))).toInstance(); // A particular node identified by nodeKey\r
-        flow.setNode(new NodeRef(flowInstanceId));\r
-        \r
-        pushFlowViaRpc(flow.build());\r
-        \r
-        return Futures.immediateFuture(RpcResultBuilder.<Void>status(true).build());\r
-    }\r
-    \r
-    /**\r
-     * @param addFlowInput\r
-     */\r
-    private void pushFlowViaRpc(AddFlowInput addFlowInput) {\r
-        flowService.addFlow(addFlowInput);\r
-    }\r
-\r
-    /**\r
-     * @param flowService the flowService to set\r
-     */\r
-    public void setFlowService(SalFlowService flowService) {\r
-        this.flowService = flowService;\r
-    }\r
-    \r
-    private static MatchBuilder createMatchBld() {\r
-        MatchBuilder match = new MatchBuilder();\r
-        Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();\r
-        Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");\r
-        ipv4Match.setIpv4Destination(prefix);\r
-        Ipv4Match i4m = ipv4Match.build();\r
-        match.setLayer3Match(i4m);\r
-\r
-        EthernetMatchBuilder eth = new EthernetMatchBuilder();\r
-        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();\r
-        ethTypeBuilder.setType(new EtherType(0x0800L));\r
-        eth.setEthernetType(ethTypeBuilder.build());\r
-        match.setEthernetMatch(eth.build());\r
-        \r
-//        AugmentTuple<Match> extAugmentWrapper = createNxMatchAugment();\r
-//        match.addAugmentation(extAugmentWrapper.getAugmentationClass(), extAugmentWrapper.getAugmentationObject());\r
-        \r
-        return match;\r
-    }\r
-    \r
-    private static AugmentTuple<Match> createNxMatchAugment() {\r
-        // TODO add example\r
-        return null;\r
-    }\r
-\r
-    private static InstructionsBuilder createDecNwTtlInstructionsBld() {\r
-        // Add our drop action to a list\r
-        List<Action> actionList = new ArrayList<Action>();\r
-        actionList.add(createOFAction(0).build());\r
-        actionList.add(createNxActionBld(1).build());\r
-        \r
-        // Create an Apply Action\r
-        ApplyActionsBuilder aab = new ApplyActionsBuilder();\r
-        aab.setAction(actionList);\r
-       \r
-        // Wrap our Apply Action in an Instruction\r
-        InstructionBuilder ib = new InstructionBuilder();\r
-        ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());\r
-        ib.setKey(new InstructionKey(0));\r
-        ib.setOrder(0);\r
-\r
-        // Put our Instruction in a list of Instructions\r
-        InstructionsBuilder isb = new InstructionsBuilder();\r
-        List<Instruction> instructions = new ArrayList<Instruction>();\r
-        instructions.add(ib.build());\r
-        ib.setKey(new InstructionKey(0));\r
-        isb.setInstruction(instructions);\r
-        return isb;\r
-    }\r
-\r
-    /**\r
-     * @param actionKeyVal \r
-     * @return\r
-     */\r
-    private static ActionBuilder createOFAction(int actionKeyVal) {\r
-        DecNwTtlBuilder ta = new DecNwTtlBuilder();\r
-        DecNwTtl decNwTtl = ta.build();\r
-        ActionBuilder ab = new ActionBuilder();\r
-        ab.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl).build());\r
-        ab.setKey(new ActionKey(actionKeyVal));\r
-        return ab;\r
-    }\r
-\r
-    /**\r
-     * @param actionKeyVal TODO\r
-     * @return\r
-     */\r
-    private static ActionBuilder createNxActionBld(int actionKeyVal) {\r
-        // vendor part\r
-        DstNxRegCaseBuilder nxRegCaseBld = new DstNxRegCaseBuilder().setNxReg(NxmNxReg0.class);\r
-        DstBuilder dstBld = new DstBuilder()\r
-            .setDstChoice(nxRegCaseBld.build())\r
-            .setStart(0)\r
-            .setEnd(5);\r
-        NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();\r
-        nxRegLoadBuilder.setDst(dstBld.build());\r
-        nxRegLoadBuilder.setValue(BigInteger.valueOf(55L));\r
-        NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder topNxActionCaseBld = new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder();\r
-        topNxActionCaseBld.setNxRegLoad(nxRegLoadBuilder.build());\r
-        \r
-        // base part\r
-        ActionBuilder abExt = new ActionBuilder();\r
-        abExt.setKey(new ActionKey(actionKeyVal));\r
-        abExt.setAction(topNxActionCaseBld.build());\r
-        return abExt;\r
-    }\r
-    \r
-\r
-}\r
+/**
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.extension.test;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.infrautils.utils.concurrent.JdkFutures;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.dst.choice.grouping.dst.choice.DstNxRegCaseBuilder;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.NxRegLoadBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.action.rev140714.nx.action.reg.load.grouping.nx.reg.load.DstBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestFlowOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev130819.TestService;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Implementation of TestService.
+ *
+ * @author msunal
+ */
+public class Test implements TestService {
+    private static final Logger LOG = LoggerFactory.getLogger(Test.class);
+
+    private SalFlowService flowService;
+
+
+    @Override
+    public ListenableFuture<RpcResult<TestFlowOutput>> testFlow(TestFlowInput input) {
+        AddFlowInputBuilder flow = new AddFlowInputBuilder();
+        flow.setPriority(2);
+        flow.setMatch(createMatchBld().build());
+        flow.setInstructions(createDecNwTtlInstructionsBld().build());
+        flow.setBarrier(Boolean.FALSE);
+        BigInteger value = BigInteger.valueOf(10L);
+        flow.setCookie(new FlowCookie(value));
+        flow.setCookieMask(new FlowCookie(value));
+        flow.setHardTimeout(0);
+        flow.setIdleTimeout(0);
+        flow.setInstallHw(false);
+        flow.setStrict(false);
+        flow.setContainerName(null);
+        flow.setFlags(new FlowModFlags(false, false, false, false, true));
+        flow.setTableId((short) 0);
+
+        flow.setFlowName("NiciraFLOW");
+
+        // Construct the flow instance id
+        final InstanceIdentifier<Node> flowInstanceId = InstanceIdentifier
+                .builder(Nodes.class) // File under nodes
+                // A particular node identified by nodeKey
+                .child(Node.class, new NodeKey(new NodeId("openflow:1"))).build();
+        flow.setNode(new NodeRef(flowInstanceId));
+
+        pushFlowViaRpc(flow.build());
+
+        return Futures.immediateFuture(RpcResultBuilder.<TestFlowOutput>status(true).build());
+    }
+
+    private void pushFlowViaRpc(AddFlowInput addFlowInput) {
+        if (flowService != null) {
+            JdkFutures.addErrorLogging(flowService.addFlow(addFlowInput), LOG, "addFlow");
+        }
+    }
+
+    public void setFlowService(SalFlowService flowService) {
+        this.flowService = flowService;
+    }
+
+    private static MatchBuilder createMatchBld() {
+        MatchBuilder match = new MatchBuilder();
+        Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
+        Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
+        ipv4Match.setIpv4Destination(prefix);
+        Ipv4Match i4m = ipv4Match.build();
+        match.setLayer3Match(i4m);
+
+        EthernetMatchBuilder eth = new EthernetMatchBuilder();
+        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
+        ethTypeBuilder.setType(new EtherType(0x0800L));
+        eth.setEthernetType(ethTypeBuilder.build());
+        match.setEthernetMatch(eth.build());
+
+//        AugmentTuple<Match> extAugmentWrapper = createNxMatchAugment();
+//        match.addAugmentation(extAugmentWrapper.getAugmentationClass(), extAugmentWrapper.getAugmentationObject());
+
+        return match;
+    }
+
+    private static InstructionsBuilder createDecNwTtlInstructionsBld() {
+        // Add our drop action to a list
+        List<Action> actionList = new ArrayList<>();
+        actionList.add(createOFAction(0).build());
+        actionList.add(createNxActionBld(1).build());
+
+        // Create an Apply Action
+        ApplyActionsBuilder aab = new ApplyActionsBuilder();
+        aab.setAction(actionList);
+
+        // Wrap our Apply Action in an Instruction
+        InstructionBuilder ib = new InstructionBuilder();
+        ib.setInstruction(new ApplyActionsCaseBuilder().setApplyActions(aab.build()).build());
+        ib.withKey(new InstructionKey(0));
+        ib.setOrder(0);
+
+        // Put our Instruction in a list of Instructions
+        InstructionsBuilder isb = new InstructionsBuilder();
+        List<Instruction> instructions = new ArrayList<>();
+        instructions.add(ib.build());
+        ib.withKey(new InstructionKey(0));
+        isb.setInstruction(instructions);
+        return isb;
+    }
+
+    private static ActionBuilder createOFAction(int actionKeyVal) {
+        DecNwTtlBuilder ta = new DecNwTtlBuilder();
+        DecNwTtl decNwTtl = ta.build();
+        ActionBuilder ab = new ActionBuilder();
+        ab.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(decNwTtl).build());
+        ab.withKey(new ActionKey(actionKeyVal));
+        return ab;
+    }
+
+    private static ActionBuilder createNxActionBld(int actionKeyVal) {
+        // vendor part
+        DstNxRegCaseBuilder nxRegCaseBld = new DstNxRegCaseBuilder().setNxReg(NxmNxReg0.class);
+        DstBuilder dstBld = new DstBuilder()
+            .setDstChoice(nxRegCaseBld.build())
+            .setStart(0)
+            .setEnd(5);
+        NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder();
+        nxRegLoadBuilder.setDst(dstBld.build());
+        nxRegLoadBuilder.setValue(BigInteger.valueOf(55L));
+        NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder topNxActionCaseBld =
+                new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder();
+        topNxActionCaseBld.setNxRegLoad(nxRegLoadBuilder.build());
+
+        // base part
+        ActionBuilder abExt = new ActionBuilder();
+        abExt.withKey(new ActionKey(actionKeyVal));
+        abExt.setAction(topNxActionCaseBld.build());
+        return abExt;
+    }
+}