X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2Fservices%2Fcompatibility%2FMeterStatisticsToNotificationTransformer.java;h=de3788bb936657665ec95950f8dab38a2d9afb3e;hb=05f8db12159673d0e0a95642fe86e62c14b7dc7b;hp=f4f09234fb4b7a08e311145e5cd151a76b18af1d;hpb=beaf57528af475963dc72aaa66c00f666d3ab7a6;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java index f4f09234fb..de3788bb93 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java @@ -8,11 +8,17 @@ 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.MeterStatsResponseConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdatedBuilder; @@ -22,34 +28,52 @@ 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; /** - * pulled out meter stats to notification transformation + * Pulled out meter stats to notification transformation. */ -public class MeterStatisticsToNotificationTransformer { +public final class MeterStatisticsToNotificationTransformer { - private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor(); + private MeterStatisticsToNotificationTransformer() { + // Hide implicit constructor + } /** + * Transform statistics to notification. + * * @param mpReplyList raw multipart response from device - * @param deviceInfo device state + * @param deviceInfo device state * @param ofVersion device version - * @param emulatedTxId + * @param emulatedTxId emulated transaction Id + * @param convertorExecutor convertor executor * @return notification containing flow stats */ public static MeterStatisticsUpdated transformToNotification(final List mpReplyList, final DeviceInfo deviceInfo, final OpenflowVersion ofVersion, - final TransactionId emulatedTxId) { + final TransactionId emulatedTxId, + 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()); + notification.setMeterStats(new ArrayList<>()); for (MultipartReply mpReply : mpReplyList) { MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody(); MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter(); - notification.getMeterStats().addAll(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats())); + final Optional> meterStatsList = + convertorExecutor.convert(replyBody.getMeterStats(), data); + + meterStatsList.ifPresent(meterStats -> { + if (notification.getMeterStats() == null) { + notification.setMeterStats(Lists.newArrayList(meterStats)); + } else { + Set stats = new HashSet<>(notification.getMeterStats().values()); + stats.addAll(meterStats); + notification.setMeterStats(stats.stream().collect(Collectors.toList())); + } + }); } return notification.build();