7326adbcf48d70881b5d5c05423a476c2bf56f17
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupStatsResponseConvertor.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.Collections;
13 import java.util.List;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.BucketsBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounterKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
28 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;
29
30 /**
31  * Converts group related statistics messages coming from switch to MD-SAL messages.
32  *
33  * Example usage:
34  * <pre>
35  * {@code
36  * Optional<List<GroupStats>> salGroupStats = ConvertorManager.getInstance().convert(ofGroupStats);
37  * }
38  * </pre>
39  */
40 public class GroupStatsResponseConvertor implements Convertor<
41         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats>,
42         List<GroupStats>> {
43
44     private Buckets toSALBuckets(List<BucketStats> bucketStats) {
45         BucketsBuilder salBuckets = new BucketsBuilder();
46
47         List<BucketCounter> allBucketStats = new ArrayList<>();
48         int bucketKey = 0;
49
50         for (BucketStats bucketStat : bucketStats) {
51             BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
52             bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
53             bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
54             BucketId bucketId = new BucketId((long) bucketKey);
55             bucketCounter.setKey(new BucketCounterKey(bucketId));
56             bucketCounter.setBucketId(bucketId);
57             bucketKey++;
58             allBucketStats.add(bucketCounter.build());
59         }
60
61         salBuckets.setBucketCounter(allBucketStats);
62         return salBuckets.build();
63     }
64
65     @Override
66     public Class<?> getType() {
67         return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats.class;
68     }
69
70     @Override
71     public List<GroupStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> source) {
72         List<GroupStats> convertedSALGroups = new ArrayList<>();
73
74         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
75                 .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats : source) {
76             GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
77
78             salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
79             salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
80
81             DurationBuilder time = new DurationBuilder();
82             time.setSecond(new Counter32(groupStats.getDurationSec()));
83             time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
84
85             salGroupStats.setDuration(time.build());
86             salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
87             salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
88             salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
89             salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
90             convertedSALGroups.add(salGroupStats.build());
91         }
92
93         return convertedSALGroups;
94     }
95 }