Code clean up
[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.rev130919.BgpAddPathTableType;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.peer.SupportedTablesKey;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.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, final Class<? extends SubsequentAddressFamily> safi) {
53         final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
54                         AFI_QNAME, BindingReflections.findQName(afi),
55                         SAFI_QNAME, BindingReflections.findQName(safi));
56         return new NodeIdentifierWithPredicates(id, keyValues);
57     }
58
59
60     /**
61      * Creates Yang Instance Identifier path argument from supplied AFI and SAFI
62      *
63      * @param id QNAME representing node
64      * @param afi Class representing AFI
65      * @param safi Class representing SAFI
66      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
67      */
68     public static NodeIdentifierWithPredicates toYangPathKey(final QName id, final Class<? extends AddressFamily> afi,
69         final Class<? extends SubsequentAddressFamily> safi) {
70         final ImmutableMap<QName, Object> keyValues = ImmutableMap.of(
71             ADD_PATH_AFI_QNAME, BindingReflections.findQName(afi),
72             ADD_PATH_SAFI_QNAME, BindingReflections.findQName(safi));
73         return new NodeIdentifierWithPredicates(id, keyValues);
74     }
75
76     /**
77      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
78      *
79      * @param id QNAME representing node
80      * @param k Tables key representing table.
81      * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
82      */
83     public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey k) {
84         return toYangKey(id, k.getAfi(), k.getSafi());
85     }
86
87     /**
88      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
89      *
90      * @param id QNAME representing node
91      * @param k  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 k) {
95         return toYangPathKey(id, k.getAfi(), k.getSafi());
96     }
97
98     /**
99      * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
100      *
101      * @param k Tables key representing table.
102      * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
103      */
104     public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey k) {
105         return toYangTablesKey(k.getAfi(), k.getSafi());
106     }
107 }