b9fd336692cbe122a3c113787d5a1b9b241df986
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / MeterStatsResponseConvertor.java
1 /*
2  * Copyright (c) 2013, 2015 IBM Corporation and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
10
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.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
26 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;
27
28 /**
29  * Converts list of OF library meter stats to MD-SAL meter stats.
30  *
31  * Example usage:
32  * <pre>
33  * {@code
34  * Optional<List<MeterStats>> salMeterStats = ConvertorManager.getInstance().convert(
35  *  ofMeterStats);
36  * }
37  * </pre>
38  */
39 public class MeterStatsResponseConvertor implements Convertor<
40         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
41                 .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats>,
42         List<MeterStats>> {
43
44     @Override
45     public Class<?> getType() {
46         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;
47     }
48
49     @Override
50     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) {
51         List<MeterStats> convertedSALMeters = new ArrayList<>();
52
53         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
54                 multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats : source) {
55             // Convert MeterStats message from library to MD SAL defined MeterStats
56             MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
57             salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
58
59             DurationBuilder time = new DurationBuilder();
60             time.setSecond(new Counter32(meterStats.getDurationSec()));
61             time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
62             salMeterStats.setDuration(time.build());
63
64             salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
65             salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
66             salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
67             salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
68
69             List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
70
71             MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
72             List<BandStat> listAllBandStats = new ArrayList<>();
73             int bandKey = 0;
74
75             for (MeterBandStats meterBandStats : allMeterBandStats) {
76                 BandStatBuilder bandStatBuilder = new BandStatBuilder();
77                 bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
78                 bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
79                 BandId bandId = new BandId((long) bandKey);
80                 bandStatBuilder.setKey(new BandStatKey(bandId));
81                 bandStatBuilder.setBandId(bandId);
82                 bandKey++;
83                 listAllBandStats.add(bandStatBuilder.build());
84             }
85
86             meterBandStatsBuilder.setBandStat(listAllBandStats);
87             salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
88             convertedSALMeters.add(salMeterStats.build());
89         }
90
91         return convertedSALMeters;
92     }
93 }