39d1dc7141a7cb875b6d0e82963c8b1a318c4647
[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.Collection;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Set;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.DurationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStatKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey;
30 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;
31
32 /**
33  * Converts list of OF library meter stats to MD-SAL meter stats.
34  *
35  * <p>
36  * Example usage:
37  * <pre>
38  * {@code
39  * VersionConvertorData data = new VersionConvertorData(version);
40  * Optional<List<MeterStats>> salMeterStats = convertorManager.convert(ofMeterStats, data);
41  * }
42  * </pre>
43  */
44 public class MeterStatsResponseConvertor extends Convertor<
45         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
46                 .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats>,
47         List<MeterStats>,
48         VersionConvertorData> {
49
50     private static final Set<Class<?>> TYPES = Collections.singleton(org.opendaylight.yang.gen.v1.urn.opendaylight
51             .openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart
52                 .reply.meter.MeterStats.class);
53
54     @Override
55     public Collection<Class<?>> getTypes() {
56         return TYPES;
57     }
58
59     @Override
60     public List<MeterStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
61             .multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> source,
62             VersionConvertorData data) {
63         List<MeterStats> convertedSALMeters = new ArrayList<>();
64
65         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply
66                 .body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats : source) {
67             // Convert MeterStats message from library to MD SAL defined MeterStats
68             MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
69             salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
70
71             DurationBuilder time = new DurationBuilder();
72             time.setSecond(new Counter32(meterStats.getDurationSec()));
73             time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
74             salMeterStats.setDuration(time.build());
75
76             salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
77             salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
78             salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
79             salMeterStats.withKey(new MeterStatsKey(salMeterStats.getMeterId()));
80
81             List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
82
83             MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
84             List<BandStat> listAllBandStats = new ArrayList<>();
85             int bandKey = 0;
86
87             for (MeterBandStats meterBandStats : allMeterBandStats) {
88                 BandStatBuilder bandStatBuilder = new BandStatBuilder();
89                 bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
90                 bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
91                 BandId bandId = new BandId((long) bandKey);
92                 bandStatBuilder.withKey(new BandStatKey(bandId));
93                 bandStatBuilder.setBandId(bandId);
94                 bandKey++;
95                 listAllBandStats.add(bandStatBuilder.build());
96             }
97
98             meterBandStatsBuilder.setBandStat(listAllBandStats);
99             salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
100             convertedSALMeters.add(salMeterStats.build());
101         }
102
103         return convertedSALMeters;
104     }
105 }