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