Use BindingMap and similar construcs to switch from Lists to Maps.
Change-Id: I35c8e71ac03dbec10c32074e8caad1fd3c95d374
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import java.util.ArrayList;
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.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.slf4j.Logger;
import org.slf4j.LoggerFactory;
.convert(multipartReplyTableFeatures, new VersionConvertorData(version));
return Optional.of(new MultipartReplyTableFeaturesBuilder()
- .setTableFeatures(tableFeaturesList.orElse(List.of()))
+ .setTableFeatures(tableFeaturesList.map(BindingMap::ordered).orElse(Map.of()))
.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());
}
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());
}
}
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)
* 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.datastore.multipart;
-import java.util.Collections;
+import java.util.Map;
import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
import org.opendaylight.openflowplugin.api.openflow.device.TxFacade;
import org.opendaylight.openflowplugin.impl.util.DeviceInitializationUtil;
@Override
public void storeStatistics(final Desc statistics, final boolean withParents) {
- writeToTransaction(getInstanceIdentifier()
- .augmentation(FlowCapableNode.class),
+ writeToTransaction(getInstanceIdentifier().augmentation(FlowCapableNode.class),
new FlowCapableNodeBuilder(statistics)
- .setTable(Collections.emptyList())
- .setMeter(Collections.emptyList())
- .setGroup(Collections.emptyList())
+ .setTable(Map.of())
+ .setMeter(Map.of())
+ .setGroup(Map.of())
.setIpAddress(DeviceInitializationUtil.getIpAddress(connectionContext, getInstanceIdentifier()))
.setPortNumber(DeviceInitializationUtil.getPortNumber(connectionContext, getInstanceIdentifier()))
.setSwitchFeatures(DeviceInitializationUtil.getSwitchFeatures(connectionContext))
import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint64;
import io.netty.buffer.ByteBuf;
-import java.util.ArrayList;
-import java.util.List;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterKey;
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.GroupStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.reply.MultipartReplyBody;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
import org.opendaylight.yangtools.yang.common.Uint32;
public class MultipartReplyGroupStatsDeserializer implements OFDeserializer<MultipartReplyBody> {
@Override
public MultipartReplyBody deserialize(final ByteBuf message) {
- final MultipartReplyGroupStatsBuilder builder = new MultipartReplyGroupStatsBuilder();
- final List<GroupStats> items = new ArrayList<>();
+ final var items = BindingMap.<GroupStatsKey, GroupStats>orderedBuilder();
while (message.readableBytes() > 0) {
final int itemLength = message.readUnsignedShort();
.setNanosecond(new Counter32(readUint32(message)))
.build());
- final List<BucketCounter> subItems = new ArrayList<>();
+ final var subItems = BindingMap.<BucketCounterKey, BucketCounter>orderedBuilder();
int actualLength = GROUP_BODY_LENGTH;
int bucketKey = 0;
while (actualLength < itemLength) {
subItems.add(new BucketCounterBuilder()
- .setBucketId(new BucketId(Uint32.valueOf(bucketKey)))
+ .setBucketId(new BucketId(Uint32.valueOf(bucketKey++)))
.setPacketCount(new Counter64(readUint64(message)))
.setByteCount(new Counter64(readUint64(message)))
.build());
- bucketKey++;
actualLength += BUCKET_COUNTER_LENGTH;
}
items.add(itemBuilder
.setBuckets(new BucketsBuilder()
- .setBucketCounter(subItems)
+ .setBucketCounter(subItems.build())
.build())
.build());
}
- return builder
- .setGroupStats(items)
+ return new MultipartReplyGroupStatsBuilder()
+ .setGroupStats(items.build())
.build();
}
}
import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint64;
import io.netty.buffer.ByteBuf;
-import java.util.ArrayList;
-import java.util.List;
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
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.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapKey;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
public class MultipartReplyQueueStatsDeserializer implements OFDeserializer<MultipartReplyBody> {
@Override
public MultipartReplyBody deserialize(final ByteBuf message) {
- final MultipartReplyQueueStatsBuilder builder = new MultipartReplyQueueStatsBuilder();
- final List<QueueIdAndStatisticsMap> items = new ArrayList<>();
+ final var items = BindingMap.<QueueIdAndStatisticsMapKey, QueueIdAndStatisticsMap>orderedBuilder();
while (message.readableBytes() > 0) {
final long port = message.readUnsignedInt();
.build());
}
- return builder
- .setQueueIdAndStatisticsMap(items)
+ return new MultipartReplyQueueStatsBuilder()
+ .setQueueIdAndStatisticsMap(items.build())
.build();
}
-
}
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.reply.multipart.reply.body.MultipartReplyTableFeaturesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMissBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldBuilder;
.build();
}
- private static List<SetFieldMatch> readMatchFields(final ByteBuf message, final int length) {
- final List<SetFieldMatch> matchFields = new ArrayList<>();
+ private static Map<SetFieldMatchKey, SetFieldMatch> readMatchFields(final ByteBuf message, final int length) {
+ final var matchFields = BindingMap.<SetFieldMatchKey, SetFieldMatch>orderedBuilder();
final int startIndex = message.readerIndex();
while (message.readerIndex() - startIndex < length) {
- MATCH_FIELD_DESERIALIZER
- .deserialize(message)
- .map(matchFields::add)
- .orElseGet(() -> {
- message.skipBytes(2 * Short.BYTES);
- return Boolean.FALSE;
- });
+ final var field = MATCH_FIELD_DESERIALIZER.deserialize(message);
+ if (field.isPresent()) {
+ matchFields.add(field.orElseThrow());
+ } else {
+ message.skipBytes(2 * Short.BYTES);
+ }
}
- return matchFields;
+ return matchFields.build();
}
private static List<Uint8> readNextTableIds(final ByteBuf message, final int length) {
import org.opendaylight.yangtools.yang.binding.util.BindingMap;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
/**
* Transform between FlatBatch API and meter batch API.
if (input.getResult().getBatchFailedMetersOutput() != null) {
for (BatchFailedMetersOutput stepOutput : input.getResult().nonnullBatchFailedMetersOutput().values()) {
final BatchFailure batchFailure = new BatchFailureBuilder()
- .setBatchOrder(stepOffset + stepOutput.getBatchOrder().toJava())
+ .setBatchOrder(Uint16.valueOf(stepOffset + stepOutput.getBatchOrder().toJava()))
.setBatchItemIdChoice(new FlatBatchFailureMeterIdCaseBuilder()
.setMeterId(stepOutput.getMeterId())
.build())
* 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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutputBuilder;
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.common.types.rev130731.GroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsService<MultipartReply> {
}
@Override
- protected GetGroupStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
- final List<GroupStats> groupStats = new ArrayList<>();
+ protected GetGroupStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+ if (!success) {
+ return new GetGroupStatisticsOutputBuilder().build();
+ }
- if (success) {
- for (final MultipartReply mpReply : input) {
- final MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
- final MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
- final Optional<List<GroupStats>> groupStatsList = getConvertorExecutor().convert(
- replyBody.getGroupStats(), data);
+ final var groupStats = BindingMap.<GroupStatsKey, GroupStats>orderedBuilder();
+ for (final MultipartReply mpReply : input) {
+ final MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
+ final MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
+ final Optional<List<GroupStats>> groupStatsList = getConvertorExecutor().convert(
+ replyBody.getGroupStats(), data);
- groupStatsList.ifPresent(groupStats::addAll);
- }
+ groupStatsList.ifPresent(groupStats::addAll);
}
return new GetGroupStatisticsOutputBuilder()
- .setGroupStats(groupStats)
+ .setGroupStats(groupStats.build())
.build();
}
* 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 org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder;
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;
public class PortDirectStatisticsService extends AbstractPortDirectStatisticsService<MultipartReply> {
}
@Override
- protected GetNodeConnectorStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
- final List<NodeConnectorStatisticsAndPortNumberMap> nodeConnectorStatisticsAndPortNumberMap = new ArrayList<>();
-
- if (success) {
- for (final MultipartReply mpReply : input) {
- final MultipartReplyPortStatsCase caseBody =
- (MultipartReplyPortStatsCase) mpReply.getMultipartReplyBody();
- final MultipartReplyPortStats replyBody = caseBody.getMultipartReplyPortStats();
+ protected GetNodeConnectorStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+ if (!success) {
+ return new GetNodeConnectorStatisticsOutputBuilder().build();
+ }
- for (final PortStats portStats : replyBody.getPortStats()) {
- final NodeConnectorId nodeConnectorId = InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
- getDatapathId(), portStats.getPortNo(), getOfVersion());
+ final var nodeConnectorStatisticsAndPortNumberMap = BindingMap.<NodeConnectorStatisticsAndPortNumberMapKey,
+ NodeConnectorStatisticsAndPortNumberMap>orderedBuilder();
+ for (final MultipartReply mpReply : input) {
+ final MultipartReplyPortStatsCase caseBody =
+ (MultipartReplyPortStatsCase) mpReply.getMultipartReplyBody();
+ final MultipartReplyPortStats replyBody = caseBody.getMultipartReplyPortStats();
+
+ for (final PortStats portStats : replyBody.nonnullPortStats()) {
+ final DurationBuilder durationBuilder = new DurationBuilder();
+ if (portStats.getDurationSec() != null) {
+ durationBuilder.setSecond(new Counter32(portStats.getDurationSec()));
+ }
+ if (portStats.getDurationNsec() != null) {
+ durationBuilder.setNanosecond(new Counter32(portStats.getDurationNsec()));
+ }
- final BytesBuilder bytesBuilder = new BytesBuilder()
+ nodeConnectorStatisticsAndPortNumberMap.add(new NodeConnectorStatisticsAndPortNumberMapBuilder()
+ .setBytes(new BytesBuilder()
.setReceived(portStats.getRxBytes())
- .setTransmitted(portStats.getTxBytes());
-
- final PacketsBuilder packetsBuilder = new PacketsBuilder()
+ .setTransmitted(portStats.getTxBytes())
+ .build())
+ .setPackets(new PacketsBuilder()
.setReceived(portStats.getRxPackets())
- .setTransmitted(portStats.getTxPackets());
-
- final DurationBuilder durationBuilder = new DurationBuilder();
-
- if (portStats.getDurationSec() != null) {
- durationBuilder.setSecond(new Counter32(portStats.getDurationSec()));
- }
-
- if (portStats.getDurationNsec() != null) {
- durationBuilder.setNanosecond(new Counter32(portStats.getDurationNsec()));
- }
-
- final NodeConnectorStatisticsAndPortNumberMap stats =
- new NodeConnectorStatisticsAndPortNumberMapBuilder()
- .setBytes(bytesBuilder.build())
- .setPackets(packetsBuilder.build())
- .setNodeConnectorId(nodeConnectorId)
- .setDuration(durationBuilder.build())
- .setCollisionCount(portStats.getCollisions())
- .withKey(new NodeConnectorStatisticsAndPortNumberMapKey(nodeConnectorId))
- .setReceiveCrcError(portStats.getRxCrcErr()).setReceiveDrops(portStats.getRxDropped())
- .setReceiveErrors(portStats.getRxErrors())
- .setReceiveFrameError(portStats.getRxFrameErr())
- .setReceiveOverRunError(portStats.getRxOverErr())
- .setTransmitDrops(portStats.getTxDropped())
- .setTransmitErrors(portStats.getTxErrors())
- .build();
-
- nodeConnectorStatisticsAndPortNumberMap.add(stats);
- }
+ .setTransmitted(portStats.getTxPackets())
+ .build())
+ .setNodeConnectorId(InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(getDatapathId(),
+ portStats.getPortNo(), getOfVersion()))
+ .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())
+ .build());
}
}
return new GetNodeConnectorStatisticsOutputBuilder()
- .setNodeConnectorStatisticsAndPortNumberMap(nodeConnectorStatisticsAndPortNumberMap)
+ .setNodeConnectorStatisticsAndPortNumberMap(nodeConnectorStatisticsAndPortNumberMap.build())
.build();
}
package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilayer;
-import java.util.ArrayList;
import java.util.List;
import org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
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;
public class QueueDirectStatisticsService extends AbstractQueueDirectStatisticsService<MultipartReply> {
}
@Override
- protected GetQueueStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
- final List<QueueIdAndStatisticsMap> queueIdAndStatisticsMap = new ArrayList<>();
-
- if (success) {
- for (final MultipartReply mpReply : input) {
- final MultipartReplyQueueCase caseBody = (MultipartReplyQueueCase) mpReply.getMultipartReplyBody();
- final MultipartReplyQueue replyBody = caseBody.getMultipartReplyQueue();
-
- for (final QueueStats queueStats : replyBody.getQueueStats()) {
- final DurationBuilder durationBuilder = new DurationBuilder()
- .setSecond(new Counter32(queueStats.getDurationSec()))
- .setNanosecond(new Counter32(queueStats.getDurationNsec()));
-
- final QueueId queueId = new QueueId(queueStats.getQueueId());
- final NodeConnectorId nodeConnectorId = InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
- getDatapathId(), queueStats.getPortNo(), getOfVersion());
-
- final QueueIdAndStatisticsMapBuilder statsBuilder = new QueueIdAndStatisticsMapBuilder()
- .withKey(new QueueIdAndStatisticsMapKey(nodeConnectorId, queueId))
- .setNodeConnectorId(nodeConnectorId)
- .setTransmissionErrors(new Counter64(queueStats.getTxErrors()))
- .setTransmittedBytes(new Counter64(queueStats.getTxBytes()))
- .setTransmittedPackets(new Counter64(queueStats.getTxPackets()))
- .setQueueId(queueId)
- .setDuration(durationBuilder.build());
-
- queueIdAndStatisticsMap.add(statsBuilder.build());
- }
+ protected GetQueueStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+ if (!success) {
+ return new GetQueueStatisticsOutputBuilder().build();
+ }
+
+ final var queueIdAndStatisticsMap =
+ BindingMap.<QueueIdAndStatisticsMapKey, QueueIdAndStatisticsMap>orderedBuilder();
+
+ for (final MultipartReply mpReply : input) {
+ final MultipartReplyQueueCase caseBody = (MultipartReplyQueueCase) mpReply.getMultipartReplyBody();
+ final MultipartReplyQueue replyBody = caseBody.getMultipartReplyQueue();
+
+ for (final QueueStats queueStats : replyBody.nonnullQueueStats()) {
+ final DurationBuilder durationBuilder = new DurationBuilder()
+ .setSecond(new Counter32(queueStats.getDurationSec()))
+ .setNanosecond(new Counter32(queueStats.getDurationNsec()));
+
+ final QueueId queueId = new QueueId(queueStats.getQueueId());
+ final NodeConnectorId nodeConnectorId = InventoryDataServiceUtil.nodeConnectorIdfromDatapathPortNo(
+ getDatapathId(), queueStats.getPortNo(), getOfVersion());
+
+ final QueueIdAndStatisticsMapBuilder statsBuilder = new QueueIdAndStatisticsMapBuilder()
+ .setNodeConnectorId(nodeConnectorId)
+ .setQueueId(queueId)
+ .setTransmissionErrors(new Counter64(queueStats.getTxErrors()))
+ .setTransmittedBytes(new Counter64(queueStats.getTxBytes()))
+ .setTransmittedPackets(new Counter64(queueStats.getTxPackets()))
+ .setDuration(durationBuilder.build());
+
+ queueIdAndStatisticsMap.add(statsBuilder.build());
}
}
return new GetQueueStatisticsOutputBuilder()
- .setQueueIdAndStatisticsMap(queueIdAndStatisticsMap)
+ .setQueueIdAndStatisticsMap(queueIdAndStatisticsMap.build())
.build();
}
* 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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
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.request.multipart.request.body.MultipartRequestQueueStatsBuilder;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
public class QueueDirectStatisticsService extends AbstractQueueDirectStatisticsService<MultipartReply> {
-
public QueueDirectStatisticsService(final RequestContextStack requestContextStack,
final DeviceContext deviceContext,
final ConvertorExecutor convertorExecutor,
}
@Override
- protected GetQueueStatisticsOutput buildReply(List<MultipartReply> input, boolean success) {
- return new GetQueueStatisticsOutputBuilder()
- .setQueueIdAndStatisticsMap(input
- .stream()
- .flatMap(multipartReply -> ((MultipartReplyQueueStats) multipartReply.getMultipartReplyBody())
- .nonnullQueueIdAndStatisticsMap().values()
- .stream())
- .collect(Collectors.toList()))
+ protected GetQueueStatisticsOutput buildReply(final List<MultipartReply> input, final boolean success) {
+ final var map = input.stream()
+ .flatMap(multipartReply -> ((MultipartReplyQueueStats) multipartReply.getMultipartReplyBody())
+ .nonnullQueueIdAndStatisticsMap().values()
+ .stream())
+ .collect(BindingMap.toOrderedMap());
+
+ return new GetQueueStatisticsOutputBuilder()
+ .setQueueIdAndStatisticsMap(map)
.build();
}
.build())
.build();
}
-
}
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint8;
public final class FlowUtil {
if (!flowModOutput.isSuccessful()) {
batchFlows.add(new BatchFailedFlowsOutputBuilder()
.setFlowId(flowId)
- .setBatchOrder(batchOrder)
+ .setBatchOrder(Uint16.valueOf(batchOrder))
.build());
flowErrors.addAll(flowModOutput.getErrors());
}
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
import org.opendaylight.yangtools.yang.common.Uint32;
/**
if (!groupModOutput.isSuccessful()) {
batchGroups.add(new BatchFailedGroupsOutputBuilder()
.setGroupId(groupId)
- .setBatchOrder(batchOrder)
+ .setBatchOrder(Uint16.valueOf(batchOrder))
.build());
groupErrors.addAll(groupModOutput.getErrors());
}
import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
/**
* Provides meter util methods.
private final int sizeOfInputBatch;
CumulativeFunction(
- Iterable<? extends org.opendaylight.yang.gen.v1.urn
- .opendaylight.meter.types.rev130918.Meter> inputBatchMeters, int sizeOfInputBatch) {
+ final Iterable<? extends org.opendaylight.yang.gen.v1.urn
+ .opendaylight.meter.types.rev130918.Meter> inputBatchMeters, final int sizeOfInputBatch) {
this.inputBatchMeters = inputBatchMeters;
this.sizeOfInputBatch = sizeOfInputBatch;
}
if (!meterModOutput.isSuccessful()) {
batchMeters.add(new BatchFailedMetersOutputBuilder()
- .setBatchOrder(batchOrder)
+ .setBatchOrder(Uint16.valueOf(batchOrder))
.setMeterId(meterId)
.build());
meterErrors.addAll(meterModOutput.getErrors());
final List<MultipartReply> input = Collections.singletonList(reply);
when(nodeConnector.getPortStats()).thenReturn(nodeConnectorStats);
+ when(nodeConnector.nonnullPortStats()).thenCallRealMethod();
when(nodeConnectorCase.getMultipartReplyPortStats()).thenReturn(nodeConnector);
when(reply.getMultipartReplyBody()).thenReturn(nodeConnectorCase);
when(nodeConnectorStat.getTxErrors()).thenReturn(Uint64.ONE);
final GetNodeConnectorStatisticsOutput output = service.buildReply(input, true);
- assertTrue(output.getNodeConnectorStatisticsAndPortNumberMap().size() > 0);
+ assertTrue(output.nonnullNodeConnectorStatisticsAndPortNumberMap().size() > 0);
final NodeConnectorStatisticsAndPortNumberMap stats =
output.nonnullNodeConnectorStatisticsAndPortNumberMap().values().iterator().next();
final List<MultipartReply> input = Collections.singletonList(reply);
when(queue.getQueueStats()).thenReturn(queueStats);
+ when(queue.nonnullQueueStats()).thenCallRealMethod();
when(queueCase.getMultipartReplyQueue()).thenReturn(queue);
when(reply.getMultipartReplyBody()).thenReturn(queueCase);