Add AbstractActionCaseDeserializer 11/94411/6
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 5 Jan 2021 13:01:37 +0000 (14:01 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 5 Jan 2021 17:00:52 +0000 (18:00 +0100)
Most implementations of AbstractActionDeserializer result in an
Action, which we can pull down into the abstract class, reducing
the amount of duplicate code.

This makes the dispatch a bit more friendly, as the there are
fewer implementations of the actual entry point.

Change-Id: I610a8412dedc15ee9a22e4d1d26c498c2d9f3ba3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
26 files changed:
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractActionCaseDeserializer.java [new file with mode: 0644]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractEtherTypeActionDeserializer.java [new file with mode: 0644]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetDlActionDeserializer.java [new file with mode: 0644]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetNwActionDeserializer.java [new file with mode: 0644]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetTpActionDeserializer.java [new file with mode: 0644]
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10EnqueueActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10OutputActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetDlDstActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetDlSrcActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetNwDstActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetNwSrcActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetNwTosActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetTpDstActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetTpSrcActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetVlanPcpActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF10SetVlanVidActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13GroupActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13OutputActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13PopMplsActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13PushMplsActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13PushPbbActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13PushVlanActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13SetFieldActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13SetMplsTtlActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13SetNwTtlActionDeserializer.java
openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/OF13SetQueueActionDeserializer.java

diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractActionCaseDeserializer.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractActionCaseDeserializer.java
new file mode 100644 (file)
index 0000000..05951a0
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.deserialization.action;
+
+import com.google.common.annotations.Beta;
+import io.netty.buffer.ByteBuf;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
+
+@Beta
+public abstract class AbstractActionCaseDeserializer<T extends ActionChoice> extends AbstractActionDeserializer<T> {
+    protected AbstractActionCaseDeserializer(final @NonNull T emptyChoice) {
+        super(emptyChoice);
+    }
+
+    @Override
+    public final Action deserialize(final ByteBuf input) {
+        return new ActionBuilder().setActionChoice(deserializeAction(input)).build();
+    }
+
+    protected abstract @NonNull T deserializeAction(@NonNull ByteBuf input);
+}
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractEtherTypeActionDeserializer.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractEtherTypeActionDeserializer.java
new file mode 100644 (file)
index 0000000..d2c4136
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.deserialization.action;
+
+import io.netty.buffer.ByteBuf;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
+import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
+
+abstract class AbstractEtherTypeActionDeserializer<T extends ActionChoice> extends AbstractActionCaseDeserializer<T> {
+    AbstractEtherTypeActionDeserializer(final @NonNull T emptyChoice) {
+        super(emptyChoice);
+    }
+
+    @Override
+    protected final T deserializeAction(final ByteBuf input) {
+        input.skipBytes(2 * Short.BYTES);
+        final EtherType etherType = new EtherType(ByteBufUtils.readUint16(input));
+        input.skipBytes(ActionConstants.ETHERTYPE_ACTION_PADDING);
+
+        return createAction(etherType);
+    }
+
+    abstract @NonNull T createAction(@NonNull EtherType etherType);
+}
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetDlActionDeserializer.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetDlActionDeserializer.java
new file mode 100644 (file)
index 0000000..715d41f
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.deserialization.action;
+
+import io.netty.buffer.ByteBuf;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
+import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
+
+abstract class AbstractOF10SetDlActionDeserializer<T extends ActionChoice> extends AbstractActionCaseDeserializer<T> {
+    AbstractOF10SetDlActionDeserializer(final @NonNull T emptyChoice) {
+        super(emptyChoice);
+    }
+
+    @Override
+    protected final T deserializeAction(final ByteBuf input) {
+        input.skipBytes(2 * Short.BYTES);
+        final MacAddress macAddress = ByteBufUtils.readIetfMacAddress(input);
+        input.skipBytes(ActionConstants.PADDING_IN_DL_ADDRESS_ACTION);
+
+        return createAction(macAddress);
+    }
+
+    abstract @NonNull T createAction(@NonNull MacAddress macAddress);
+}
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetNwActionDeserializer.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetNwActionDeserializer.java
new file mode 100644 (file)
index 0000000..0f602c8
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.deserialization.action;
+
+import io.netty.buffer.ByteBuf;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
+
+abstract class AbstractOF10SetNwActionDeserializer<T extends ActionChoice> extends AbstractActionCaseDeserializer<T> {
+    AbstractOF10SetNwActionDeserializer(final @NonNull T emptyChoice) {
+        super(emptyChoice);
+    }
+
+    @Override
+    protected final T deserializeAction(final ByteBuf input) {
+        input.skipBytes(2 * Short.BYTES);
+
+        return createAction(ByteBufUtils.readIetfIpv4Address(input));
+    }
+
+    abstract @NonNull T createAction(@NonNull Ipv4Address ipAddress);
+}
diff --git a/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetTpActionDeserializer.java b/openflowjava/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/action/AbstractOF10SetTpActionDeserializer.java
new file mode 100644 (file)
index 0000000..763998a
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.openflowjava.protocol.impl.deserialization.action;
+
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+
+import io.netty.buffer.ByteBuf;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.ActionChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+
+abstract class AbstractOF10SetTpActionDeserializer<T extends ActionChoice> extends AbstractActionCaseDeserializer<T> {
+    AbstractOF10SetTpActionDeserializer(final @NonNull T emptyChoice) {
+        super(emptyChoice);
+    }
+
+    @Override
+    protected final T deserializeAction(final ByteBuf input) {
+        input.skipBytes(2 * Short.BYTES);
+        final PortNumber port = new PortNumber(readUint16(input).toUint32());
+        input.skipBytes(ActionConstants.PADDING_IN_TP_PORT_ACTION);
+
+        return createAction(port);
+    }
+
+    abstract @NonNull T createAction(@NonNull PortNumber port);
+}
index cb9c5a26eb04ff796c9316a0b3253f7f14fc4504..c915b7f77058024dc07285b9fe819ed2321c7a88 100644 (file)
@@ -35,12 +35,14 @@ public class OF10EnqueueActionDeserializer extends AbstractActionDeserializer<Ou
     @Override
     public Action deserialize(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        EnqueueActionBuilder actionBuilder = new EnqueueActionBuilder();
-        actionBuilder.setPort(new PortNumber(readUint16(input).toUint32()));
+        final var port = new PortNumber(readUint16(input).toUint32());
         input.skipBytes(ActionConstants.PADDING_IN_ENQUEUE_ACTION);
-        actionBuilder.setQueueId(new QueueId(readUint32(input)));
+        final var queueId = new QueueId(readUint32(input));
+
         return new ActionBuilder()
-                .setActionChoice(new EnqueueCaseBuilder().setEnqueueAction(actionBuilder.build()).build())
+                .setActionChoice(new EnqueueCaseBuilder()
+                    .setEnqueueAction(new EnqueueActionBuilder().setPort(port).setQueueId(queueId).build())
+                    .build())
                 .build();
     }
 }
