*/
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;
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;
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;
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();
}
.convert(multipartReplyTableFeatures, new VersionConvertorData(version));
return Optional.of(new MultipartReplyTableFeaturesBuilder()
- .setTableFeatures(tableFeaturesList.orElse(List.of()))
+ .setTableFeatures(tableFeaturesList.map(BindingMap::ordered).orElse(Map.of()))
.build());
}
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) {
}
return new MultipartReplyPortStatsBuilder()
- .setNodeConnectorStatisticsAndPortNumberMap(statsMap)
+ .setNodeConnectorStatisticsAndPortNumberMap(statsMap.build())
.build();
}
replyBody.getGroupStats(), data);
return Optional.of(new MultipartReplyGroupStatsBuilder()
- .setGroupStats(groupStatsList.orElse(List.of()))
+ .setGroupStats(groupStatsList.map(BindingMap::ordered).orElse(Map.of()))
.build());
}
replyBody.getGroupDesc(), data);
return Optional.of(new MultipartReplyGroupDescBuilder()
- .setGroupDescStats(groupDescStatsList.orElse(List.of()))
+ .setGroupDescStats(groupDescStatsList.map(BindingMap::ordered).orElse(Map.of()))
.build());
}
.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();
}
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());
}
= convertorExecutor.convert(replyBody.getMeterConfig(), data);
return Optional.of(new MultipartReplyMeterConfigBuilder()
- .setMeterConfigStats(meterConfigStatsList.orElse(List.of()))
+ .setMeterConfigStats(meterConfigStatsList.map(BindingMap::ordered).orElse(Map.of()))
.build());
}
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);
}
.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)
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()))
.setSecond(new Counter32(queueStats.getDurationSec()))
.setNanosecond(new Counter32(queueStats.getDurationNsec()))
.build())
- .build());
- }
+ .build())
+ .collect(BindingMap.toOrderedMap());
return new MultipartReplyQueueStatsBuilder()
.setQueueIdAndStatisticsMap(statsMap)