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