Updating Test Cases for SetField Action
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupStatsResponseConvertor.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.action.types.rev131112.action.list.Action;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.BucketsBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStats;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
32
33 /**
34  * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
35  * messages.
36  * @author avishnoi@in.ibm.com
37  *
38  */
39 public class GroupStatsResponseConvertor {
40
41     public List<GroupStats> toSALGroupStatsList(
42             List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
43             .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> allGroupStats){
44         List<GroupStats> convertedSALGroups = new ArrayList<>();
45         for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
46                 .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats group: allGroupStats){
47             convertedSALGroups.add(toSALGroupStats(group));
48         }
49         return convertedSALGroups;
50         
51     }
52     /**
53      * Method convert GroupStats message from library to MD SAL defined GroupStats  
54      * @param groupStats GroupStats from library
55      * @return GroupStats -- GroupStats defined in MD-SAL
56      */
57     public GroupStats toSALGroupStats(
58             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
59             multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats){
60         
61         GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
62         
63         salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
64         salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
65         
66         DurationBuilder time = new DurationBuilder();
67         time.setSecond(new Counter32(groupStats.getDurationSec()));
68         time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
69         
70         salGroupStats.setDuration(time.build());
71         salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
72         salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
73         salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
74         salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
75         
76         return salGroupStats.build();
77     }
78     
79     public Buckets toSALBuckets(
80             List<BucketStats> bucketStats ){
81         
82         BucketsBuilder salBuckets  = new BucketsBuilder();
83         
84         List<BucketCounter> allBucketStats = new ArrayList<>();
85         int bucketKey = 0;
86         for(BucketStats bucketStat : bucketStats){
87             BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
88             bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
89             bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
90             BucketId bucketId = new BucketId((long)bucketKey);
91             bucketCounter.setKey(new BucketCounterKey(bucketId));
92             bucketCounter.setBucketId(bucketId);
93             bucketKey++;
94             allBucketStats.add(bucketCounter.build());
95         }
96         salBuckets.setBucketCounter(allBucketStats);
97         return salBuckets.build();
98     }
99     
100     
101     public List<GroupDescStats> toSALGroupDescStatsList(
102             List<GroupDesc> allGroupDescStats){
103         
104         List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
105         for(GroupDesc groupDesc: allGroupDescStats){
106             convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc));
107         }
108         return convertedSALGroupsDesc;
109         
110     }
111     /**
112      * Method convert GroupStats message from library to MD SAL defined GroupStats  
113      * @param groupDesc GroupStats from library
114      * @return GroupStats -- GroupStats defined in MD-SAL
115      */
116     public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc){
117         
118         GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
119         
120         salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList()));
121         salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
122         salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
123         salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
124         
125         return salGroupDescStats.build();
126     }
127     
128     public  org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
129             List<BucketsList> bucketDescStats ){
130         
131         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc  = 
132                 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
133         List<Bucket> allBuckets = new ArrayList<>();
134         int bucketKey = 0;
135         for(BucketsList bucketDetails : bucketDescStats){
136             BucketBuilder bucketDesc = new BucketBuilder();
137             List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action> convertedSalActions = 
138                     ActionConvertor.toSALBucketActions (bucketDetails.getActionsList());
139             
140             List<Action> actions = new ArrayList<>(); 
141             int actionKey = 0;
142             for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions){
143                 ActionBuilder wrappedAction = new ActionBuilder();
144                 wrappedAction.setAction(action);
145                 wrappedAction.setKey(new ActionKey(actionKey));
146                 wrappedAction.setOrder(actionKey);
147                 actions.add(wrappedAction.build());
148                 actionKey++;
149             }
150             bucketDesc.setAction(actions);
151             bucketDesc.setWeight(bucketDetails.getWeight());
152             bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
153             bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
154             BucketId bucketId = new BucketId((long)bucketKey);
155             bucketDesc.setBucketId(bucketId);
156             bucketDesc.setKey(new BucketKey(bucketId));
157             bucketKey++;
158             allBuckets.add(bucketDesc.build());
159         }
160         salBucketsDesc.setBucket(allBuckets);
161         return salBucketsDesc.build();
162     }
163
164 }