2 * Copyright IBM Corporation, 2013. All rights reserved.
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
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
11 import java.util.ArrayList;
12 import java.util.List;
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.grouping.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;
42 * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
44 * @author avishnoi@in.ibm.com
47 public class GroupStatsResponseConvertor {
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));
57 return convertedSALGroups;
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
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){
69 GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
71 salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
72 salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
74 DurationBuilder time = new DurationBuilder();
75 time.setSecond(new Counter32(groupStats.getDurationSec()));
76 time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
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()));
84 return salGroupStats.build();
87 public Buckets toSALBuckets(
88 List<BucketStats> bucketStats ){
90 BucketsBuilder salBuckets = new BucketsBuilder();
92 List<BucketCounter> allBucketStats = new ArrayList<>();
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);
102 allBucketStats.add(bucketCounter.build());
104 salBuckets.setBucketCounter(allBucketStats);
105 return salBuckets.build();
109 public List<GroupDescStats> toSALGroupDescStatsList(
110 List<GroupDesc> allGroupDescStats){
112 List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
113 for(GroupDesc groupDesc: allGroupDescStats){
114 convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc));
116 return convertedSALGroupsDesc;
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
124 public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc){
126 GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
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()));
133 return salGroupDescStats.build();
136 public org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
137 List<BucketsList> bucketDescStats ){
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<>();
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.getAction());
148 List<Action> actions = new ArrayList<>();
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());
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));
166 allBuckets.add(bucketDesc.build());
168 salBucketsDesc.setBucket(allBuckets);
169 return salBucketsDesc.build();