2 * Copyright (c) 2013, 2015 IBM Corporation and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
15 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats;
28 import org.opendaylight.yangtools.yang.binding.DataContainer;
31 * Converts list of OF library meter stats to MD-SAL meter stats.
36 * Optional<List<MeterStats>> salMeterStats = ConvertorManager.getInstance().convert(
41 public class MeterStatsResponseConvertor implements Convertor<
42 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
43 .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats>,
45 VersionConvertorData> {
48 public Class<? extends DataContainer> getType() {
49 return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats.class;
53 public List<MeterStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> source, VersionConvertorData data) {
54 List<MeterStats> convertedSALMeters = new ArrayList<>();
56 for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
57 multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats : source) {
58 // Convert MeterStats message from library to MD SAL defined MeterStats
59 MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
60 salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
62 DurationBuilder time = new DurationBuilder();
63 time.setSecond(new Counter32(meterStats.getDurationSec()));
64 time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
65 salMeterStats.setDuration(time.build());
67 salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
68 salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
69 salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
70 salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
72 List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
74 MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
75 List<BandStat> listAllBandStats = new ArrayList<>();
78 for (MeterBandStats meterBandStats : allMeterBandStats) {
79 BandStatBuilder bandStatBuilder = new BandStatBuilder();
80 bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
81 bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
82 BandId bandId = new BandId((long) bandKey);
83 bandStatBuilder.setKey(new BandStatKey(bandId));
84 bandStatBuilder.setBandId(bandId);
86 listAllBandStats.add(bandStatBuilder.build());
89 meterBandStatsBuilder.setBandStat(listAllBandStats);
90 salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
91 convertedSALMeters.add(salMeterStats.build());
94 return convertedSALMeters;