Migrate more setFoo(List) setters 07/94607/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Jan 2021 01:10:26 +0000 (02:10 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Jan 2021 10:08:16 +0000 (11:08 +0100)
Clean up more call sites, using BindingMap.ordered(). Also fixes
a few performance regressions introduced during original migration.

Change-Id: I8491695cb482c2b8e6fe7d53d41a5bede61b068f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
23 files changed:
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/MultipartReplyTranslatorUtil.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/match/ArpOpEntryDeserializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/match/VlanVidEntryDeserializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/multipart/MultipartReplyMeterConfigDeserializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/multipart/MultipartReplyTableFeaturesDeserializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/actions/SetTpDstActionSerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/actions/SetTpSrcActionSerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/serialization/actions/StripVlanActionSerializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractTableMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/multilayer/MultiLayerTableMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/singlelayer/SingleLayerTableMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/GroupDescriptionService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/GroupStatisticsToNotificationTransformer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/NodeConnectorStatisticsToNotificationTransformer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/QueueStatisticsToNotificationTransformer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/MeterDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/GroupDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/MeterDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/PortDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/DeviceInitializationUtil.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/util/FlatBatchUtil.java

index b7a6359c8f4b024d61de052ab70bc81f5e90c310..3e61d4f2ced5562f025f7a3aaa2c895f7aee7e73 100644 (file)
@@ -105,6 +105,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.reply.multipart.reply.body.MultipartReplyPortStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.multipart.reply.multipart.reply.body.MultipartReplyQueueStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.multipart.reply.multipart.reply.body.MultipartReplyQueueStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapBuilder;
@@ -265,7 +266,8 @@ public final class MultipartReplyTranslatorUtil {
         MultipartReplyPortStatsCase caseBody = (MultipartReplyPortStatsCase) msg.getMultipartReplyBody();
         MultipartReplyPortStats replyBody = caseBody.getMultipartReplyPortStats();
 
-        List<NodeConnectorStatisticsAndPortNumberMap> statsMap = new ArrayList<>();
+        final var statsMap = BindingMap.<NodeConnectorStatisticsAndPortNumberMapKey,
+            NodeConnectorStatisticsAndPortNumberMap>orderedBuilder();
         for (PortStats portStats : replyBody.nonnullPortStats()) {
             final DurationBuilder durationBuilder = new DurationBuilder();
             if (portStats.getDurationSec() != null) {
@@ -299,7 +301,7 @@ public final class MultipartReplyTranslatorUtil {
         }
 
         return new MultipartReplyPortStatsBuilder()
-            .setNodeConnectorStatisticsAndPortNumberMap(statsMap)
+            .setNodeConnectorStatisticsAndPortNumberMap(statsMap.build())
             .build();
     }
 
index 93ff4270394d02d6b6d3c5a8fb96c2e682c8292e..50950d9c75c74fb80b00f2099e102abfbe82eb8a 100644 (file)
@@ -7,19 +7,22 @@
  */
 package org.opendaylight.openflowplugin.impl.protocol.deserialization.match;
 
+import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint16;
+
 import io.netty.buffer.ByteBuf;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Layer3Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatch;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.ArpMatchBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
 
 public class ArpOpEntryDeserializer extends AbstractMatchEntryDeserializer {
 
     @Override
-    public void deserializeEntry(ByteBuf message, MatchBuilder builder) {
+    public void deserializeEntry(final ByteBuf message, final MatchBuilder builder) {
         processHeader(message);
         final Layer3Match layer3Match = builder.getLayer3Match();
-        final int arpOp = message.readUnsignedShort();
+        final Uint16 arpOp = readUint16(message);
 
         if (layer3Match == null) {
             builder.setLayer3Match(new ArpMatchBuilder()
index 5886a9a018872a13f548cbc842674c4be93c99a3..87b37b70e581ac37f8f277dc27f49aae8253d814 100644 (file)
@@ -12,10 +12,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.M
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
 
 public class VlanVidEntryDeserializer extends AbstractMatchEntryDeserializer {
     @Override
-    public void deserializeEntry(ByteBuf message, MatchBuilder builder) {
+    public void deserializeEntry(final ByteBuf message, final MatchBuilder builder) {
         final boolean hasMask = processHeader(message);
         final VlanIdBuilder vlanIdBuilder = new VlanIdBuilder();
         final int vlanVidValue = message.readUnsignedShort();
@@ -23,13 +24,13 @@ public class VlanVidEntryDeserializer extends AbstractMatchEntryDeserializer {
         if (hasMask) {
             message.skipBytes(Short.BYTES); // Skip mask
             vlanIdBuilder
-                    .setVlanId(new VlanId(0))
+                    .setVlanId(new VlanId(Uint16.ZERO))
                     .setVlanIdPresent(true);
         } else {
             final boolean vidPresent = (vlanVidValue & 1 << 12) != 0;
 
             vlanIdBuilder
-                    .setVlanId(new VlanId(vidPresent ? vlanVidValue & (1 << 12) - 1 : vlanVidValue))
+                    .setVlanId(new VlanId(Uint16.valueOf(vidPresent ? vlanVidValue & (1 << 12) - 1 : vlanVidValue)))
                     .setVlanIdPresent(vidPresent);
         }
 
index 4cb908165b58073755b422c34fc3106366e4ba71..1f3b5876bee7e7e5d8866c7c18a1f5b8a7c27340 100644 (file)
@@ -12,8 +12,6 @@ import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint
 import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint8;
 
 import io.netty.buffer.ByteBuf;
-import java.util.ArrayList;
-import java.util.List;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
 import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
@@ -36,6 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 public class MultipartReplyMeterConfigDeserializer implements OFDeserializer<MultipartReplyBody>,
         DeserializerRegistryInjector {
@@ -51,7 +50,7 @@ public class MultipartReplyMeterConfigDeserializer implements OFDeserializer<Mul
     @Override
     public MultipartReplyBody deserialize(final ByteBuf message) {
         final MultipartReplyMeterConfigBuilder builder = new MultipartReplyMeterConfigBuilder();
-        final List<MeterConfigStats> items = new ArrayList<>();
+        final var items = BindingMap.<MeterConfigStatsKey, MeterConfigStats>orderedBuilder();
 
         while (message.readableBytes() > 0) {
             final int itemLength = message.readUnsignedShort();
@@ -60,7 +59,7 @@ public class MultipartReplyMeterConfigDeserializer implements OFDeserializer<Mul
                     .setFlags(readMeterFlags(message))
                     .setMeterId(new MeterId(readUint32(message)));
 
-            final List<MeterBandHeader> subItems = new ArrayList<>();
+            final var subItems = BindingMap.<MeterBandHeaderKey, MeterBandHeader>orderedBuilder();
             int actualLength = METER_CONFIG_LENGTH;
             long bandKey = 0;
 
@@ -121,13 +120,13 @@ public class MultipartReplyMeterConfigDeserializer implements OFDeserializer<Mul
             items.add(itemBuilder
                     .withKey(new MeterConfigStatsKey(itemBuilder.getMeterId()))
                     .setMeterBandHeaders(new MeterBandHeadersBuilder()
-                            .setMeterBandHeader(subItems)
+                            .setMeterBandHeader(subItems.build())
                             .build())
                     .build());
         }
 
         return builder
-                .setMeterConfigStats(items)
+                .setMeterConfigStats(items.build())
                 .build();
     }
 
index f72248432a4b999ce413eb0faae7e7113d3a79ee..ec850e0452020616e090c088974ae6ee7bbe16c3 100644 (file)
@@ -82,17 +82,16 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
     @Override
     public MultipartReplyBody deserialize(final ByteBuf message) {
         final MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
-        final List<TableFeatures> items = new ArrayList<>();
+        final var items = BindingMap.<TableFeaturesKey, TableFeatures>orderedBuilder();
 
         while (message.readableBytes() > 0) {
             final int itemLength = message.readUnsignedShort();
-            final TableFeaturesBuilder itemBuilder = new TableFeaturesBuilder()
-                    .setTableId(readUint8(message));
+            final Uint8 tableId = readUint8(message);
 
             message.skipBytes(PADDING_IN_MULTIPART_REPLY_TABLE_FEATURES);
 
-            items.add(itemBuilder
-                    .withKey(new TableFeaturesKey(itemBuilder.getTableId()))
+            items.add(new TableFeaturesBuilder()
+                    .setTableId(tableId)
                     .setName(ByteBufUtils.decodeNullTerminatedString(message, MAX_TABLE_NAME_LENGTH))
                     .setMetadataMatch(readUint64(message))
                     .setMetadataWrite(readUint64(message))
@@ -104,7 +103,7 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
         }
 
         return builder
-                .setTableFeatures(items)
+                .setTableFeatures(items.build())
                 .build();
     }
 
@@ -116,7 +115,7 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
     }
 
     private TableProperties readTableProperties(final ByteBuf message, final int length) {
-        final List<TableFeatureProperties> items = new ArrayList<>();
+        final var items = BindingMap.<TableFeaturePropertiesKey, TableFeatureProperties>orderedBuilder();
         int tableFeaturesLength = length;
         int order = 0;
         while (tableFeaturesLength > 0) {
@@ -127,8 +126,7 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
             tableFeaturesLength -= propertyLength;
             final int commonPropertyLength = propertyLength - COMMON_PROPERTY_LENGTH;
             final TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder()
-                .setOrder(order)
-                .withKey(new TableFeaturePropertiesKey(order));
+                .setOrder(order++);
 
             switch (propType) {
                 case OFPTFPTINSTRUCTIONS:
@@ -270,12 +268,11 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
             }
 
             items.add(propBuilder.build());
-            order++;
         }
 
 
         return new TablePropertiesBuilder()
-            .setTableFeatureProperties(items)
+            .setTableFeatureProperties(items.build())
             .build();
     }
 
@@ -316,7 +313,6 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
         while (message.readerIndex() - startIndex < length) {
             try {
                 instructions.add(new InstructionBuilder()
-                        .withKey(new InstructionKey(offset))
                         .setOrder(offset)
                         .setInstruction(InstructionUtil
                                 .readInstructionHeader(EncodeConstants.OF13_VERSION_ID, message, registry))
@@ -324,6 +320,7 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
 
                 offset++;
             } catch (ClassCastException | IllegalStateException e) {
+                // FIXME: what are we guarding here?
                 message.skipBytes(2 * Short.BYTES);
             }
         }
@@ -331,7 +328,6 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
         return instructions.build();
     }
 
-    @SuppressWarnings("checkstyle:LineLength")
     private Map<ActionKey, Action> readActions(final ByteBuf message, final int length) {
         final var actions = BindingMap.<ActionKey, Action>orderedBuilder();
         final int startIndex = message.readerIndex();
@@ -340,7 +336,6 @@ public class MultipartReplyTableFeaturesDeserializer implements OFDeserializer<M
         while (message.readerIndex() - startIndex < length) {
             try {
                 actions.add(new ActionBuilder()
-                        .withKey(new ActionKey(offset))
                         .setOrder(offset)
                         .setAction(ActionUtil.readActionHeader(EncodeConstants.OF13_VERSION_ID, message, registry,
                                 ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS))
index f0d464ad1cebb405ae55c1dc9c25da3f3e4e4962..2bbdd86c562c6ef2be1aa2284af33f4dca54343f 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
+import org.opendaylight.yangtools.yang.common.Uint8;
 
 public class SetTpDstActionSerializer extends AbstractSetFieldActionSerializer {
     @Override
@@ -31,13 +32,13 @@ public class SetTpDstActionSerializer extends AbstractSetFieldActionSerializer {
             switch (proto) {
                 case ICMP: {
                     builder.setIcmpv4Match(new Icmpv4MatchBuilder()
-                            .setIcmpv4Code((short) (0xFF & port.getValue().toJava()))
+                            .setIcmpv4Code(Uint8.valueOf(0xFF & port.getValue().toJava()))
                             .build());
                     break;
                 }
                 case ICMPV6: {
                     builder.setIcmpv6Match(new Icmpv6MatchBuilder()
-                            .setIcmpv6Code((short) (0xFF & port.getValue().toJava()))
+                            .setIcmpv6Code(Uint8.valueOf(0xFF & port.getValue().toJava()))
                             .build());
                     break;
                 }
index cae8fe29ab3196e00cf11defc7aa7072c93d97f9..fb588393ea9d2f21f027f6ca4daeb2369c293379 100644 (file)
@@ -19,6 +19,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.Icmpv6MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.TcpMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._4.match.UdpMatchBuilder;
+import org.opendaylight.yangtools.yang.common.Uint8;
 
 public class SetTpSrcActionSerializer extends AbstractSetFieldActionSerializer {
     @Override
@@ -31,13 +32,13 @@ public class SetTpSrcActionSerializer extends AbstractSetFieldActionSerializer {
             switch (proto) {
                 case ICMP: {
                     builder.setIcmpv4Match(new Icmpv4MatchBuilder()
-                            .setIcmpv4Type((short) (0xFF & port.getValue().toJava()))
+                            .setIcmpv4Type(Uint8.valueOf(0xFF & port.getValue().toJava()))
                             .build());
                     break;
                 }
                 case ICMPV6: {
                     builder.setIcmpv6Match(new Icmpv6MatchBuilder()
-                            .setIcmpv6Type((short) (0xFF & port.getValue().toJava()))
+                            .setIcmpv6Type(Uint8.valueOf(0xFF & port.getValue().toJava()))
                             .build());
                     break;
                 }
index e1dc956ef59f4e86ea90717afb40effd120f8590..fcb3a120dad6a0e8f19b5a928a188d319d273801 100644 (file)
@@ -5,7 +5,6 @@
  * 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.impl.protocol.serialization.actions;
 
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action;
@@ -15,21 +14,21 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
 
 public class StripVlanActionSerializer extends AbstractSetFieldActionSerializer {
 
     @Override
-    protected SetFieldCase buildAction(Action input) {
+    protected SetFieldCase buildAction(final Action input) {
         return new SetFieldCaseBuilder()
-                .setSetField(new SetFieldBuilder()
-                        .setVlanMatch(new VlanMatchBuilder()
-                                .setVlanId(new VlanIdBuilder()
-                                        .setVlanIdPresent(true)
-                                        .setVlanId(new VlanId(0x0000))
-                                        .build())
-                                .build())
+            .setSetField(new SetFieldBuilder()
+                .setVlanMatch(new VlanMatchBuilder()
+                    .setVlanId(new VlanIdBuilder()
+                        .setVlanIdPresent(true)
+                        .setVlanId(new VlanId(Uint16.ZERO))
                         .build())
-                .build();
+                    .build())
+                .build())
+            .build();
     }
-
 }
index e45c095fce47bd06c2b3bddd934883b4f7df128e..71b03e08a42c37c8de07eb4c646f617a91f6275a 100644 (file)
@@ -5,10 +5,9 @@
  * 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.impl.services;
 
-import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Future;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
@@ -18,6 +17,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.TableUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public abstract class AbstractTableMultipartService<T extends OfHeader>
@@ -35,17 +36,11 @@ public abstract class AbstractTableMultipartService<T extends OfHeader>
     /**
      * Stores table features to operational datastore.
      */
-    protected void storeStatistics(List<org.opendaylight.yang.gen.v1.urn
-            .opendaylight.table.types.rev131026.table.features.TableFeatures> result) {
+    protected void storeStatistics(final Map<TableFeaturesKey, TableFeatures> result) {
         multipartWriterProvider
             .lookup(MultipartType.OFPMPTABLEFEATURES)
             .ifPresent(writer -> {
-                writer.write(
-                    new TableUpdatedBuilder()
-                        .setTableFeatures(result)
-                        .build(),
-                    false);
-
+                writer.write(new TableUpdatedBuilder().setTableFeatures(result).build(), false);
                 getTxFacade().submitTransaction();
             });
     }
@@ -56,5 +51,4 @@ public abstract class AbstractTableMultipartService<T extends OfHeader>
      * @return experimenter output
      */
     public abstract Future<RpcResult<UpdateTableOutput>> handleAndReply(UpdateTableInput input);
-
 }
index 2ece276b2ef8f18aa2fb14830d4428439fb3a314..8d75d6b5d0518e027cee45f8cf9e6053e00378db 100644 (file)
@@ -13,9 +13,9 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
@@ -38,6 +38,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.Upd
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -130,12 +131,13 @@ public class MultiLayerTableMultipartService extends AbstractTableMultipartServi
         return finalFuture;
     }
 
-    protected List<org.opendaylight.yang.gen.v1.urn
-            .opendaylight.table.types.rev131026.table.features.TableFeatures> convertToSalTableFeatures(
-            final List<MultipartReply> multipartReplies) {
-        final List<org.opendaylight.yang.gen.v1.urn
-                .opendaylight.table.types.rev131026.table.features.TableFeatures> salTableFeaturesAll =
-                new ArrayList<>();
+    protected Map<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey,
+                  org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures>
+                        convertToSalTableFeatures(final List<MultipartReply> multipartReplies) {
+        final var salTableFeaturesAll = BindingMap.<
+            org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey,
+            org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures>
+                orderedBuilder();
         for (final MultipartReply multipartReply : multipartReplies) {
             if (multipartReply.getType().equals(MultipartType.OFPMPTABLEFEATURES)) {
                 final MultipartReplyBody multipartReplyBody = multipartReply.getMultipartReplyBody();
@@ -155,6 +157,6 @@ public class MultiLayerTableMultipartService extends AbstractTableMultipartServi
             }
         }
 
-        return salTableFeaturesAll;
+        return salTableFeaturesAll.build();
     }
 }
index 32df00eb9a5640f23f15c12c9af9f82e28f371b9..1fe13f456760ba0838f332ff86f03c7dd623b64d 100644 (file)
@@ -14,7 +14,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.List;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
@@ -29,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.Upd
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.UpdateTableOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.reply.multipart.reply.body.MultipartReplyTableFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -88,7 +88,7 @@ public class SingleLayerTableMultipartService extends AbstractTableMultipartServ
                                 .flatMap(multipartReplyBody -> ((MultipartReplyTableFeatures) multipartReplyBody)
                                     .nonnullTableFeatures().values()
                                     .stream())
-                                .collect(Collectors.toList()));
+                                .collect(BindingMap.toOrderedMap()));
                         } catch (Exception e) {
                             LOG.warn("Not able to write to operational datastore: {}", e.getMessage());
                         }
index c3ef683e870b6ba8aa213b487a285a01dce8ee7a..a62a4723619b05235597db0e2507277248d5cc47 100644 (file)
@@ -7,14 +7,9 @@
  */
 package org.opendaylight.openflowplugin.impl.statistics.services;
 
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowjava.protocol.api.util.BinContent;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
@@ -30,6 +25,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.Meter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
@@ -41,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 final class AllMeterConfigStatsService
         extends AbstractCompatibleStatService<GetAllMeterConfigStatisticsInput,
@@ -64,10 +61,10 @@ final class AllMeterConfigStatsService
     private final ConvertorExecutor convertorExecutor;
     private final VersionConvertorData data;
 
-    AllMeterConfigStatsService(RequestContextStack requestContextStack,
-                                      DeviceContext deviceContext,
-                                      AtomicLong compatibilityXidSeed,
-                                      ConvertorExecutor convertorExecutor) {
+    AllMeterConfigStatsService(final RequestContextStack requestContextStack,
+                                      final DeviceContext deviceContext,
+                                      final AtomicLong compatibilityXidSeed,
+                                      final ConvertorExecutor convertorExecutor) {
         super(requestContextStack, deviceContext, compatibilityXidSeed);
         this.convertorExecutor = convertorExecutor;
         data = new VersionConvertorData(getVersion());
@@ -82,36 +79,28 @@ final class AllMeterConfigStatsService
     }
 
     @Override
-    public GetAllMeterConfigStatisticsOutput buildTxCapableResult(TransactionId emulatedTxId) {
+    public GetAllMeterConfigStatisticsOutput buildTxCapableResult(final TransactionId emulatedTxId) {
         return new GetAllMeterConfigStatisticsOutputBuilder().setTransactionId(emulatedTxId).build();
     }
 
     @Override
-    public MeterConfigStatsUpdated transformToNotification(List<MultipartReply> result, TransactionId emulatedTxId) {
-        MeterConfigStatsUpdatedBuilder message = new MeterConfigStatsUpdatedBuilder();
-        message.setId(getDeviceInfo().getNodeId());
-        message.setMoreReplies(Boolean.FALSE);
-        message.setTransactionId(emulatedTxId);
-
-        message.setMeterConfigStats(new ArrayList<>());
+    public MeterConfigStatsUpdated transformToNotification(final List<MultipartReply> result,
+            final TransactionId emulatedTxId) {
+        final var stats = BindingMap.<MeterConfigStatsKey, MeterConfigStats>orderedBuilder();
         for (MultipartReply mpReply : result) {
             MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase) mpReply.getMultipartReplyBody();
             MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig();
 
             final Optional<List<MeterConfigStats>> meterConfigStatsList =
                     convertorExecutor.convert(replyBody.getMeterConfig(), data);
-
-            meterConfigStatsList.ifPresent(meterConfigStats -> {
-                if (message.getMeterConfigStats() == null) {
-                    message.setMeterConfigStats(Lists.newArrayList(meterConfigStats));
-                } else {
-                    Set<MeterConfigStats> stats = new HashSet<>(message.getMeterConfigStats().values());
-                    stats.addAll(meterConfigStats);
-                    message.setMeterConfigStats(stats.stream().collect(Collectors.toList()));
-                }
-            });
+            meterConfigStatsList.ifPresent(stats::addAll);
         }
 
-        return message.build();
+        return new MeterConfigStatsUpdatedBuilder()
+            .setId(getDeviceInfo().getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setMeterConfigStats(stats.build())
+            .build();
     }
 }
index 47b0dc5510ab9a0f01eddfadc94d2326a0f21213..7b945333a0b56ebdce741734d6726b79bc48af0b 100644 (file)
@@ -7,14 +7,9 @@
  */
 package org.opendaylight.openflowplugin.impl.statistics.services;
 
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
@@ -29,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
@@ -37,6 +33,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDesc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCaseBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 final class GroupDescriptionService
         extends AbstractCompatibleStatService<GetGroupDescriptionInput,
@@ -46,10 +43,10 @@ final class GroupDescriptionService
             new MultipartRequestGroupDescCaseBuilder().build();
     private final ConvertorExecutor convertorExecutor;
 
-    GroupDescriptionService(RequestContextStack requestContextStack,
-                            DeviceContext deviceContext,
-                            AtomicLong compatibilityXidSeed,
-                            ConvertorExecutor convertorExecutor) {
+    GroupDescriptionService(final RequestContextStack requestContextStack,
+                            final DeviceContext deviceContext,
+                            final AtomicLong compatibilityXidSeed,
+                            final ConvertorExecutor convertorExecutor) {
         super(requestContextStack, deviceContext, compatibilityXidSeed);
         this.convertorExecutor = convertorExecutor;
     }
@@ -63,40 +60,30 @@ final class GroupDescriptionService
     }
 
     @Override
-    public GetGroupDescriptionOutput buildTxCapableResult(TransactionId emulatedTxId) {
+    public GetGroupDescriptionOutput buildTxCapableResult(final TransactionId emulatedTxId) {
         return new GetGroupDescriptionOutputBuilder().setTransactionId(emulatedTxId).build();
     }
 
     @Override
-    public GroupDescStatsUpdated transformToNotification(List<MultipartReply> result, TransactionId emulatedTxId) {
-        GroupDescStatsUpdatedBuilder notification = new GroupDescStatsUpdatedBuilder();
-        notification.setId(getDeviceInfo().getNodeId());
-        notification.setMoreReplies(Boolean.FALSE);
-        notification.setTransactionId(emulatedTxId);
-
-        notification.setGroupDescStats(new ArrayList<>());
+    public GroupDescStatsUpdated transformToNotification(final List<MultipartReply> result,
+            final TransactionId emulatedTxId) {
         final VersionConvertorData data = new VersionConvertorData(getVersion());
 
+        final var stats = BindingMap.<GroupDescStatsKey, GroupDescStats>orderedBuilder();
         for (MultipartReply mpReply : result) {
             MultipartReplyGroupDescCase caseBody = (MultipartReplyGroupDescCase) mpReply.getMultipartReplyBody();
             MultipartReplyGroupDesc replyBody = caseBody.getMultipartReplyGroupDesc();
             final Optional<List<GroupDescStats>> groupDescStatsList = convertorExecutor.convert(
                     replyBody.getGroupDesc(), data);
 
-            groupDescStatsList.ifPresent(groupDescStats -> {
-                if (notification.getGroupDescStats() == null) {
-                    List<GroupDescStats> stats = Lists.newArrayList(groupDescStats);
-                    notification.setGroupDescStats(stats);
-                } else {
-                    Set<GroupDescStats> stats = new HashSet<>(notification.getGroupDescStats().values());
-                    stats.addAll(groupDescStats);
-                    notification.setGroupDescStats(stats.stream().collect(Collectors.toList()));
-                }
-            });
-
-
+            groupDescStatsList.ifPresent(stats::addAll);
         }
 
-        return notification.build();
+        return new GroupDescStatsUpdatedBuilder()
+            .setId(getDeviceInfo().getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setGroupDescStats(stats.build())
+            .build();
     }
 }
index 147c738b27de37dbfc3333e75fa97d966bbabd7f..b3db0fe063c6c24d19375b320a1f6aaff859a833 100644 (file)
@@ -8,13 +8,8 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.compatibility;
 
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
@@ -22,9 +17,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 /**
  * Pulled out group stats to notification transformation.
@@ -47,32 +44,22 @@ public final class GroupStatisticsToNotificationTransformer {
                                                                  final DeviceInfo deviceInfo,
                                                                  final TransactionId emulatedTxId,
                                                                  final ConvertorExecutor convertorExecutor) {
-
         VersionConvertorData data = new VersionConvertorData(deviceInfo.getVersion());
-        GroupStatisticsUpdatedBuilder notification = new GroupStatisticsUpdatedBuilder();
-        notification.setId(deviceInfo.getNodeId());
-        notification.setMoreReplies(Boolean.FALSE);
-        notification.setTransactionId(emulatedTxId);
-
-        notification.setGroupStats(new ArrayList<>());
-
+        final var stats = BindingMap.<GroupStatsKey, GroupStats>orderedBuilder();
         for (MultipartReply mpReply : mpReplyList) {
             MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
             MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
             final Optional<List<GroupStats>> groupStatsList = convertorExecutor.convert(
                     replyBody.getGroupStats(), data);
 
-            groupStatsList.ifPresent(groupStats -> {
-                if (notification.getGroupStats() == null) {
-                    List<GroupStats> stats = Lists.newArrayList(groupStats);
-                    notification.setGroupStats(stats);
-                } else {
-                    Set<GroupStats> stats = new HashSet<>(notification.getGroupStats().values());
-                    stats.addAll(groupStats);
-                    notification.setGroupStats(stats.stream().collect(Collectors.toList()));
-                }
-            });
+            groupStatsList.ifPresent(stats::addAll);
         }
-        return notification.build();
+
+        return new GroupStatisticsUpdatedBuilder()
+            .setId(deviceInfo.getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setGroupStats(stats.build())
+            .build();
     }
 }
index de3788bb936657665ec95950f8dab38a2d9afb3e..cb79b61a7728dfdc7634ee36ada267c4dea4834a 100644 (file)
@@ -5,16 +5,10 @@
  * 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.impl.statistics.services.compatibility;
 
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
@@ -23,9 +17,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdatedBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 /**
  * Pulled out meter stats to notification transformation.
@@ -53,29 +49,21 @@ public final class MeterStatisticsToNotificationTransformer {
                                                                  final ConvertorExecutor convertorExecutor) {
 
         VersionConvertorData data = new VersionConvertorData(deviceInfo.getVersion());
-        MeterStatisticsUpdatedBuilder notification = new MeterStatisticsUpdatedBuilder();
-        notification.setId(deviceInfo.getNodeId());
-        notification.setMoreReplies(Boolean.FALSE);
-        notification.setTransactionId(emulatedTxId);
-
-        notification.setMeterStats(new ArrayList<>());
+        final var stats = BindingMap.<MeterStatsKey, MeterStats>orderedBuilder();
         for (MultipartReply mpReply : mpReplyList) {
             MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody();
             MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter();
             final Optional<List<MeterStats>> meterStatsList =
                     convertorExecutor.convert(replyBody.getMeterStats(), data);
 
-            meterStatsList.ifPresent(meterStats -> {
-                if (notification.getMeterStats() == null) {
-                    notification.setMeterStats(Lists.newArrayList(meterStats));
-                } else {
-                    Set<MeterStats> stats = new HashSet<>(notification.getMeterStats().values());
-                    stats.addAll(meterStats);
-                    notification.setMeterStats(stats.stream().collect(Collectors.toList()));
-                }
-            });
+            meterStatsList.ifPresent(stats::addAll);
         }
 
-        return notification.build();
+        return new MeterStatisticsUpdatedBuilder()
+            .setId(deviceInfo.getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setMeterStats(stats.build())
+            .build();
     }
 }
index f1adb5798de7cb5ce39bf53a755f7a02ee6b7fa7..b051d47d51a604f686bf5c0801f23d8dcdc86eea 100644 (file)
@@ -9,12 +9,7 @@
 package org.opendaylight.openflowplugin.impl.statistics.services.compatibility;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
@@ -32,6 +27,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.N
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapKey;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 /**
  * Pulled out port stats to notification transformation.
@@ -55,56 +51,27 @@ public final class NodeConnectorStatisticsToNotificationTransformer {
                                                                         final DeviceInfo deviceInfo,
                                                                         final OpenflowVersion ofVersion,
                                                                         final TransactionId emulatedTxId) {
-
-        NodeConnectorStatisticsUpdateBuilder notification = new NodeConnectorStatisticsUpdateBuilder();
-        notification.setId(deviceInfo.getNodeId());
-        notification.setMoreReplies(Boolean.FALSE);
-        notification.setTransactionId(emulatedTxId);
-
-        notification
-                .setNodeConnectorStatisticsAndPortNumberMap(new ArrayList<>());
+        final var stats = BindingMap.<NodeConnectorStatisticsAndPortNumberMapKey,
+            NodeConnectorStatisticsAndPortNumberMap>orderedBuilder();
         for (MultipartReply mpReply : mpReplyList) {
             MultipartReplyPortStatsCase caseBody = (MultipartReplyPortStatsCase) mpReply.getMultipartReplyBody();
 
             MultipartReplyPortStats replyBody = caseBody.getMultipartReplyPortStats();
             for (PortStats portStats : replyBody.getPortStats()) {
-                NodeConnectorStatisticsAndPortNumberMapBuilder statsBuilder =
-                        processSingleNodeConnectorStats(deviceInfo, ofVersion, portStats);
-                if (notification.getNodeConnectorStatisticsAndPortNumberMap() != null) {
-                    Set<NodeConnectorStatisticsAndPortNumberMap> stats
-                            = new HashSet<>(notification.getNodeConnectorStatisticsAndPortNumberMap().values());
-                    stats.add(statsBuilder.build());
-                    notification.setNodeConnectorStatisticsAndPortNumberMap(
-                            stats.stream().collect(Collectors.toList()));
-                } else {
-                    notification.setNodeConnectorStatisticsAndPortNumberMap(Lists.newArrayList(statsBuilder.build()));
-                }
+                stats.add(processSingleNodeConnectorStats(deviceInfo, ofVersion, portStats).build());
             }
         }
-        return notification.build();
+        return new NodeConnectorStatisticsUpdateBuilder()
+            .setId(deviceInfo.getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setNodeConnectorStatisticsAndPortNumberMap(stats.build())
+            .build();
     }
 
     @VisibleForTesting
-    static NodeConnectorStatisticsAndPortNumberMapBuilder processSingleNodeConnectorStats(DeviceInfo deviceInfo,
-                                                                                          OpenflowVersion ofVersion,
-                                                                                          PortStats portStats) {
-        NodeConnectorStatisticsAndPortNumberMapBuilder statsBuilder =
-                new NodeConnectorStatisticsAndPortNumberMapBuilder();
-        statsBuilder.setNodeConnectorId(
-                InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
-                        deviceInfo.getDatapathId(),
-                        portStats.getPortNo(), ofVersion));
-
-        BytesBuilder bytesBuilder = new BytesBuilder();
-        bytesBuilder.setReceived(portStats.getRxBytes());
-        bytesBuilder.setTransmitted(portStats.getTxBytes());
-        statsBuilder.setBytes(bytesBuilder.build());
-
-        PacketsBuilder packetsBuilder = new PacketsBuilder();
-        packetsBuilder.setReceived(portStats.getRxPackets());
-        packetsBuilder.setTransmitted(portStats.getTxPackets());
-        statsBuilder.setPackets(packetsBuilder.build());
-
+    static NodeConnectorStatisticsAndPortNumberMapBuilder processSingleNodeConnectorStats(final DeviceInfo deviceInfo,
+            final OpenflowVersion ofVersion, final PortStats portStats) {
         DurationBuilder durationBuilder = new DurationBuilder();
         if (portStats.getDurationSec() != null) {
             durationBuilder.setSecond(new Counter32(portStats.getDurationSec()));
@@ -112,16 +79,25 @@ public final class NodeConnectorStatisticsToNotificationTransformer {
         if (portStats.getDurationNsec() != null) {
             durationBuilder.setNanosecond(new Counter32(portStats.getDurationNsec()));
         }
-        statsBuilder.setDuration(durationBuilder.build());
-        statsBuilder.setCollisionCount(portStats.getCollisions());
-        statsBuilder.withKey(new NodeConnectorStatisticsAndPortNumberMapKey(statsBuilder.getNodeConnectorId()));
-        statsBuilder.setReceiveCrcError(portStats.getRxCrcErr());
-        statsBuilder.setReceiveDrops(portStats.getRxDropped());
-        statsBuilder.setReceiveErrors(portStats.getRxErrors());
-        statsBuilder.setReceiveFrameError(portStats.getRxFrameErr());
-        statsBuilder.setReceiveOverRunError(portStats.getRxOverErr());
-        statsBuilder.setTransmitDrops(portStats.getTxDropped());
-        statsBuilder.setTransmitErrors(portStats.getTxErrors());
-        return statsBuilder;
+
+        return new NodeConnectorStatisticsAndPortNumberMapBuilder()
+            .setNodeConnectorId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(deviceInfo.getDatapathId(),
+                portStats.getPortNo(), ofVersion))
+            .setBytes(new BytesBuilder()
+                .setReceived(portStats.getRxBytes())
+                .setTransmitted(portStats.getTxBytes())
+                .build())
+            .setPackets(new PacketsBuilder()
+                .setReceived(portStats.getRxPackets())
+                .setTransmitted(portStats.getTxPackets()).build())
+            .setDuration(durationBuilder.build())
+            .setCollisionCount(portStats.getCollisions())
+            .setReceiveCrcError(portStats.getRxCrcErr())
+            .setReceiveDrops(portStats.getRxDropped())
+            .setReceiveErrors(portStats.getRxErrors())
+            .setReceiveFrameError(portStats.getRxFrameErr())
+            .setReceiveOverRunError(portStats.getRxOverErr())
+            .setTransmitDrops(portStats.getTxDropped())
+            .setTransmitErrors(portStats.getTxErrors());
     }
 }
index 4e118f93b2a3a48f28def842db6c31227cfb870b..ffd147ad51a56d2a8937760682afd73ad3429bcf 100644 (file)
@@ -8,12 +8,7 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.compatibility;
 
-import com.google.common.collect.Lists;
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
@@ -30,6 +25,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdateBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapKey;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 /**
  * Pulled out queue stats to notification transformation.
@@ -53,47 +50,30 @@ public final class QueueStatisticsToNotificationTransformer {
                                                                 final DeviceInfo deviceInfo,
                                                                 final OpenflowVersion ofVersion,
                                                                 final TransactionId emulatedTxId) {
-
-        QueueStatisticsUpdateBuilder notification = new QueueStatisticsUpdateBuilder();
-        notification.setId(deviceInfo.getNodeId());
-        notification.setMoreReplies(Boolean.FALSE);
-        notification.setTransactionId(emulatedTxId);
-
-        notification.setQueueIdAndStatisticsMap(new ArrayList<>());
+        final var stats = BindingMap.<QueueIdAndStatisticsMapKey, QueueIdAndStatisticsMap>orderedBuilder();
         for (MultipartReply mpReply : mpReplyList) {
-
             MultipartReplyQueueCase caseBody = (MultipartReplyQueueCase) mpReply.getMultipartReplyBody();
             MultipartReplyQueue replyBody = caseBody.getMultipartReplyQueue();
 
             for (QueueStats queueStats : replyBody.getQueueStats()) {
-
-                QueueIdAndStatisticsMapBuilder statsBuilder =
-                        new QueueIdAndStatisticsMapBuilder();
-                statsBuilder.setNodeConnectorId(
-                        InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
-                                deviceInfo.getDatapathId(),
-                                queueStats.getPortNo(), ofVersion));
-                statsBuilder.setTransmissionErrors(new Counter64(queueStats.getTxErrors()));
-                statsBuilder.setTransmittedBytes(new Counter64(queueStats.getTxBytes()));
-                statsBuilder.setTransmittedPackets(new Counter64(queueStats.getTxPackets()));
-
-                DurationBuilder durationBuilder = new DurationBuilder();
-                durationBuilder.setSecond(new Counter32(queueStats.getDurationSec()));
-                durationBuilder.setNanosecond(new Counter32(queueStats.getDurationNsec()));
-                statsBuilder.setDuration(durationBuilder.build());
-
-                statsBuilder.setQueueId(new QueueId(queueStats.getQueueId()));
-
-                if (notification.getQueueIdAndStatisticsMap() == null) {
-                    notification.setQueueIdAndStatisticsMap(Lists.newArrayList(statsBuilder.build()));
-                } else {
-                    Set<QueueIdAndStatisticsMap> stats
-                            = new HashSet<>(notification.getQueueIdAndStatisticsMap().values());
-                    stats.add(statsBuilder.build());
-                    notification.setQueueIdAndStatisticsMap(stats.stream().collect(Collectors.toList()));
-                }
+                stats.add(new QueueIdAndStatisticsMapBuilder()
+                    .setNodeConnectorId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
+                            deviceInfo.getDatapathId(), queueStats.getPortNo(), ofVersion))
+                    .setTransmissionErrors(new Counter64(queueStats.getTxErrors()))
+                    .setTransmittedBytes(new Counter64(queueStats.getTxBytes()))
+                    .setTransmittedPackets(new Counter64(queueStats.getTxPackets()))
+                    .setDuration(new DurationBuilder()
+                        .setSecond(new Counter32(queueStats.getDurationSec()))
+                        .setNanosecond(new Counter32(queueStats.getDurationNsec())).build())
+                    .setQueueId(new QueueId(queueStats.getQueueId()))
+                    .build());
             }
         }
-        return notification.build();
+        return new QueueStatisticsUpdateBuilder()
+            .setId(deviceInfo.getNodeId())
+            .setMoreReplies(Boolean.FALSE)
+            .setTransactionId(emulatedTxId)
+            .setQueueIdAndStatisticsMap(stats.build())
+            .build();
     }
 }
index a0d2b5310c964feb295b6e7c10e40c0d5c19e6a8..0355afc5086ab03f29ba411e74e403ffbe9572d7 100644 (file)
@@ -5,10 +5,8 @@
  * 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.impl.statistics.services.direct.multilayer;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.openflowplugin.api.OFConstants;
@@ -24,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
@@ -31,6 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsService<MultipartReply> {
 
@@ -45,8 +45,8 @@ public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsS
     }
 
     @Override
-    protected GetMeterStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
-        final List<MeterStats> meterStats = new ArrayList<>();
+    protected GetMeterStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+        final var meterStats = BindingMap.<MeterStatsKey, MeterStats>orderedBuilder();
 
         if (success) {
             for (final MultipartReply mpReply : input) {
@@ -59,7 +59,7 @@ public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsS
         }
 
         return new GetMeterStatisticsOutputBuilder()
-            .setMeterStats(meterStats)
+            .setMeterStats(meterStats.build())
             .build();
     }
 
index d8be05856f96b3d62196e926a499977792fc9294..fedf26f693b373ca05c88eac9096bbf7cdc21855 100644 (file)
@@ -5,11 +5,9 @@
  * 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.impl.statistics.services.direct.singlelayer;
 
 import java.util.List;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
@@ -24,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsService<MultipartReply> {
 
@@ -35,14 +34,14 @@ public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsS
     }
 
     @Override
-    protected GetGroupStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
+    protected GetGroupStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+        final var map = input.stream()
+            .flatMap(multipartReply -> ((MultipartReplyGroupStats) multipartReply.getMultipartReplyBody())
+                .nonnullGroupStats().values().stream())
+            .collect(BindingMap.toOrderedMap());
+
         return new GetGroupStatisticsOutputBuilder()
-            .setGroupStats(input
-                .stream()
-                .flatMap(multipartReply -> ((MultipartReplyGroupStats) multipartReply.getMultipartReplyBody())
-                    .nonnullGroupStats().values()
-                    .stream())
-                .collect(Collectors.toList()))
+            .setGroupStats(map)
             .build();
     }
 
index d12461f374c087acb46ad621e19c101e1c18d7af..2f9539d6781f558155d742a5dd195c939215a40e 100644 (file)
@@ -5,11 +5,9 @@
  * 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.impl.statistics.services.direct.singlelayer;
 
 import java.util.List;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
@@ -24,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsService<MultipartReply> {
 
@@ -35,14 +34,14 @@ public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsS
     }
 
     @Override
-    protected GetMeterStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
-        return  new GetMeterStatisticsOutputBuilder()
-            .setMeterStats(input
-                .stream()
-                .flatMap(multipartReply -> ((MultipartReplyMeterStats) multipartReply.getMultipartReplyBody())
-                    .nonnullMeterStats().values()
-                    .stream())
-                .collect(Collectors.toList()))
+    protected GetMeterStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+        final var map = input.stream()
+            .flatMap(multipartReply -> ((MultipartReplyMeterStats) multipartReply.getMultipartReplyBody())
+                .nonnullMeterStats().values().stream())
+            .collect(BindingMap.toOrderedMap());
+
+        return new GetMeterStatisticsOutputBuilder()
+            .setMeterStats(map)
             .build();
     }
 
index 6f12bcc6038c40f7534b73180e2437ed9f8738fe..092230311dedc1d30d403616cc2277c141c7140f 100644 (file)
@@ -5,11 +5,9 @@
  * 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.impl.statistics.services.direct.singlelayer;
 
 import java.util.List;
-import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
@@ -24,6 +22,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.M
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.reply.multipart.reply.body.MultipartReplyPortStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 
 public class PortDirectStatisticsService extends AbstractPortDirectStatisticsService<MultipartReply> {
 
@@ -35,14 +34,14 @@ public class PortDirectStatisticsService extends AbstractPortDirectStatisticsSer
     }
 
     @Override
-    protected GetNodeConnectorStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
-        return  new GetNodeConnectorStatisticsOutputBuilder()
-            .setNodeConnectorStatisticsAndPortNumberMap(input
-                .stream()
-                .flatMap(multipartReply -> ((MultipartReplyPortStats) multipartReply.getMultipartReplyBody())
-                    .nonnullNodeConnectorStatisticsAndPortNumberMap()
-                    .values().stream())
-                .collect(Collectors.toList()))
+    protected GetNodeConnectorStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+        final var map = input.stream()
+            .flatMap(multipartReply -> ((MultipartReplyPortStats) multipartReply.getMultipartReplyBody())
+                .nonnullNodeConnectorStatisticsAndPortNumberMap().values().stream())
+            .collect(BindingMap.toOrderedMap());
+
+        return new GetNodeConnectorStatisticsOutputBuilder()
+            .setNodeConnectorStatisticsAndPortNumberMap(map)
             .build();
     }
 
index 180bef535b282a069b439b03f699ac4be6db6c93..0848ba4b337167f5a5fd0cc9e7b0a07d4180bc27 100644 (file)
@@ -32,6 +32,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBu
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutputBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,13 +76,14 @@ public final class DeviceInitializationUtil {
         }
 
         for (int i = 0; i < nrOfTables; i++) {
+            final Uint8 tableId = Uint8.valueOf(i);
             txFacade.writeToTransaction(LogicalDatastoreType.OPERATIONAL,
                     deviceInfo
                             .getNodeInstanceIdentifier()
                             .augmentation(FlowCapableNode.class)
-                            .child(Table.class, new TableKey((short) i)),
+                            .child(Table.class, new TableKey(tableId)),
                     new TableBuilder()
-                            .setId((short) i)
+                            .setId(tableId)
                             .addAugmentation(new FlowTableStatisticsDataBuilder().build())
                             .build());
         }
@@ -121,7 +124,7 @@ public final class DeviceInitializationUtil {
         }
         final int port = address.getPort();
         LOG.info("Port number of the node {} is: {}", node, port);
-        return new PortNumber(port);
+        return new PortNumber(Uint16.valueOf(port));
     }
 
     /**
index 292af59b732a4ada82d12f03405d240a003d67d9..4ffaea8372a1e958bf7f22924bf3b17edc5b7553 100644 (file)
@@ -17,6 +17,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.EnumSet;
 import java.util.List;
+import java.util.Map;
 import org.opendaylight.openflowplugin.impl.services.batch.BatchPlanStep;
 import org.opendaylight.openflowplugin.impl.services.batch.BatchStepType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flat.batch.service.rev160321.ProcessFlatBatchOutput;
@@ -221,9 +222,7 @@ public final class FlatBatchUtil {
             final boolean status) {
         return RpcResultBuilder.<ProcessFlatBatchOutput>status(status)
                                .withRpcErrors(new ArrayList<>())
-                               .withResult(new ProcessFlatBatchOutputBuilder()
-                                       .setBatchFailure(new ArrayList<>())
-                                       .build())
+                               .withResult(new ProcessFlatBatchOutputBuilder().setBatchFailure(Map.of()).build())
                                .buildFuture();
     }
 }