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;
15 import java.util.Optional;
17 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
18 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
19 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
20 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
35 import org.opendaylight.yangtools.yang.binding.DataContainer;
38 * Converts GroupDesc message from library to MD SAL defined GroupDescStats
43 * VersionConvertorData data = new VersionConvertorData(version);
44 * Optional<List<GroupDescStats>> salGroupStats = convertorManager.convert(ofGroupStats, data);
48 public class GroupDescStatsResponseConvertor extends Convertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
50 private static final Set<Class<?>> TYPES = Collections.singleton(GroupDesc.class);
52 private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(List<BucketsList> bucketDescStats, short version) {
53 final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
54 data.setActionPath(ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
56 org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
57 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
58 List<Bucket> allBuckets = new ArrayList<>();
61 for (BucketsList bucketDetails : bucketDescStats) {
62 BucketBuilder bucketDesc = new BucketBuilder();
63 final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> convertedSalActions =
64 getConvertorExecutor().convert(
65 bucketDetails.getAction(), data);
68 if (convertedSalActions.isPresent()) {
69 List<Action> actions = new ArrayList<>();
73 for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions.get()) {
74 ActionBuilder wrappedAction = new ActionBuilder();
75 wrappedAction.setAction(action);
76 wrappedAction.setKey(new ActionKey(actionKey));
77 wrappedAction.setOrder(actionKey);
78 actions.add(wrappedAction.build());
82 bucketDesc.setAction(actions);
84 bucketDesc.setAction(Collections.emptyList());
87 bucketDesc.setWeight(bucketDetails.getWeight());
88 bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
89 bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
90 BucketId bucketId = new BucketId((long) bucketKey);
91 bucketDesc.setBucketId(bucketId);
92 bucketDesc.setKey(new BucketKey(bucketId));
94 allBuckets.add(bucketDesc.build());
97 salBucketsDesc.setBucket(allBuckets);
98 return salBucketsDesc.build();
102 public Collection<Class<?>> getTypes() {
107 public List<GroupDescStats> convert(List<GroupDesc> source, VersionConvertorData data) {
108 List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
110 for (GroupDesc groupDesc : source) {
111 GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
113 salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), data.getVersion()));
114 salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
115 salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
116 salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
118 convertedSALGroupsDesc.add(salGroupDescStats.build());
121 return convertedSALGroupsDesc;