Fix warnings in sample-bundles
[openflowplugin.git] / samples / sample-bundles / src / main / java / org / opendaylight / openflowplugin / samples / sample / bundles / SampleFlowCapableNodeListener.java
index b81f3ef005e15786ad778dfcd9809913bcd4502c..b90d2e14fe5ec9caac3af9d1fc28f09f409d51ec 100644 (file)
@@ -7,22 +7,22 @@
  */
 package org.opendaylight.openflowplugin.samples.sample.bundles;
 
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
-import javax.annotation.Nonnull;
-import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.binding.api.RpcService;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 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.GroupActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
@@ -30,20 +30,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
-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.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 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.group.types.rev131018.BucketId;
@@ -51,10 +48,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
 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;
@@ -62,14 +57,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherTyp
 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.Ipv4MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.AddBundleMessagesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.AddBundleMessages;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.AddBundleMessagesInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.AddBundleMessagesOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.ControlBundleInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.ControlBundle;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.ControlBundleInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.ControlBundleOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.SalBundleService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.Messages;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.MessagesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.messages.Message;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.bundle.service.rev170124.add.bundle.messages.input.messages.MessageBuilder;
@@ -80,130 +71,137 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.on
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleControlType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.onf.rev170124.BundleId;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Sample DataTreeChangeListener.
  */
-public class SampleFlowCapableNodeListener implements ClusteredDataTreeChangeListener<FlowCapableNode>, AutoCloseable {
-
+@Singleton
+@Component(service = { })
+public final class SampleFlowCapableNodeListener implements DataTreeChangeListener<FlowCapableNode>, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(SampleFlowCapableNodeListener.class);
 
-    private static final BundleId BUNDLE_ID = new BundleId(1L);
+    private static final BundleId BUNDLE_ID = new BundleId(Uint32.ONE);
     private static final BundleFlags BUNDLE_FLAGS = new BundleFlags(true, true);
     private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor();
 
-    private final DataBroker dataBroker;
-    private final SalBundleService bundleService;
-    private ListenerRegistration<?> listenerReg;
-
-    public SampleFlowCapableNodeListener(DataBroker dataBroker, SalBundleService bundleService) {
-        this.dataBroker = dataBroker;
-        this.bundleService = bundleService;
-    }
+    private final ControlBundle controlBundle;
+    private final AddBundleMessages addBundleMessages;
+    private final Registration listenerReg;
 
-    @Override
-    public void close() {
-        LOG.debug("close() passing");
-        if (listenerReg != null) {
-            listenerReg.close();
-        }
-    }
-
-    public void init() {
+    @Inject
+    @Activate
+    public SampleFlowCapableNodeListener(@Reference final DataBroker dataBroker,
+            @Reference final RpcService rpcService) {
+        controlBundle = rpcService.getRpc(ControlBundle.class);
+        addBundleMessages = rpcService.getRpc(AddBundleMessages.class);
         LOG.debug("inSessionInitialized() passing");
 
         final InstanceIdentifier<FlowCapableNode> path = InstanceIdentifier.create(Nodes.class).child(Node.class)
                 .augmentation(FlowCapableNode.class);
         final DataTreeIdentifier<FlowCapableNode> identifier =
-                new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, path);
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path);
+
+        listenerReg = dataBroker.registerTreeChangeListener(identifier, SampleFlowCapableNodeListener.this);
+    }
 
-        listenerReg = dataBroker.registerDataTreeChangeListener(identifier, SampleFlowCapableNodeListener.this);
+    @PreDestroy
+    @Deactivate
+    @Override
+    public void close() {
+        LOG.debug("close() passing");
+        listenerReg.close();
     }
 
     @Override
