Use BindingReflections.getQName()
[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.ImmutableList;
11 import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpAddPathTableType;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.bgp.rib.rib.peer.SupportedTablesKey;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
18 import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
21
22 public final class RibSupportUtils {
23     private static final ImmutableOffsetMapTemplate<QName> AFI_SAFI_TEMPLATE =
24             ImmutableOffsetMapTemplate.ordered(ImmutableList.of(QName.create(Tables.QNAME, "afi").intern(),
25                 QName.create(Tables.QNAME, "safi").intern()));
26
27     private static final ImmutableOffsetMapTemplate<QName> ADD_PATH_AFI_SAFI_TEMPLATE =
28             ImmutableOffsetMapTemplate.ordered(ImmutableList.of(QName.create(BgpAddPathTableType.QNAME, "afi").intern(),
29                 QName.create(BgpAddPathTableType.QNAME, "safi").intern()));
30
31     private RibSupportUtils() {
32         // Hidden on purpose
33     }
34
35     /**
36      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
37      *
38      * @param afi  Class representing AFI
39      * @param safi Class representing SAFI
40      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
41      */
42     public static NodeIdentifierWithPredicates toYangTablesKey(final AddressFamily afi,
43             final SubsequentAddressFamily safi) {
44         return toYangKey(Tables.QNAME, afi, safi);
45     }
46
47     /**
48      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
49      *
50      * @param id   QNAME representing node
51      * @param afi  Class representing AFI
52      * @param safi Class representing SAFI
53      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
54      */
55     public static NodeIdentifierWithPredicates toYangKey(final QName id, final AddressFamily afi,
56             final SubsequentAddressFamily safi) {
57         return NodeIdentifierWithPredicates.of(id, AFI_SAFI_TEMPLATE.instantiateWithValues(
58             BindingReflections.getQName(afi), BindingReflections.getQName(safi)));
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 AddressFamily afi,
70             final SubsequentAddressFamily safi) {
71         return NodeIdentifierWithPredicates.of(id, ADD_PATH_AFI_SAFI_TEMPLATE.instantiateWithValues(
72             BindingReflections.getQName(afi), BindingReflections.getQName(safi)));
73     }
74
75     /**
76      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
77      *
78      * @param id QNAME representing node
79      * @param tablesKey  Tables key representing table.
80      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
81      */
82     @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
83     public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey tablesKey) {
84         return toYangKey(id, tablesKey.getAfi(), tablesKey.getSafi());
85     }
86
87     /**
88      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
89      *
90      * @param id QNAME representing node
91      * @param tablesKey  Add PAth Tables key representing table.
92      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
93      */
94     public static NodeIdentifierWithPredicates toYangKey(final QName id, final SupportedTablesKey tablesKey) {
95         return toYangPathKey(id, tablesKey.getAfi(), tablesKey.getSafi());
96     }
97
98     /**
99      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
100      *
101      * @param tablesKey Tables key representing table.
102      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
103      */
104     @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
105     public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey tablesKey) {
106         return toYangTablesKey(tablesKey.getAfi(), tablesKey.getSafi());
107     }
108 }