index 0370d2af74aa29996846235a96062c339d9c1a1e..631b2f0b4c9c8a368bc52c822614b1a5455e7b60 100644 (file)
@@ -13,8 +13,6 @@ import io.netty.buffer.ByteBuf;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 
 /**
@@ -22,21 +20,20 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
  *
  * @author michal.polkorab
  */
-public class OF10OutputActionDeserializer extends AbstractActionDeserializer<OutputActionCase> {
+public final class OF10OutputActionDeserializer extends AbstractActionCaseDeserializer<OutputActionCase> {
     public OF10OutputActionDeserializer() {
         super(new OutputActionCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
+    protected OutputActionCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        OutputActionCaseBuilder caseBuilder = new OutputActionCaseBuilder();
-        OutputActionBuilder actionBuilder = new OutputActionBuilder();
-        actionBuilder.setPort(new PortNumber(readUint16(input).toUint32()));
-        actionBuilder.setMaxLength(readUint16(input));
-        caseBuilder.setOutputAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        return builder.build();
+
+        return new OutputActionCaseBuilder()
+            .setOutputAction(new OutputActionBuilder()
+                .setPort(new PortNumber(readUint16(input).toUint32()))
+                .setMaxLength(readUint16(input))
+                .build())
+            .build();
     }
 }
index 3967376ed018b7f92464b8d207747edcffb5a62c..e98c47dc1d5ea5682ff1cca58b45d786b3030737 100644 (file)
@@ -7,35 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlDstCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlDstCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.dl.dst._case.SetDlDstActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetDlDstActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetDlDstActionDeserializer extends AbstractActionDeserializer<SetDlDstCase> {
+public final class OF10SetDlDstActionDeserializer extends AbstractOF10SetDlActionDeserializer<SetDlDstCase> {
     public OF10SetDlDstActionDeserializer() {
         super(new SetDlDstCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetDlDstCaseBuilder caseBuilder = new SetDlDstCaseBuilder();
-        SetDlDstActionBuilder actionBuilder = new SetDlDstActionBuilder();
-        actionBuilder.setDlDstAddress(ByteBufUtils.readIetfMacAddress(input));
-        caseBuilder.setSetDlDstAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        input.skipBytes(ActionConstants.PADDING_IN_DL_ADDRESS_ACTION);
-        return builder.build();
+    SetDlDstCase createAction(final MacAddress macAddress) {
+        return new SetDlDstCaseBuilder()
+            .setSetDlDstAction(new SetDlDstActionBuilder().setDlDstAddress(macAddress).build())
+            .build();
     }
 }
index 4963ebf96fb45f4d9093960a1c29fde67f664689..a534ceb0d7a1fa88a9c9aaa95ba2537228fdb15b 100644 (file)
@@ -7,35 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlSrcCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlSrcCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.dl.src._case.SetDlSrcActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetDlSrcActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetDlSrcActionDeserializer extends AbstractActionDeserializer<SetDlSrcCase> {
+public final class OF10SetDlSrcActionDeserializer extends AbstractOF10SetDlActionDeserializer<SetDlSrcCase> {
     public OF10SetDlSrcActionDeserializer() {
         super(new SetDlSrcCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetDlSrcCaseBuilder caseBuilder = new SetDlSrcCaseBuilder();
-        SetDlSrcActionBuilder actionBuilder = new SetDlSrcActionBuilder();
-        actionBuilder.setDlSrcAddress(ByteBufUtils.readIetfMacAddress(input));
-        caseBuilder.setSetDlSrcAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        input.skipBytes(ActionConstants.PADDING_IN_DL_ADDRESS_ACTION);
-        return builder.build();
+    SetDlSrcCase createAction(final MacAddress macAddress) {
+        return new SetDlSrcCaseBuilder()
+            .setSetDlSrcAction(new SetDlSrcActionBuilder().setDlSrcAddress(macAddress).build())
+            .build();
     }
 }
index a7a0424c9f7b988928bddfcc93288032627fa0f0..855a046df5ed686e065cffefd02d17903f94eef8 100644 (file)
@@ -7,33 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.dst._case.SetNwDstActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetNwDstActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetNwDstActionDeserializer extends AbstractActionDeserializer<SetNwDstCase> {
+public final class OF10SetNwDstActionDeserializer extends AbstractOF10SetNwActionDeserializer<SetNwDstCase> {
     public OF10SetNwDstActionDeserializer() {
         super(new SetNwDstCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetNwDstCaseBuilder caseBuilder = new SetNwDstCaseBuilder();
-        SetNwDstActionBuilder actionBuilder = new SetNwDstActionBuilder();
-        actionBuilder.setIpAddress(ByteBufUtils.readIetfIpv4Address(input));
-        caseBuilder.setSetNwDstAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        return builder.build();
+    SetNwDstCase createAction(final Ipv4Address ipAddress) {
+        return new SetNwDstCaseBuilder()
+            .setSetNwDstAction(new SetNwDstActionBuilder().setIpAddress(ipAddress).build())
+            .build();
     }
 }
index bc3c1657717524da96339d35fc428be59aa062dc..3fb1e5ce25f8625e60f896bcb70e87fc90dfb1db 100644 (file)
@@ -7,33 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.util.ByteBufUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.src._case.SetNwSrcActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetNwSrcActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetNwSrcActionDeserializer extends AbstractActionDeserializer<SetNwSrcCase> {
+public final class OF10SetNwSrcActionDeserializer extends AbstractOF10SetNwActionDeserializer<SetNwSrcCase> {
     public OF10SetNwSrcActionDeserializer() {
         super(new SetNwSrcCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetNwSrcCaseBuilder caseBuilder = new SetNwSrcCaseBuilder();
-        SetNwSrcActionBuilder actionBuilder = new SetNwSrcActionBuilder();
-        actionBuilder.setIpAddress(ByteBufUtils.readIetfIpv4Address(input));
-        caseBuilder.setSetNwSrcAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        return builder.build();
+    SetNwSrcCase createAction(final Ipv4Address ipAddress) {
+        return new SetNwSrcCaseBuilder()
+            .setSetNwSrcAction(new SetNwSrcActionBuilder().setIpAddress(ipAddress).build())
+            .build();
     }
 }
index 9f06fe254f5d002e795fe0124e06a4e0a2415dac..486ac4841e8582d42ce29412cb420b4d085b8e1d 100644 (file)
@@ -14,29 +14,23 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTosCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTosCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.tos._case.SetNwTosActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetNwTosActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetNwTosActionDeserializer extends AbstractActionDeserializer<SetNwTosCase> {
+public class OF10SetNwTosActionDeserializer extends AbstractActionCaseDeserializer<SetNwTosCase> {
     public OF10SetNwTosActionDeserializer() {
         super(new SetNwTosCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
+    protected SetNwTosCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        SetNwTosCaseBuilder caseBuilder = new SetNwTosCaseBuilder();
-        SetNwTosActionBuilder tosBuilder = new SetNwTosActionBuilder();
-        tosBuilder.setNwTos(readUint8(input));
-        caseBuilder.setSetNwTosAction(tosBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
+        final var nwTos = readUint8(input);
         input.skipBytes(ActionConstants.PADDING_IN_SET_NW_TOS_ACTION);
-        return builder.build();
+
+        return new SetNwTosCaseBuilder().setSetNwTosAction(new SetNwTosActionBuilder().setNwTos(nwTos).build()).build();
     }
 }
index 1df635e773cd59939cc4c36ac0235ecb8c9bdf11..476b6b234a88c85e189ec3f5e728e48971290a8a 100644 (file)
@@ -7,15 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
-
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpDstCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpDstCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.tp.dst._case.SetTpDstActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 
 /**
@@ -23,21 +17,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
  *
  * @author michal.polkorab
  */
-public class OF10SetTpDstActionDeserializer extends AbstractActionDeserializer<SetTpDstCase> {
+public final class OF10SetTpDstActionDeserializer extends AbstractOF10SetTpActionDeserializer<SetTpDstCase> {
     public OF10SetTpDstActionDeserializer() {
         super(new SetTpDstCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetTpDstCaseBuilder caseBuilder = new SetTpDstCaseBuilder();
-        SetTpDstActionBuilder actionBuilder = new SetTpDstActionBuilder();
-        actionBuilder.setPort(new PortNumber(readUint16(input).toUint32()));
-        caseBuilder.setSetTpDstAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        input.skipBytes(ActionConstants.PADDING_IN_TP_PORT_ACTION);
-        return builder.build();
+    SetTpDstCase createAction(final PortNumber port) {
+        return new SetTpDstCaseBuilder().setSetTpDstAction(new SetTpDstActionBuilder().setPort(port).build()).build();
     }
 }
index ec0e8c149c50d916d80fa6849cdcbc9e7f4e7d67..fea3f3bc3cb20b8fb738d005a6e7812d9b71e643 100644 (file)
@@ -7,15 +7,9 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
-
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpSrcCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpSrcCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.tp.src._case.SetTpSrcActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 
 /**
@@ -23,21 +17,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
  *
  * @author michal.polkorab
  */
-public class OF10SetTpSrcActionDeserializer extends AbstractActionDeserializer<SetTpSrcCase> {
+public final class OF10SetTpSrcActionDeserializer extends AbstractOF10SetTpActionDeserializer<SetTpSrcCase> {
     public OF10SetTpSrcActionDeserializer() {
         super(new SetTpSrcCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        SetTpSrcCaseBuilder caseBuilder = new SetTpSrcCaseBuilder();
-        SetTpSrcActionBuilder actionBuilder = new SetTpSrcActionBuilder();
-        actionBuilder.setPort(new PortNumber(readUint16(input).toUint32()));
-        caseBuilder.setSetTpSrcAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        input.skipBytes(ActionConstants.PADDING_IN_TP_PORT_ACTION);
-        return builder.build();
+    SetTpSrcCase createAction(final PortNumber port) {
+        return new SetTpSrcCaseBuilder().setSetTpSrcAction(new SetTpSrcActionBuilder().setPort(port).build()).build();
     }
 }
index e67b95e430d580c8fd2f804822f75ed040e1995b..d34f665626a6e5b5d00368a6e8e665c75a420f38 100644 (file)
@@ -14,29 +14,25 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanPcpCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanPcpCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.vlan.pcp._case.SetVlanPcpActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetVlanPcpActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetVlanPcpActionDeserializer extends AbstractActionDeserializer<SetVlanPcpCase> {
+public final class OF10SetVlanPcpActionDeserializer extends AbstractActionCaseDeserializer<SetVlanPcpCase> {
     public OF10SetVlanPcpActionDeserializer() {
         super(new SetVlanPcpCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
+    protected SetVlanPcpCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        SetVlanPcpCaseBuilder caseBuilder = new SetVlanPcpCaseBuilder();
-        SetVlanPcpActionBuilder actionBuilder = new SetVlanPcpActionBuilder();
-        actionBuilder.setVlanPcp(readUint8(input));
-        caseBuilder.setSetVlanPcpAction(actionBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
+        final var vlanPcp = readUint8(input);
         input.skipBytes(ActionConstants.PADDING_IN_SET_VLAN_PCP_ACTION);
-        return builder.build();
+
+        return new SetVlanPcpCaseBuilder()
+            .setSetVlanPcpAction(new SetVlanPcpActionBuilder().setVlanPcp(vlanPcp).build())
+            .build();
     }
 }
index 37aeecb9d0a9fa0ea40cf118dff0ce55a0bd1082..801955cddd1bf6c7b1f73a7b0dd479a36969ccd3 100644 (file)
@@ -14,27 +14,25 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanVidCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanVidCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.vlan.vid._case.SetVlanVidActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF10SetVlanVidActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF10SetVlanVidActionDeserializer extends AbstractActionDeserializer<SetVlanVidCase> {
+public final class OF10SetVlanVidActionDeserializer extends AbstractActionCaseDeserializer<SetVlanVidCase> {
     public OF10SetVlanVidActionDeserializer() {
         super(new SetVlanVidCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected SetVlanVidCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        final ActionBuilder builder = new ActionBuilder()
-                .setActionChoice(new SetVlanVidCaseBuilder()
-                    .setSetVlanVidAction(new SetVlanVidActionBuilder().setVlanVid(readUint16(input)).build())
-                    .build());
+        final var vlanVid = readUint16(input);
         input.skipBytes(ActionConstants.PADDING_IN_SET_VLAN_VID_ACTION);
-        return builder.build();
+
+        return new SetVlanVidCaseBuilder()
+            .setSetVlanVidAction(new SetVlanVidActionBuilder().setVlanVid(vlanVid).build())
+            .build();
     }
 }
index 1ac3954d26d0e76ebf1a4b9939e2e4c2efc3ee79..faa47e0ac8d57a06ff144e60cbc6941eadecce69 100644 (file)
@@ -13,26 +13,22 @@ import io.netty.buffer.ByteBuf;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.group._case.GroupActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF13GroupActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13GroupActionDeserializer extends AbstractActionDeserializer<GroupCase> {
+public class OF13GroupActionDeserializer extends AbstractActionCaseDeserializer<GroupCase> {
     public OF13GroupActionDeserializer() {
         super(new GroupCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected GroupCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
-        return new ActionBuilder()
-                .setActionChoice(new GroupCaseBuilder()
-                    .setGroupAction(new GroupActionBuilder().setGroupId(readUint32(input)).build())
-                    .build())
-                .build();
+        return new GroupCaseBuilder()
+            .setGroupAction(new GroupActionBuilder().setGroupId(readUint32(input)).build())
+            .build();
     }
 }
index 3132fb984d606f6e453bb56cbfda81a0c86e4463..e67d69206b4592cf70a13333e103d8b7dac2a20f 100644 (file)
@@ -15,8 +15,6 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
 
 /**
@@ -24,13 +22,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
  *
  * @author michal.polkorab
  */
-public class OF13OutputActionDeserializer extends AbstractActionDeserializer<OutputActionCase> {
+public class OF13OutputActionDeserializer extends AbstractActionCaseDeserializer<OutputActionCase> {
     public OF13OutputActionDeserializer() {
         super(new OutputActionCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected OutputActionCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
         final var action = new OutputActionBuilder()
             .setPort(new PortNumber(readUint32(input)))
@@ -38,8 +36,6 @@ public class OF13OutputActionDeserializer extends AbstractActionDeserializer<Out
             .build();
         input.skipBytes(ActionConstants.OUTPUT_PADDING);
 
-        return new ActionBuilder()
-            .setActionChoice(new OutputActionCaseBuilder().setOutputAction(action).build())
-            .build();
+        return new OutputActionCaseBuilder().setOutputAction(action).build();
     }
 }
index 9d5b464051a7184042d91534a60b46aa8b2543b2..f762ac49bfc8c96aca37a2d2d985c7f743ebaafd 100644 (file)
@@ -7,36 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.pop.mpls._case.PopMplsActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 /**
  * OF13PopMplsActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13PopMplsActionDeserializer extends AbstractActionDeserializer<PopMplsCase> {
+public final class OF13PopMplsActionDeserializer extends AbstractEtherTypeActionDeserializer<PopMplsCase> {
     public OF13PopMplsActionDeserializer() {
         super(new PopMplsCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        input.skipBytes(2 * Short.BYTES);
-        final ActionBuilder builder = new ActionBuilder()
-                .setActionChoice(new PopMplsCaseBuilder()
-                    .setPopMplsAction(new PopMplsActionBuilder()
-                        .setEthertype(new EtherType(ByteBufUtils.readUint16(input)))
-                        .build())
-                    .build());
-        input.skipBytes(ActionConstants.ETHERTYPE_ACTION_PADDING);
-        return builder.build();
+    PopMplsCase createAction(final EtherType etherType) {
+        return new PopMplsCaseBuilder()
+            .setPopMplsAction(new PopMplsActionBuilder().setEthertype(etherType).build())
+            .build();
     }
 }
index 0326f507c9c44510e5324347065e4794957d9e4b..0056345f6ce01a3b30f739949dd33820943c722a 100644 (file)
@@ -7,36 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.mpls._case.PushMplsActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 /**
  * OF13PushMplsActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13PushMplsActionDeserializer extends AbstractActionDeserializer<PushMplsCase> {
+public final class OF13PushMplsActionDeserializer extends AbstractEtherTypeActionDeserializer<PushMplsCase> {
     public OF13PushMplsActionDeserializer() {
         super(new PushMplsCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        final ActionBuilder builder = new ActionBuilder();
-        input.skipBytes(2 * Short.BYTES);
-        PushMplsCaseBuilder caseBuilder = new PushMplsCaseBuilder();
-        PushMplsActionBuilder mplsBuilder = new PushMplsActionBuilder();
-        mplsBuilder.setEthertype(new EtherType(ByteBufUtils.readUint16(input)));
-        caseBuilder.setPushMplsAction(mplsBuilder.build());
-        builder.setActionChoice(caseBuilder.build());
-        input.skipBytes(ActionConstants.ETHERTYPE_ACTION_PADDING);
-        return builder.build();
+    PushMplsCase createAction(final EtherType etherType) {
+        return new PushMplsCaseBuilder()
+            .setPushMplsAction(new PushMplsActionBuilder().setEthertype(etherType).build())
+            .build();
     }
 }
index 8c49074b6596f7933e5b01a40dd3677a772eee07..a2826148b84b9187062996022d358953c9cd9dc0 100644 (file)
@@ -7,36 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.pbb._case.PushPbbActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 /**
  * OF13PushPbbActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13PushPbbActionDeserializer extends AbstractActionDeserializer<PushPbbCase> {
+public final class OF13PushPbbActionDeserializer extends AbstractEtherTypeActionDeserializer<PushPbbCase> {
     public OF13PushPbbActionDeserializer() {
         super(new PushPbbCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        input.skipBytes(2 * Short.BYTES);
-        final ActionBuilder builder = new ActionBuilder()
-                .setActionChoice(new PushPbbCaseBuilder()
-                    .setPushPbbAction(new PushPbbActionBuilder()
-                        .setEthertype(new EtherType(ByteBufUtils.readUint16(input)))
-                        .build())
-                    .build());
-        input.skipBytes(ActionConstants.ETHERTYPE_ACTION_PADDING);
-        return builder.build();
+    PushPbbCase createAction(final EtherType etherType) {
+        return new PushPbbCaseBuilder()
+            .setPushPbbAction(new PushPbbActionBuilder().setEthertype(etherType).build())
+            .build();
     }
 }
index af81daa35424b97a1205d5c13dbbd192be420208..472f059f5ad04195939a28352ae34c38d6c5bb0c 100644 (file)
@@ -7,36 +7,25 @@
  */
 package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
-import io.netty.buffer.ByteBuf;
-import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.vlan._case.PushVlanActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
-import org.opendaylight.yangtools.yang.common.netty.ByteBufUtils;
 
 /**
  * OF13PushVlanActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13PushVlanActionDeserializer extends AbstractActionDeserializer<PushVlanCase> {
+public final class OF13PushVlanActionDeserializer extends AbstractEtherTypeActionDeserializer<PushVlanCase> {
     public OF13PushVlanActionDeserializer() {
         super(new PushVlanCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
-        input.skipBytes(2 * Short.BYTES);
-        final ActionBuilder builder = new ActionBuilder()
-                .setActionChoice(new PushVlanCaseBuilder()
-                    .setPushVlanAction(new PushVlanActionBuilder()
-                        .setEthertype(new EtherType(ByteBufUtils.readUint16(input)))
-                        .build())
-                    .build());
-        input.skipBytes(ActionConstants.ETHERTYPE_ACTION_PADDING);
-        return builder.build();
+    PushVlanCase createAction(final EtherType etherType) {
+        return new PushVlanCaseBuilder()
+            .setPushVlanAction(new PushVlanActionBuilder().setEthertype(etherType).build())
+            .build();
     }
 }
index aa798442902406a6c76b036b794205437290b0e1..d6d61bcd2089c3abe56aaa76707fbe8b088efcc3 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.action;
 
 import static java.util.Objects.requireNonNull;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.buffer.ByteBuf;
 import java.util.List;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
@@ -20,8 +19,6 @@ import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
 import org.opendaylight.yangtools.yang.common.Uint32;
 
@@ -30,17 +27,16 @@ import org.opendaylight.yangtools.yang.common.Uint32;
  *
  * @author michal.polkorab
  */
-public class OF13SetFieldActionDeserializer extends AbstractActionDeserializer<SetFieldCase>
+public class OF13SetFieldActionDeserializer extends AbstractActionCaseDeserializer<SetFieldCase>
         implements DeserializerRegistryInjector {
-    private DeserializerRegistry registry;
+    private DeserializerRegistry registry = null;
 
     public OF13SetFieldActionDeserializer() {
         super(new SetFieldCaseBuilder().build());
     }
 
     @Override
-    @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") // FB doesn't recognize Objects.requireNonNull
-    public Action deserialize(final ByteBuf input) {
+    public SetFieldCase deserializeAction(final ByteBuf input) {
         final int startIndex = input.readerIndex();
 
         input.skipBytes(2 * Short.BYTES);
@@ -62,15 +58,13 @@ public class OF13SetFieldActionDeserializer extends AbstractActionDeserializer<S
             input.skipBytes(EncodeConstants.PADDING - paddingRemainder);
         }
 
-        return new ActionBuilder()
-            .setActionChoice(new SetFieldCaseBuilder()
-                .setSetFieldAction(new SetFieldActionBuilder().setMatchEntry(List.of(entry)).build())
-                .build())
+        return new SetFieldCaseBuilder()
+            .setSetFieldAction(new SetFieldActionBuilder().setMatchEntry(List.of(entry)).build())
             .build();
     }
 
     @Override
     public void injectDeserializerRegistry(final DeserializerRegistry deserializerRegistry) {
-        this.registry = deserializerRegistry;
+        this.registry = requireNonNull(deserializerRegistry);
     }
 }
index ff477979cf17b8e6c3bb70fb123a5ff489bf204f..c57b6dbe8323ca3d762148db748c81c517325d64 100644 (file)
@@ -14,29 +14,25 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.mpls.ttl._case.SetMplsTtlActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF13SetMplsTtlActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13SetMplsTtlActionDeserializer extends AbstractActionDeserializer<SetMplsTtlCase> {
+public final class OF13SetMplsTtlActionDeserializer extends AbstractActionCaseDeserializer<SetMplsTtlCase> {
     public OF13SetMplsTtlActionDeserializer() {
         super(new SetMplsTtlCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected SetMplsTtlCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
         final var ttl = readUint8(input);
         input.skipBytes(ActionConstants.SET_MPLS_TTL_PADDING);
 
-        return new ActionBuilder()
-            .setActionChoice(new SetMplsTtlCaseBuilder()
-                .setSetMplsTtlAction(new SetMplsTtlActionBuilder().setMplsTtl(ttl).build())
-                .build())
+        return new SetMplsTtlCaseBuilder()
+            .setSetMplsTtlAction(new SetMplsTtlActionBuilder().setMplsTtl(ttl).build())
             .build();
     }
 }
index c55792271989535249f08e3bce7b47be38090b96..6b1110d69e2be77a0c6b35e78fbec82e722daa1d 100644 (file)
@@ -14,29 +14,23 @@ import org.opendaylight.openflowjava.protocol.impl.util.ActionConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.ttl._case.SetNwTtlActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF13SetNwTtlActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13SetNwTtlActionDeserializer extends AbstractActionDeserializer<SetNwTtlCase> {
+public final class OF13SetNwTtlActionDeserializer extends AbstractActionCaseDeserializer<SetNwTtlCase> {
     public OF13SetNwTtlActionDeserializer() {
         super(new SetNwTtlCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected SetNwTtlCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
         final var ttl = readUint8(input);
         input.skipBytes(ActionConstants.SET_NW_TTL_PADDING);
 
-        return new ActionBuilder()
-            .setActionChoice(new SetNwTtlCaseBuilder()
-                .setSetNwTtlAction(new SetNwTtlActionBuilder().setNwTtl(ttl).build())
-                .build())
-            .build();
+        return new SetNwTtlCaseBuilder().setSetNwTtlAction(new SetNwTtlActionBuilder().setNwTtl(ttl).build()).build();
     }
 }
index 419ccd5e547b941beb1f3c63f6cfb88412a9e2c6..eae337c8b030f4ee39465e03e33779cc0de4cfad 100644 (file)
@@ -13,27 +13,23 @@ import io.netty.buffer.ByteBuf;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.queue._case.SetQueueActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 
 /**
  * OF13SetQueueActionDeserializer.
  *
  * @author michal.polkorab
  */
-public class OF13SetQueueActionDeserializer extends AbstractActionDeserializer<SetQueueCase> {
+public final class OF13SetQueueActionDeserializer extends AbstractActionCaseDeserializer<SetQueueCase> {
     public OF13SetQueueActionDeserializer() {
         super(new SetQueueCaseBuilder().build());
     }
 
     @Override
-    public Action deserialize(final ByteBuf input) {
+    protected SetQueueCase deserializeAction(final ByteBuf input) {
         input.skipBytes(2 * Short.BYTES);
 
-        return new ActionBuilder()
-            .setActionChoice(new SetQueueCaseBuilder()
-                .setSetQueueAction(new SetQueueActionBuilder().setQueueId(readUint32(input)).build())
-                .build())
+        return new SetQueueCaseBuilder()
+            .setSetQueueAction(new SetQueueActionBuilder().setQueueId(readUint32(input)).build())
             .build();
     }
 }