-    public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<FlowCapableNode>> modifications) {
-        for (DataTreeModification<FlowCapableNode> modification : modifications) {
-            if (modification.getRootNode().getModificationType() == ModificationType.WRITE) {
-                LOG.info("Node connected:  {}",
-                        modification.getRootPath().getRootIdentifier().firstIdentifierOf(Node.class));
+    public void onDataTreeChanged(final List<DataTreeModification<FlowCapableNode>> modifications) {
+        for (var modification : modifications) {
+            if (modification.getRootNode().modificationType() == ModificationType.WRITE) {
+                final var nodePath = modification.getRootPath().path().firstIdentifierOf(Node.class);
+                LOG.info("Node connected:  {}", nodePath);
 
-                final NodeRef nodeRef =
-                        new NodeRef(modification.getRootPath().getRootIdentifier().firstIdentifierOf(Node.class));
+                final var nodeRef = new NodeRef(nodePath);
 
-                final ControlBundleInput openBundleInput = new ControlBundleInputBuilder()
+                final var openBundleInput = new ControlBundleInputBuilder()
                         .setNode(nodeRef)
                         .setBundleId(BUNDLE_ID)
                         .setFlags(BUNDLE_FLAGS)
                         .setType(BundleControlType.ONFBCTOPENREQUEST)
                         .build();
 
-                final ControlBundleInput commitBundleInput = new ControlBundleInputBuilder()
+                final var commitBundleInput = new ControlBundleInputBuilder()
                         .setNode(nodeRef)
                         .setBundleId(BUNDLE_ID)
                         .setFlags(BUNDLE_FLAGS)
                         .setType(BundleControlType.ONFBCTCOMMITREQUEST)
                         .build();
 
-                final List<Message> innerMessages = createMessages(nodeRef);
-                final Messages messages = new MessagesBuilder().setMessage(innerMessages).build();
-                final AddBundleMessagesInput addBundleMessagesInput = new AddBundleMessagesInputBuilder()
+                final var innerMessages = createMessages(nodeRef);
+                final var messages = new MessagesBuilder().setMessage(innerMessages).build();
+                final var addBundleMessagesInput = new AddBundleMessagesInputBuilder()
                         .setNode(nodeRef)
                         .setBundleId(BUNDLE_ID)
                         .setFlags(BUNDLE_FLAGS)
                         .setMessages(messages)
                         .build();
 
-                makeCompletableFuture(bundleService.controlBundle(openBundleInput))
+                makeCompletableFuture(controlBundle.invoke(openBundleInput))
                     .thenComposeAsync(voidRpcResult -> {
                         LOG.debug("Open successful: {}, msg: {}", voidRpcResult.isSuccessful(),
                                 voidRpcResult.getErrors());
-
-                        final CompletableFuture<RpcResult<AddBundleMessagesOutput>> addFuture =
-                                makeCompletableFuture(bundleService.addBundleMessages(addBundleMessagesInput));
-
-                        return addFuture;
+                        return makeCompletableFuture(addBundleMessages.invoke(addBundleMessagesInput));
                     }).thenComposeAsync(voidRpcResult -> {
                         LOG.debug("AddBundleMessages successful: {}, msg: {}", voidRpcResult.isSuccessful(),
                                 voidRpcResult.getErrors());
-
-                        final CompletableFuture<RpcResult<ControlBundleOutput>> controlCommitFuture =
-                                makeCompletableFuture(bundleService.controlBundle(commitBundleInput));
-
-                        return controlCommitFuture;
+                        return makeCompletableFuture(controlBundle.invoke(commitBundleInput));
                     }).thenAccept(voidRpcResult -> LOG.debug("Commit successful: {}, msg: {}",
                         voidRpcResult.isSuccessful(), voidRpcResult.getErrors()));
             }
         }
     }
 
-    private static <T> CompletableFuture<T> makeCompletableFuture(Future<T> future) {
+    private static <T> CompletableFuture<T> makeCompletableFuture(final Future<T> future) {
         return CompletableFuture.supplyAsync(() -> {
             try {
                 return future.get();
             } catch (InterruptedException | ExecutionException e) {
-                throw new RuntimeException(e);
+                throw new IllegalStateException(e);
             }
         }, EXECUTOR);
     }
 
-    private static List<Message> createMessages(NodeRef nodeRef) {
-        List<Message> messages  = new ArrayList<>();
-
-
-        messages.add(new MessageBuilder().setNode(nodeRef).setBundleInnerMessage(new BundleAddGroupCaseBuilder()
-            .setAddGroupCaseData(new AddGroupCaseDataBuilder(createGroup(1L)).build()).build()).build());
-
-        messages.add(new MessageBuilder().setNode(nodeRef).setBundleInnerMessage(new BundleAddFlowCaseBuilder()
-                .setAddFlowCaseData(new AddFlowCaseDataBuilder(createFlow("42", 1L, 1, (short) 1)).build()).build())
-                .build());
-
-        messages.add(new MessageBuilder().setNode(nodeRef).setBundleInnerMessage(new BundleAddFlowCaseBuilder()
-                .setAddFlowCaseData(new AddFlowCaseDataBuilder(createFlow("43", 1L, 2, (short) 2)).build()).build())
+    private static List<Message> createMessages(final NodeRef nodeRef) {
+        final var messages = List.of(
+            new MessageBuilder()
+                .setNode(nodeRef)
+                .setBundleInnerMessage(new BundleAddGroupCaseBuilder()
+                    .setAddGroupCaseData(new AddGroupCaseDataBuilder(createGroup(Uint32.ONE)).build()).build())
+                .build(),
+            new MessageBuilder()
+                .setNode(nodeRef)
+                .setBundleInnerMessage(new BundleAddFlowCaseBuilder()
+                    .setAddFlowCaseData(
+                        new AddFlowCaseDataBuilder(createFlow("42", Uint32.ONE, Uint16.ONE, Uint8.ONE)).build())
+                    .build())
+                .build(),
+            new MessageBuilder()
+                .setNode(nodeRef)
+                .setBundleInnerMessage(new BundleAddFlowCaseBuilder()
+                    .setAddFlowCaseData(
+                        new AddFlowCaseDataBuilder(createFlow("43", Uint32.ONE, Uint16.TWO, Uint8.TWO)).build())
+                    .build())
                 .build());
 
         LOG.debug("createMessages() passing {}", messages);
@@ -211,124 +209,87 @@ public class SampleFlowCapableNodeListener implements ClusteredDataTreeChangeLis
         return messages;
     }
 
-    private static Flow createFlow(String flowId, long groupId, int priority, short tableId) {
-        MatchBuilder matchBuilder = new MatchBuilder();
-        matchBuilder.setEthernetMatch(new EthernetMatchBuilder()
-                .setEthernetType(new EthernetTypeBuilder()
-                        .setType(new EtherType(2048L)).build()).build());
-
-        FlowBuilder flowBuilder = new FlowBuilder();
-        flowBuilder.setMatch(matchBuilder.build());
-        flowBuilder.setInstructions(createGroupInstructions(groupId).build());
-        flowBuilder.setPriority(priority);
-        flowBuilder.setCookie(new FlowCookie(new BigInteger(flowId + "" + priority)));
-
-        FlowKey key = new FlowKey(new FlowId(flowId));
-        flowBuilder.setHardTimeout(0);
-        flowBuilder.setIdleTimeout(0);
-        flowBuilder.setStrict(false);
-        flowBuilder.setContainerName(null);
-        flowBuilder.setId(new FlowId(flowId));
-        flowBuilder.setTableId(tableId);
-        flowBuilder.withKey(key);
-        flowBuilder.setFlowName("FlowWithGroupInstruction");
-
-        return flowBuilder.build();
+    private static Flow createFlow(final String flowId, final Uint32 groupId, final Uint16 priority,
+            final Uint8 tableId) {
+        return new FlowBuilder()
+            .setId(new FlowId(flowId))
+            .setTableId(tableId)
+            .setMatch(new MatchBuilder()
+                .setEthernetMatch(new EthernetMatchBuilder()
+                    .setEthernetType(new EthernetTypeBuilder()
+                        .setType(new EtherType(Uint32.valueOf(2048)))
+                        .build())
+                    .build())
+                .build())
+            .setInstructions(createGroupInstructions(groupId).build())
+            .setPriority(priority)
+            .setCookie(new FlowCookie(Uint64.valueOf(flowId + "" + priority)))
+            .setHardTimeout(Uint16.ZERO)
+            .setIdleTimeout(Uint16.ZERO)
+            .setStrict(false)
+            .setContainerName(null)
+            .setFlowName("FlowWithGroupInstruction")
+            .build();
     }
 
-    private static Group createGroup(long groupId) {
-        GroupBuilder groupBuilder = new GroupBuilder();
-        GroupKey groupKey = new GroupKey(new GroupId(groupId));
-        groupBuilder.withKey(groupKey);
-        groupBuilder.setGroupId(groupKey.getGroupId());
-        groupBuilder.setBarrier(false);
-        groupBuilder.setGroupName("Foo");
-        groupBuilder.setContainerName(null);
-        groupBuilder.setGroupType(GroupTypes.GroupAll);
-        groupBuilder.setBuckets(createBuckets().build());
-
-        return groupBuilder.build();
+    private static Group createGroup(final Uint32 groupId) {
+        return new GroupBuilder()
+            .setGroupId(new GroupId(groupId))
+            .setBarrier(false)
+            .setGroupName("Foo")
+            .setContainerName(null)
+            .setGroupType(GroupTypes.GroupAll)
+            .setBuckets(createBuckets().build())
+            .build();
     }
 
     private static BucketsBuilder createBuckets() {
-        List<Action> actionList = new ArrayList<>();
-
-        actionList.add(new ActionBuilder()
-                .setOrder(0)
-                .setAction(new PopVlanActionCaseBuilder()
+        return new BucketsBuilder()
+            .setBucket(BindingMap.ordered(new BucketBuilder()
+                .setBucketId(new BucketId(Uint32.valueOf(12)))
+                .setAction(BindingMap.of(new ActionBuilder()
+                    .setOrder(0)
+                    .setAction(new PopVlanActionCaseBuilder()
                         .setPopVlanAction(new PopVlanActionBuilder().build())
-                        .build()).build());
-
-        BucketBuilder bucketBuilder = new BucketBuilder();
-        bucketBuilder.setBucketId(new BucketId(12L));
-        bucketBuilder.setAction(actionList);
-
-        List<Bucket> bucketList = new ArrayList<>();
-        bucketList.add(bucketBuilder.build());
-
-        actionList = new ArrayList<>();
-        SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
-        setFieldCaseBuilder.setSetField(new SetFieldBuilder()
-                .setLayer3Match(new Ipv4MatchBuilder()
-                        .setIpv4Source(new Ipv4Prefix("10.0.1.0/32"))
                         .build())
-                .build());
-
-        actionList.add(new ActionBuilder()
-                .setAction(setFieldCaseBuilder.build())
-                .setOrder(0)
-                .build());
-
-        setFieldCaseBuilder = new SetFieldCaseBuilder();
-        setFieldCaseBuilder.setSetField(new SetFieldBuilder()
-                .setLayer3Match(new Ipv4MatchBuilder()
-                        .setIpv4Destination(new Ipv4Prefix("10.0.10.0/32"))
+                    .build()))
+                .build(), new BucketBuilder()
+                .setBucketId(new BucketId(Uint32.valueOf(13)))
+                .setAction(BindingMap.of(new ActionBuilder()
+                    .setAction(new SetFieldCaseBuilder()
+                        .setSetField(new SetFieldBuilder()
+                            .setLayer3Match(new Ipv4MatchBuilder().setIpv4Source(new Ipv4Prefix("10.0.1.0/32")).build())
+                            .build())
                         .build())
-                .build());
-
-        actionList.add(new ActionBuilder()
-                .setAction(setFieldCaseBuilder.build())
-                .setOrder(0)
-                .build());
-
-        bucketBuilder = new BucketBuilder();
-        bucketBuilder.setBucketId(new BucketId(13L));
-        bucketBuilder.setAction(actionList);
-
-        bucketList.add(bucketBuilder.build());
-
-        BucketsBuilder bucketsBuilder = new BucketsBuilder();
-        bucketsBuilder.setBucket(bucketList);
-
-        return bucketsBuilder;
+                    .setOrder(0)
+                    .build(), new ActionBuilder()
+                    .setOrder(0)
+                    .setAction(new SetFieldCaseBuilder()
+                        .setSetField(new SetFieldBuilder()
+                            .setLayer3Match(new Ipv4MatchBuilder()
+                                .setIpv4Destination(new Ipv4Prefix("10.0.10.0/32"))
+                                .build())
+                            .build())
+                        .build())
+                    .build()))
+                .build()));
     }
 
-    private static InstructionsBuilder createGroupInstructions(long groupId) {
-        ActionBuilder actionBuilder = new ActionBuilder();
-
-        GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
-        groupActionBuilder.setGroupId(groupId);
-
-        actionBuilder.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionBuilder.build()).build());
-        actionBuilder.setOrder(1);
-        actionBuilder.withKey(new ActionKey(0));
-        List<Action> actionList = new ArrayList<>();
-        actionList.add(actionBuilder.build());
-
-        ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
-        applyActionsBuilder.setAction(actionList);
-
-        InstructionBuilder instructionBuilder = new InstructionBuilder();
-        instructionBuilder.setInstruction(new ApplyActionsCaseBuilder()
-                .setApplyActions(applyActionsBuilder.build()).build());
-        instructionBuilder.setOrder(0);
-        instructionBuilder.withKey(new InstructionKey(0));
-
-        InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
-        List<Instruction> instructions = new ArrayList<>();
-        instructions.add(instructionBuilder.build());
-        instructionsBuilder.setInstruction(instructions);
-
-        return instructionsBuilder;
+    private static InstructionsBuilder createGroupInstructions(final Uint32 groupId) {
+        return new InstructionsBuilder()
+            .setInstruction(BindingMap.of(new InstructionBuilder()
+                .setInstruction(new ApplyActionsCaseBuilder()
+                    .setApplyActions(new ApplyActionsBuilder()
+                        .setAction(BindingMap.of(new ActionBuilder()
+                            .setAction(new GroupActionCaseBuilder()
+                                .setGroupAction(new GroupActionBuilder().setGroupId(groupId).build())
+                                .build())
+                            .setOrder(1)
+                            .withKey(new ActionKey(0))
+                            .build()))
+                        .build())
+                    .build())
+                .withKey(new InstructionKey(0))
+                .build()));
     }
 }