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