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
8 package org.opendaylight.protocol.bgp.state;
10 import java.util.List;
11 import java.util.Optional;
12 import java.util.stream.Collectors;
13 import org.eclipse.jdt.annotation.NonNull;
14 import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer;
15 import org.opendaylight.protocol.bgp.rib.spi.state.BGPRibState;
16 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
17 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
18 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.afi.safi.StateBuilder;
19 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.AfiSafisBuilder;
20 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
21 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.GlobalBuilder;
22 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.AfiSafiType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalAfiSafiStateAugmentationBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
26 public final class GlobalUtil {
27 private GlobalUtil() {
32 * Build Openconfig Global containing RIB group stats from a list of BGP RIB State.
34 * @param ribState containing RIb Operational State
35 * @param bgpTableTypeRegistry BGP TableType Registry
36 * @return Global containing state
38 public static @NonNull Global buildGlobal(final BGPRibState ribState,
39 final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) {
40 return new GlobalBuilder().setState(buildState(ribState))
41 .setAfiSafis(new AfiSafisBuilder().setAfiSafi(buildAfisSafis(ribState, bgpTableTypeRegistry)).build())
46 * Build per AFI SAFI Openconfig Global State containing RIB group stats from a list of BGP RIB State.
48 * @param ribState containing RIb Operational State
49 * @param bgpTableTypeRegistry BGP TableType Registry
50 * @return List containing per afi/safi operational state
52 public static List<AfiSafi> buildAfisSafis(final BGPRibState ribState,
53 final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) {
54 return ribState.getPathsCount().keySet().stream()
55 .map(tk -> buildAfiSafi(ribState, tk, bgpTableTypeRegistry))
56 .collect(Collectors.toList());
60 * Build Openconfig Global State.
62 * @param ribState containing RIb Operational State
63 * @return Openconfig Global State
65 public static org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base
66 .State buildState(final BGPRibState ribState) {
67 return new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.StateBuilder()
68 .setAs(ribState.getAs())
69 .setRouterId(ribState.getRouteId())
70 .setTotalPaths(ribState.getTotalPathsCount())
71 .setTotalPrefixes(ribState.getTotalPrefixesCount())
76 * Build Afi Safi containing State.
78 * @param ribState containing RIb Operational State
79 * @param tablesKey table Key
80 * @param bgpTableTypeRegistry BGP TableType Registry
81 * @return Afi Safi Operational State
83 public static AfiSafi buildAfiSafi(final BGPRibState ribState, final TablesKey tablesKey,
84 final BGPTableTypeRegistryConsumer bgpTableTypeRegistry) {
85 final Optional<Class<? extends AfiSafiType>> optAfiSafi = bgpTableTypeRegistry.getAfiSafiType(tablesKey);
86 if (!optAfiSafi.isPresent()) {
89 return new AfiSafiBuilder()
90 .setAfiSafiName(optAfiSafi.get())
91 .setState(new StateBuilder()
92 .addAugmentation(new GlobalAfiSafiStateAugmentationBuilder()
93 .setTotalPaths(ribState.getPathCount(tablesKey))
94 .setTotalPrefixes(ribState.getPrefixesCount(tablesKey))