c82a569469c7837a493822901d3bab13210ca24d
[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.Collection;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.Set;
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
36 /**
37  * Converts GroupDesc message from library to MD SAL defined GroupDescStats.
38  *
39  * <p>
40  * Example usage:
41  * <pre>
42  * {@code
43  * VersionConvertorData data = new VersionConvertorData(version);
44  * Optional<List<GroupDescStats>> salGroupStats = convertorManager.convert(ofGroupStats, data);
45  * }
46  * </pre>
47  */
48 public class GroupDescStatsResponseConvertor extends Convertor<List<GroupDesc>, List<GroupDescStats>,
49         VersionConvertorData> {
50
51     private static final Set<Class<?>> TYPES = Collections.singleton(GroupDesc.class);
52
53     private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
54             List<BucketsList> bucketDescStats, short version) {
55         final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
56         data.setActionPath(ActionPath.GROUP_DESC_STATS_UPDATED_BUCKET_ACTION);
57
58         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
59                 new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
60         List<Bucket> allBuckets = new ArrayList<>();
61         int bucketKey = 0;
62
63         for (BucketsList bucketDetails : bucketDescStats) {
64             BucketBuilder bucketDesc = new BucketBuilder();
65             final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>>
66                 convertedSalActions = getConvertorExecutor().convert(bucketDetails.getAction(), data);
67
68             if (convertedSalActions.isPresent()) {
69                 List<Action> actions = new ArrayList<>();
70
71                 int actionKey = 0;
72
73                 for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action :
74                         convertedSalActions.get()) {
75                     ActionBuilder wrappedAction = new ActionBuilder();
76                     wrappedAction.setAction(action);
77                     wrappedAction.withKey(new ActionKey(actionKey));
78                     wrappedAction.setOrder(actionKey);
79                     actions.add(wrappedAction.build());
80                     actionKey++;
81                 }
82
83                 bucketDesc.setAction(actions);
84             } else {
85                 bucketDesc.setAction(Collections.emptyList());
86             }
87
88             bucketDesc.setWeight(bucketDetails.getWeight());
89             bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
90             bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
91             BucketId bucketId = new BucketId((long) bucketKey);
92             bucketDesc.setBucketId(bucketId);
93             bucketDesc.withKey(new BucketKey(bucketId));
94             bucketKey++;
95             allBuckets.add(bucketDesc.build());
96         }
97
98         salBucketsDesc.setBucket(allBuckets);
99         return salBucketsDesc.build();
100     }
101
102     @Override
103     public Collection<Class<?>> getTypes() {
104         return TYPES;
105     }
106
107     @Override
108     public List<GroupDescStats> convert(List<GroupDesc> source, VersionConvertorData data) {
109         List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
110
111         for (GroupDesc groupDesc : source) {
112             GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
113
114             salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), data.getVersion()));
115             salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
116             salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
117             salGroupDescStats.withKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
118
119             convertedSALGroupsDesc.add(salGroupDescStats.build());
120         }
121
122         return convertedSALGroupsDesc;
123     }
124 }