2 * Copyright (c) 2016 Cisco Systems, Inc. and others. 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.Collection;
13 import java.util.Collections;
14 import java.util.List;
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;
35 * Converts group related statistics messages coming from switch to MD-SAL messages.
40 * VersionConvertorData data = new VersionConvertorData(version);
41 * Optional<List<GroupStats>> salGroupStats = convertorManager.convert(ofGroupStats, data);
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>,
48 VersionConvertorData> {
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);
52 private Buckets toSALBuckets(List<BucketStats> bucketStats) {
53 BucketsBuilder salBuckets = new BucketsBuilder();
55 List<BucketCounter> allBucketStats = new ArrayList<>();
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);
66 allBucketStats.add(bucketCounter.build());
69 salBuckets.setBucketCounter(allBucketStats);
70 return salBuckets.build();
74 public Collection<Class<? extends DataContainer>> getTypes() {
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<>();
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();
86 salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
87 salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
89 DurationBuilder time = new DurationBuilder();
90 time.setSecond(new Counter32(groupStats.getDurationSec()));
91 time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
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());
101 return convertedSALGroups;