+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
+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;
+
+/**
+ * Converts GroupDesc message from library to MD SAL defined GroupDescStats
+ *
+ * Example usage:
+ * <pre>
+ * {@code
+ * VersionConvertorData data = new VersionConvertorData(version);
+ * Optional<List<GroupDescStats>> salGroupStats = ConvertorManager.getInstance().convert(ofGroupStats, data);
+ * }
+ * </pre>
+ */
+public class GroupDescStatsResponseConvertor implements ParametrizedConvertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
+
+ private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(List<BucketsList> bucketDescStats, short version) {
+ final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
+ data.setActionPath(ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
+
+ org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
+ List<Bucket> allBuckets = new ArrayList<>();
+ int bucketKey = 0;
+
+ for (BucketsList bucketDetails : bucketDescStats) {
+ BucketBuilder bucketDesc = new BucketBuilder();
+ final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> convertedSalActions =
+ ConvertorManager.getInstance().convert(
+ bucketDetails.getAction(), data);
+
+
+ if (convertedSalActions.isPresent()) {
+ List<Action> actions = new ArrayList<>();
+
+ int actionKey = 0;
+
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions.get()) {
+ ActionBuilder wrappedAction = new ActionBuilder();
+ wrappedAction.setAction(action);
+ wrappedAction.setKey(new ActionKey(actionKey));
+ wrappedAction.setOrder(actionKey);
+ actions.add(wrappedAction.build());
+ actionKey++;
+ }
+
+ bucketDesc.setAction(actions);
+ } else {
+ bucketDesc.setAction(Collections.emptyList());
+ }
+
+ bucketDesc.setWeight(bucketDetails.getWeight());
+ bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
+ bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
+ BucketId bucketId = new BucketId((long) bucketKey);
+ bucketDesc.setBucketId(bucketId);
+ bucketDesc.setKey(new BucketKey(bucketId));
+ bucketKey++;
+ allBuckets.add(bucketDesc.build());
+ }
+
+ salBucketsDesc.setBucket(allBuckets);
+ return salBucketsDesc.build();
+ }
+
+ @Override
+ public Class<?> getType() {
+ return GroupDesc.class;
+ }
+
+ @Override
+ public List<GroupDescStats> convert(List<GroupDesc> source, VersionConvertorData data) {
+ List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
+
+ for (GroupDesc groupDesc : source) {
+ GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
+
+ salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), data.getVersion()));
+ salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
+ salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
+ salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
+
+ convertedSALGroupsDesc.add(salGroupDescStats.build());
+ }
+
+ return convertedSALGroupsDesc;
+ }
+}
\ No newline at end of file