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