Bug 5540 - GroupConvertor, GroupStatsConvertor, GroupDescStatsConvertor
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupDescStatsResponseConvertor.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.Collections;
13 import java.util.List;
14 import java.util.Optional;
15 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
18 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
32 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;
33
34 /**
35  * Converts GroupDesc message from library to MD SAL defined GroupDescStats
36  *
37  * Example usage:
38  * <pre>
39  * {@code
40  * VersionConvertorData data = new VersionConvertorData(version);
41  * Optional<List<GroupDescStats>> salGroupStats = ConvertorManager.getInstance().convert(ofGroupStats, data);
42  * }
43  * </pre>
44  */
45 public class GroupDescStatsResponseConvertor implements ParametrizedConvertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
46
47     private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(List<BucketsList> bucketDescStats, short version) {
48         final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
49         data.setActionPath(ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
50
51         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
52                 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
53         List<Bucket> allBuckets = new ArrayList<>();
54         int bucketKey = 0;
55
56         for (BucketsList bucketDetails : bucketDescStats) {
57             BucketBuilder bucketDesc = new BucketBuilder();
58             final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> convertedSalActions =
59                     ConvertorManager.getInstance().convert(
60                             bucketDetails.getAction(), data);
61
62
63             if (convertedSalActions.isPresent()) {
64                 List<Action> actions = new ArrayList<>();
65
66                 int actionKey = 0;
67
68                 for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions.get()) {
69                     ActionBuilder wrappedAction = new ActionBuilder();
70                     wrappedAction.setAction(action);
71                     wrappedAction.setKey(new ActionKey(actionKey));
72                     wrappedAction.setOrder(actionKey);
73                     actions.add(wrappedAction.build());
74                     actionKey++;
75                 }
76
77                 bucketDesc.setAction(actions);
78             } else {
79                 bucketDesc.setAction(Collections.emptyList());
80             }
81
82             bucketDesc.setWeight(bucketDetails.getWeight());
83             bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
84             bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
85             BucketId bucketId = new BucketId((long) bucketKey);
86             bucketDesc.setBucketId(bucketId);
87             bucketDesc.setKey(new BucketKey(bucketId));
88             bucketKey++;
89             allBuckets.add(bucketDesc.build());
90         }
91
92         salBucketsDesc.setBucket(allBuckets);
93         return salBucketsDesc.build();
94     }
95
96     @Override
97     public Class<?> getType() {
98         return GroupDesc.class;
99     }
100
101     @Override
102     public List<GroupDescStats> convert(List<GroupDesc> source, VersionConvertorData data) {
103         List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
104
105         for (GroupDesc groupDesc : source) {
106             GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
107
108             salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), data.getVersion()));
109             salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
110             salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
111             salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
112
113             convertedSALGroupsDesc.add(salGroupDescStats.build());
114         }
115
116         return convertedSALGroupsDesc;
117     }
118 }