792492d4d4cfbbb9661d8eb69f1cddfda0bd82b1
[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  * <p>
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
47             .reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats>,
48         List<GroupStats>,
49         VersionConvertorData> {
50
51     private static final Set<Class<?>> TYPES = Collections.singleton(org.opendaylight.yang.gen.v1.urn.opendaylight
52             .openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart
53                 .reply.group.GroupStats.class);
54
55     private Buckets toSALBuckets(List<BucketStats> bucketStats) {
56         BucketsBuilder salBuckets = new BucketsBuilder();
57
58         List<BucketCounter> allBucketStats = new ArrayList<>();
59         int bucketKey = 0;
60
61         for (BucketStats bucketStat : bucketStats) {
62             BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
63             bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
64             bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
65             BucketId bucketId = new BucketId((long) bucketKey);
66             bucketCounter.setKey(new BucketCounterKey(bucketId));
67             bucketCounter.setBucketId(bucketId);
68             bucketKey++;
69             allBucketStats.add(bucketCounter.build());
70         }
71
72         salBuckets.setBucketCounter(allBucketStats);
73         return salBuckets.build();
74     }
75
76     @Override
77     public Collection<Class<?>> getTypes() {
78         return TYPES;
79     }
80
81     @Override
82     public List<GroupStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
83             .multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> source,
84             VersionConvertorData data) {
85         List<GroupStats> convertedSALGroups = new ArrayList<>();
86
87         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply
88                 .body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats : source) {
89             GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
90
91             salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
92             salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
93
94             DurationBuilder time = new DurationBuilder();
95             time.setSecond(new Counter32(groupStats.getDurationSec()));
96             time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
97
98             salGroupStats.setDuration(time.build());
99             salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
100             salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
101             salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
102             salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
103             convertedSALGroups.add(salGroupStats.build());
104         }
105
106         return convertedSALGroups;
107     }
108 }