MVPN RFC6514 Extendend communities
[bgpcep.git] / bgp / rib-spi / src / main / java / org / opendaylight / protocol / bgp / rib / spi / RibSupportUtils.java
1 /*
2  * Copyright (c) 2015 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.protocol.bgp.rib.spi;
9
10 import com.google.common.collect.ImmutableMap;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpAddPathTableType;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.peer.SupportedTablesKey;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
17 import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
20
21 public final class RibSupportUtils {
22
23     private static final QName AFI_QNAME = QName.create(Tables.QNAME, "afi").intern();
24     private static final QName SAFI_QNAME = QName.create(Tables.QNAME, "safi").intern();
25     private static final QName ADD_PATH_AFI_QNAME = QName.create(BgpAddPathTableType.QNAME, "afi").intern();
26     private static final QName ADD_PATH_SAFI_QNAME = QName.create(BgpAddPathTableType.QNAME, "safi").intern();
27
28     private RibSupportUtils() {
29         throw new UnsupportedOperationException("Utility class");
30     }
31
32     /**
33      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
34      *
35      * @param afi  Class representing AFI
36      * @param safi Class representing SAFI
37      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
38      */
39     public static NodeIdentifierWithPredicates toYangTablesKey(final Class<? extends AddressFamily> afi,
40             final Class<? extends SubsequentAddressFamily> safi) {
41         return toYangKey(Tables.QNAME, afi, safi);
42     }
43
44     /**
45      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
46      *
47      * @param id   QNAME representing node
48      * @param afi  Class representing AFI
49      * @param safi Class representing SAFI
50      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
51      */
52     public static NodeIdentifierWithPredicates toYangKey(final QName id, final Class<? extends AddressFamily> afi,
53             final Class<? extends SubsequentAddressFamily> safi) {
54         final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
55                 AFI_QNAME, BindingReflections.findQName(afi),
56                 SAFI_QNAME, BindingReflections.findQName(safi));
57         return new NodeIdentifierWithPredicates(id, keyValues);
58     }
59
60
61     /**
62      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
63      *
64      * @param id   QNAME representing node
65      * @param afi  Class representing AFI
66      * @param safi Class representing SAFI
67      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
68      */
69     public static NodeIdentifierWithPredicates toYangPathKey(final QName id, final Class<? extends AddressFamily> afi,
70             final Class<? extends SubsequentAddressFamily> safi) {
71         final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
72                 ADD_PATH_AFI_QNAME, BindingReflections.findQName(afi),
73                 ADD_PATH_SAFI_QNAME, BindingReflections.findQName(safi));
74         return new NodeIdentifierWithPredicates(id, keyValues);
75     }
76
77     /**
78      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
79      *
80      * @param id QNAME representing node
81      * @param tablesKey  Tables key representing table.
82      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
83      */
84     @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
85     public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey tablesKey) {
86         return toYangKey(id, tablesKey.getAfi(), tablesKey.getSafi());
87     }
88
89     /**
90      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
91      *
92      * @param id QNAME representing node
93      * @param tablesKey  Add PAth Tables key representing table.
94      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
95      */
96     public static NodeIdentifierWithPredicates toYangKey(final QName id, final SupportedTablesKey tablesKey) {
97         return toYangPathKey(id, tablesKey.getAfi(), tablesKey.getSafi());
98     }
99
100     /**
101      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
102      *
103      * @param tablesKey Tables key representing table.
104      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
105      */
106     @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
107     public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey tablesKey) {
108         return toYangTablesKey(tablesKey.getAfi(), tablesKey.getSafi());
109     }
110 }