2 * Copyright (c) 2015 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.rib.spi;
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;
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()));
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()));
31 private RibSupportUtils() {
36 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
38 * @param afi Class representing AFI
39 * @param safi Class representing SAFI
40 * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
42 public static NodeIdentifierWithPredicates toYangTablesKey(final AddressFamily afi,
43 final SubsequentAddressFamily safi) {
44 return toYangKey(Tables.QNAME, afi, safi);
48 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
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.
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)));
62 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI.
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.
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)));
76 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
78 * @param id QNAME representing node
79 * @param tablesKey Tables key representing table.
80 * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
82 @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
83 public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey tablesKey) {
84 return toYangKey(id, tablesKey.getAfi(), tablesKey.getSafi());
88 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
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.
94 public static NodeIdentifierWithPredicates toYangKey(final QName id, final SupportedTablesKey tablesKey) {
95 return toYangPathKey(id, tablesKey.getAfi(), tablesKey.getSafi());
99 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}.
101 * @param tablesKey Tables key representing table.
102 * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
104 @SuppressWarnings("checkstyle:OverloadMethodsDeclarationOrder")
105 public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey tablesKey) {
106 return toYangTablesKey(tablesKey.getAfi(), tablesKey.getSafi());