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.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;
21 public final class RibSupportUtils {
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();
28 private RibSupportUtils() {
29 throw new UnsupportedOperationException("Utility class");
33 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI
35 * @param afi Class representing AFI
36 * @param safi Class representing SAFI
37 * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
39 public static NodeIdentifierWithPredicates toYangTablesKey(final Class<? extends AddressFamily> afi,
40 final Class<? extends SubsequentAddressFamily> safi) {
41 return toYangKey(Tables.QNAME, afi, safi);
45 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI
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.
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.<QName, Object>of(
54 AFI_QNAME, BindingReflections.findQName(afi),
55 SAFI_QNAME, BindingReflections.findQName(safi));
56 return new NodeIdentifierWithPredicates(id, keyValues);
61 * Creates Yang Instance Identifier path argument from supplied AFI and SAFI
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.
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.<QName, Object>of(
71 ADD_PATH_AFI_QNAME, BindingReflections.findQName(afi),
72 ADD_PATH_SAFI_QNAME, BindingReflections.findQName(safi));
73 return new NodeIdentifierWithPredicates(id, keyValues);
77 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
79 * @param id QNAME representing node
80 * @param k Tables key representing table.
81 * @return NodeIdentifierWithPredicates of 'id' for specified AFI, SAFI combination.
83 public static NodeIdentifierWithPredicates toYangKey(final QName id, final TablesKey k) {
84 return toYangKey(id, k.getAfi(), k.getSafi());
88 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
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.
94 public static NodeIdentifierWithPredicates toYangKey(final QName id, final SupportedTablesKey k) {
95 return toYangPathKey(id, k.getAfi(), k.getSafi());
99 * Creates Yang Instance Identifier path argument from supplied {@link TablesKey}
101 * @param k Tables key representing table.
102 * @return NodeIdentifierWithPredicates of {@link Tables} for specified AFI, SAFI combination.
104 public static NodeIdentifierWithPredicates toYangTablesKey(final TablesKey k) {
105 return toYangTablesKey(k.getAfi(), k.getSafi());