Updating Test Cases for SetField Action
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / MeterStatsResponseConvertor.java
1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter32;
7 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.Counter64;
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
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.meter.band.header.meter.band.MeterBandDropCase;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter;
36 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;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands;
39
40 /**
41  * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
42  * messages.
43  * @author avishnoi@in.ibm.com
44  *
45  */
46 public class MeterStatsResponseConvertor {
47
48     /**
49      * Method converts list of OF Meter Stats to SAL Meter Stats.
50      * @param allMeterStats
51      * @return List of MeterStats
52      */
53     public List<MeterStats> toSALMeterStatsList(
54             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
55             .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats> allMeterStats){
56         List<MeterStats> convertedSALMeters = new ArrayList<MeterStats>();
57         for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
58                 multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meter: allMeterStats){
59             convertedSALMeters.add(toSALMeterStats(meter));
60         }
61         return convertedSALMeters;
62         
63     }
64     
65     /**
66      * Method convert MeterStats message from library to MD SAL defined MeterStats  
67      * @param meterStats MeterStats from library
68      * @return MeterStats -- MeterStats defined in MD-SAL
69      */
70     public MeterStats toSALMeterStats(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
71             .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats){
72         
73         MeterStatsBuilder salMeterStats = new MeterStatsBuilder();
74         salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount()));
75         
76         DurationBuilder time = new DurationBuilder();
77         time.setSecond(new Counter32(meterStats.getDurationSec()));
78         time.setNanosecond(new Counter32(meterStats.getDurationNsec()));
79         salMeterStats.setDuration(time.build());
80         
81         salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount()));
82         salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue()));
83         salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount()));
84         salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId()));
85         
86         List<MeterBandStats> allMeterBandStats = meterStats.getMeterBandStats();
87         
88         MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder();
89         List<BandStat> listAllBandStats = new ArrayList<BandStat>();
90         int bandKey = 0;
91         for(MeterBandStats meterBandStats : allMeterBandStats){
92             BandStatBuilder bandStatBuilder = new BandStatBuilder(); 
93             bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount()));
94             bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount()));
95             BandId bandId = new BandId((long) bandKey);
96             bandStatBuilder.setKey(new BandStatKey(bandId));
97             bandStatBuilder.setBandId(bandId);
98             bandKey++;
99             listAllBandStats.add(bandStatBuilder.build());
100         }
101         meterBandStatsBuilder.setBandStat(listAllBandStats);
102         salMeterStats.setMeterBandStats(meterBandStatsBuilder.build());
103         return salMeterStats.build();
104     }
105     
106     /**
107      * Method convert list of OF Meter config Stats to SAL Meter Config stats 
108      * @param allMeterConfigs
109      * @return list of MeterConfigStats
110      */
111     public List<MeterConfigStats> toSALMeterConfigList(List<MeterConfig> allMeterConfigs){
112         
113         List<MeterConfigStats> listMeterConfigStats = new ArrayList<MeterConfigStats>();
114         for( MeterConfig meterConfig : allMeterConfigs){
115             MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder();
116             meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue()));
117             meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId()));
118             
119             MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
120             List<Bands> bands = meterConfig.getBands();
121             
122             List<MeterBandHeader> listBandHeaders = new ArrayList<MeterBandHeader>();
123             int bandKey=0;
124             for(Bands band : bands){
125                 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
126                 if(band.getMeterBand() instanceof MeterBandDropCase){
127                     MeterBandDropCase dropCaseBand = (MeterBandDropCase)band.getMeterBand();
128                     MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop();
129                     DropBuilder dropBuilder = new DropBuilder();
130                     dropBuilder.setBurstSize(dropBand.getBurstSize());
131                     dropBuilder.setRate(dropBand.getRate());
132                     meterBandHeaderBuilder.setBandType(dropBuilder.build());
133                     
134                     meterBandHeaderBuilder.setBurstSize(dropBand.getBurstSize());
135                     meterBandHeaderBuilder.setRate(dropBand.getRate());
136                     BandId bandId = new BandId((long)bandKey);
137                     meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
138                     meterBandHeaderBuilder.setBandId(bandId);
139                     
140                     MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
141                     meterBandTypesBuilder.setFlags(new MeterBandType(true,false,false));
142                     meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
143                     
144                     listBandHeaders.add(meterBandHeaderBuilder.build());
145                 }else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase){
146                     MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase)band.getMeterBand();
147                     MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark();
148                     DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder();
149                     dscpRemarkBuilder.setBurstSize(dscpRemarkBand.getBurstSize());
150                     dscpRemarkBuilder.setRate(dscpRemarkBand.getRate());
151                     meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build());
152                     
153                     meterBandHeaderBuilder.setBurstSize(dscpRemarkBand.getBurstSize());
154                     meterBandHeaderBuilder.setRate(dscpRemarkBand.getRate());
155                     BandId bandId = new BandId((long)bandKey);
156                     meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
157                     meterBandHeaderBuilder.setBandId(bandId);
158                     
159                     MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
160                     meterBandTypesBuilder.setFlags(new MeterBandType(false,true,false));
161                     meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
162                     
163                     listBandHeaders.add(meterBandHeaderBuilder.build());
164                     
165                 }else if (band.getMeterBand() instanceof MeterBandExperimenterCase){
166                     MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase)band.getMeterBand();
167                     MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter();
168                     ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder();
169                     experimenterBuilder.setBurstSize(experimenterBand.getBurstSize());
170                     experimenterBuilder.setRate(experimenterBand.getRate());
171                     meterBandHeaderBuilder.setBandType(experimenterBuilder.build());
172                     
173                     meterBandHeaderBuilder.setBurstSize(experimenterBand.getBurstSize());
174                     meterBandHeaderBuilder.setRate(experimenterBand.getRate());
175                     BandId bandId = new BandId((long)bandKey);
176                     meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId));
177                     meterBandHeaderBuilder.setBandId(bandId);
178                     
179                     MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder();
180                     meterBandTypesBuilder.setFlags(new MeterBandType(false,false,true));
181                     meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build());
182
183                     listBandHeaders.add(meterBandHeaderBuilder.build());
184                     
185                 }
186                 bandKey++;
187             }
188             meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders);
189             meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build());
190             listMeterConfigStats.add(meterConfigStatsBuilder.build());
191         }
192         
193         return listMeterConfigStats;
194     }
195 }