Bump MRI upstreams
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / common / MultipartReplyTranslatorUtil.java
index 1d204f82f6b1acb3bf7f46c178548fc47162cc2f..39403cf0471a3b7b1c47f642417bd19026cfe743 100644 (file)
@@ -7,8 +7,9 @@
  */
 package org.opendaylight.openflowplugin.impl.common;
 
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.Nullable;
@@ -33,7 +34,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.m
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowAggregateStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStatsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMapBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.multipart.reply.multipart.reply.body.MultipartReplyFlowTableStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.multipart.reply.multipart.reply.body.MultipartReplyFlowTableStatsBuilder;
@@ -101,21 +101,19 @@ 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.features._case.MultipartReplyMeterFeatures;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTable;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeatures;
 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.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.table.types.rev131026.TableId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.reply.multipart.reply.body.MultipartReplyTableFeaturesBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
 import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -204,7 +202,7 @@ public final class MultipartReplyTranslatorUtil {
 
     private static Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.reply
             .multipart.reply.body.MultipartReplyTableFeatures> translateTableFeatures(final MultipartReply msg,
-                    final short version, final ConvertorExecutor convertorExecutor) {
+                    final Uint8 version, final ConvertorExecutor convertorExecutor) {
         if (convertorExecutor == null) {
             return Optional.empty();
         }
@@ -216,7 +214,7 @@ public final class MultipartReplyTranslatorUtil {
             .convert(multipartReplyTableFeatures, new VersionConvertorData(version));
 
         return Optional.of(new MultipartReplyTableFeaturesBuilder()
-            .setTableFeatures(tableFeaturesList.orElse(List.of()))
+            .setTableFeatures(tableFeaturesList.map(BindingMap::ordered).orElse(Map.of()))
             .build());
     }
 
@@ -269,7 +267,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) {
@@ -303,7 +302,7 @@ public final class MultipartReplyTranslatorUtil {
         }
 
         return new MultipartReplyPortStatsBuilder()
-            .setNodeConnectorStatisticsAndPortNumberMap(statsMap)
+            .setNodeConnectorStatisticsAndPortNumberMap(statsMap.build())
             .build();
     }
 
@@ -319,7 +318,7 @@ public final class MultipartReplyTranslatorUtil {
             replyBody.getGroupStats(), data);
 
         return Optional.of(new MultipartReplyGroupStatsBuilder()
-            .setGroupStats(groupStatsList.orElse(List.of()))
+            .setGroupStats(groupStatsList.map(BindingMap::ordered).orElse(Map.of()))
             .build());
     }
 
@@ -337,7 +336,7 @@ public final class MultipartReplyTranslatorUtil {
             replyBody.getGroupDesc(), data);
 
         return Optional.of(new MultipartReplyGroupDescBuilder()
-            .setGroupDescStats(groupDescStatsList.orElse(List.of()))
+            .setGroupDescStats(groupDescStatsList.map(BindingMap::ordered).orElse(Map.of()))
             .build());
     }
 
