import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
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.FlowStatsResponseConvertor;
+import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.FlowStatsResponseConvertorData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowsStatisticsUpdate;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowsStatisticsUpdateBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
/**
- * pulled out flow stats to notification transformation
+ * Pulled out flow stats to notification transformation.
*/
public class FlowStatisticsToNotificationTransformer {
- private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor();
+ private FlowStatisticsToNotificationTransformer() {
+ // Hide implicit constructor
+ }
/**
+ * Transform to notification.
+ *
* @param mpResult 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 FlowsStatisticsUpdate transformToNotification(final List<MultipartReply> mpResult,
final DeviceInfo deviceInfo,
final OpenflowVersion ofVersion,
- final TransactionId emulatedTxId) {
+ final TransactionId emulatedTxId,
+ final ConvertorExecutor convertorExecutor) {
+ final FlowStatsResponseConvertorData data = new FlowStatsResponseConvertorData(ofVersion.getVersion());
+ data.setDatapathId(deviceInfo.getDatapathId());
+ data.setMatchPath(MatchPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH);
final FlowsStatisticsUpdateBuilder notification = new FlowsStatisticsUpdateBuilder();
final List<FlowAndStatisticsMapList> statsList = new ArrayList<>();
notification.setId(deviceInfo.getNodeId());
MultipartReplyFlowCase caseBody = (MultipartReplyFlowCase) mpRawReply.getMultipartReplyBody();
MultipartReplyFlow replyBody = caseBody.getMultipartReplyFlow();
- List<FlowAndStatisticsMapList> outStatsItem = flowStatsConvertor.toSALFlowStatsList(
- replyBody.getFlowStats(),
- deviceInfo.getDatapathId(),
- ofVersion);
- statsList.addAll(outStatsItem);
+ final Optional<List<FlowAndStatisticsMapList>> outStatsItem =
+ convertorExecutor.convert(replyBody.getFlowStats(), data);
+
+
+ if (outStatsItem.isPresent()) {
+ statsList.addAll(outStatsItem.get());
+ }
}
return notification.build();