@@ -345,38 +344,41 @@ public final class MultipartReplyTranslatorUtil {
             .reply.body.MultipartReplyGroupFeatures translateGroupFeatures(final MultipartReply msg) {
         final MultipartReplyGroupFeatures replyBody = ((MultipartReplyGroupFeaturesCase) msg.getMultipartReplyBody())
             .getMultipartReplyGroupFeatures();
-        final List<Class<? extends GroupType>> supportedGroups = new ArrayList<>();
-        if (replyBody.getTypes().getOFPGTALL()) {
+
+        final var replyTypes = replyBody.getTypes();
+        final var supportedGroups = ImmutableSet.<Class<? extends GroupType>>builder();
+        if (replyTypes.getOFPGTALL()) {
             supportedGroups.add(GroupAll.class);
         }
-        if (replyBody.getTypes().getOFPGTSELECT()) {
+        if (replyTypes.getOFPGTSELECT()) {
             supportedGroups.add(GroupSelect.class);
         }
-        if (replyBody.getTypes().getOFPGTINDIRECT()) {
+        if (replyTypes.getOFPGTINDIRECT()) {
             supportedGroups.add(GroupIndirect.class);
         }
-        if (replyBody.getTypes().getOFPGTFF()) {
+        if (replyTypes.getOFPGTFF()) {
             supportedGroups.add(GroupFf.class);
         }
 
-        List<Class<? extends GroupCapability>> supportedCapabilities = new ArrayList<>();
-        if (replyBody.getCapabilities().getOFPGFCCHAINING()) {
+        final var replyCapabilities = replyBody.getCapabilities();
+        final var supportedCapabilities = ImmutableSet.<Class<? extends GroupCapability>>builder();
+        if (replyCapabilities.getOFPGFCCHAINING()) {
             supportedCapabilities.add(Chaining.class);
         }
-        if (replyBody.getCapabilities().getOFPGFCCHAININGCHECKS()) {
+        if (replyCapabilities.getOFPGFCCHAININGCHECKS()) {
             supportedCapabilities.add(ChainingChecks.class);
         }
-        if (replyBody.getCapabilities().getOFPGFCSELECTLIVENESS()) {
+        if (replyCapabilities.getOFPGFCSELECTLIVENESS()) {
             supportedCapabilities.add(SelectLiveness.class);
         }
-        if (replyBody.getCapabilities().getOFPGFCSELECTWEIGHT()) {
+        if (replyCapabilities.getOFPGFCSELECTWEIGHT()) {
             supportedCapabilities.add(SelectWeight.class);
         }
 
         return new MultipartReplyGroupFeaturesBuilder()
-            .setGroupTypesSupported(supportedGroups)
+            .setGroupTypesSupported(supportedGroups.build())
             .setMaxGroups(replyBody.getMaxGroups())
-            .setGroupCapabilitiesSupported(supportedCapabilities)
+            .setGroupCapabilitiesSupported(supportedCapabilities.build())
             .setActions(GroupUtil.extractGroupActionsSupportBitmap(replyBody.getActionsBitmap()))
             .build();
     }
@@ -394,7 +396,7 @@ public final class MultipartReplyTranslatorUtil {
                 meterStatsList = convertorExecutor.convert(replyBody.getMeterStats(), data);
 
         return Optional.of(new MultipartReplyMeterStatsBuilder()
-            .setMeterStats(meterStatsList.orElse(List.of()))
+            .setMeterStats(meterStatsList.map(BindingMap::ordered).orElse(Map.of()))
             .build());
     }
 
@@ -411,7 +413,7 @@ public final class MultipartReplyTranslatorUtil {
                 = convertorExecutor.convert(replyBody.getMeterConfig(), data);
 
         return Optional.of(new MultipartReplyMeterConfigBuilder()
-            .setMeterConfigStats(meterConfigStatsList.orElse(List.of()))
+            .setMeterConfigStats(meterConfigStatsList.map(BindingMap::ordered).orElse(Map.of()))
             .build());
     }
 
@@ -420,25 +422,27 @@ public final class MultipartReplyTranslatorUtil {
         MultipartReplyMeterFeaturesCase caseBody = (MultipartReplyMeterFeaturesCase) msg.getMultipartReplyBody();
         MultipartReplyMeterFeatures replyBody = caseBody.getMultipartReplyMeterFeatures();
 
-        final List<Class<? extends MeterCapability>> supportedCapabilities = new ArrayList<>();
-        if (replyBody.getCapabilities().getOFPMFBURST()) {
+        final var replyCapabilities = replyBody.getCapabilities();
+        final var supportedCapabilities = ImmutableSet.<Class<? extends MeterCapability>>builder();
+        if (replyCapabilities.getOFPMFBURST()) {
             supportedCapabilities.add(MeterBurst.class);
         }
-        if (replyBody.getCapabilities().getOFPMFKBPS()) {
+        if (replyCapabilities.getOFPMFKBPS()) {
             supportedCapabilities.add(MeterKbps.class);
         }
-        if (replyBody.getCapabilities().getOFPMFPKTPS()) {
+        if (replyCapabilities.getOFPMFPKTPS()) {
             supportedCapabilities.add(MeterPktps.class);
         }
-        if (replyBody.getCapabilities().getOFPMFSTATS()) {
+        if (replyCapabilities.getOFPMFSTATS()) {
             supportedCapabilities.add(MeterStats.class);
         }
 
-        final List<Class<? extends MeterBand>> supportedMeterBand = new ArrayList<>();
-        if (replyBody.getBandTypes().getOFPMBTDROP()) {
+        final var replyMeterBand = replyBody.getBandTypes();
+        final var supportedMeterBand = ImmutableSet.<Class<? extends MeterBand>>builder();
+        if (replyMeterBand.getOFPMBTDROP()) {
             supportedMeterBand.add(MeterBandDrop.class);
         }
-        if (replyBody.getBandTypes().getOFPMBTDSCPREMARK()) {
+        if (replyMeterBand.getOFPMBTDSCPREMARK()) {
             supportedMeterBand.add(MeterBandDscpRemark.class);
         }
 
@@ -446,25 +450,22 @@ public final class MultipartReplyTranslatorUtil {
             .setMaxBands(replyBody.getMaxBands())
             .setMaxColor(replyBody.getMaxColor())
             .setMaxMeter(new Counter32(replyBody.getMaxMeter()))
-            .setMeterCapabilitiesSupported(supportedCapabilities)
-            .setMeterBandSupported(supportedMeterBand)
+            .setMeterCapabilitiesSupported(supportedCapabilities.build())
+            .setMeterBandSupported(supportedMeterBand.build())
             .build();
     }
 
     private static MultipartReplyFlowTableStats translateTable(final MultipartReply msg) {
-        MultipartReplyTableCase caseBody = (MultipartReplyTableCase) msg.getMultipartReplyBody();
-        MultipartReplyTable replyBody = caseBody.getMultipartReplyTable();
-
-        List<FlowTableAndStatisticsMap> salFlowStats = new ArrayList<>();
-        //TODO: Duplicate code: look at OpendaylightFlowTableStatisticsServiceImpl method transformToNotification
-        for (TableStats swTableStats : replyBody.nonnullTableStats()) {
-            salFlowStats.add(new FlowTableAndStatisticsMapBuilder()
+        final var salFlowStats = ((MultipartReplyTableCase) msg.getMultipartReplyBody()).getMultipartReplyTable()
+            .nonnullTableStats().stream()
+            //TODO: Duplicate code: look at OpendaylightFlowTableStatisticsServiceImpl method transformToNotification
+            .map(swTableStats -> new FlowTableAndStatisticsMapBuilder()
                 .setActiveFlows(new Counter32(swTableStats.getActiveCount()))
                 .setPacketsLookedUp(new Counter64(swTableStats.getLookupCount()))
                 .setPacketsMatched(new Counter64(swTableStats.getMatchedCount()))
                 .setTableId(new TableId(swTableStats.getTableId()))
-                .build());
-        }
+                .build())
+            .collect(BindingMap.toOrderedMap());
 
         return new MultipartReplyFlowTableStatsBuilder()
             .setFlowTableAndStatisticsMap(salFlowStats)
@@ -474,12 +475,9 @@ public final class MultipartReplyTranslatorUtil {
     private static MultipartReplyQueueStats translateQueue(final MultipartReply msg,
                                                            final OpenflowVersion ofVersion,
                                                            final Uint64 datapathId) {
-        MultipartReplyQueueCase caseBody = (MultipartReplyQueueCase) msg.getMultipartReplyBody();
-        MultipartReplyQueue replyBody = caseBody.getMultipartReplyQueue();
-
-        List<QueueIdAndStatisticsMap> statsMap = new ArrayList<>();
-        for (QueueStats queueStats : replyBody.nonnullQueueStats()) {
-            statsMap.add(new QueueIdAndStatisticsMapBuilder()
+        final var statsMap = ((MultipartReplyQueueCase) msg.getMultipartReplyBody()).getMultipartReplyQueue()
+            .nonnullQueueStats().stream()
+            .map(queueStats -> new QueueIdAndStatisticsMapBuilder()
                 .setNodeConnectorId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(datapathId,
                     queueStats.getPortNo(), ofVersion))
                 .setQueueId(new QueueId(queueStats.getQueueId()))
@@ -490,8 +488,8 @@ public final class MultipartReplyTranslatorUtil {
                     .setSecond(new Counter32(queueStats.getDurationSec()))
                     .setNanosecond(new Counter32(queueStats.getDurationNsec()))
                     .build())
-                .build());
-        }
+                .build())
+            .collect(BindingMap.toOrderedMap());
 
         return new MultipartReplyQueueStatsBuilder()
             .setQueueIdAndStatisticsMap(statsMap)