1 package org.opendaylight.protocol.bgp.rib.impl;
3 import java.util.Comparator;
4 import java.util.HashMap;
7 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
8 import org.opendaylight.protocol.bgp.rib.RibReference;
9 import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsIn;
10 import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsInFactory;
11 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.PathAttributes;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
15 import com.google.common.base.Preconditions;
17 final class RIBTables {
18 private final Map<TablesKey, AdjRIBsIn> tables = new HashMap<>();
19 private final Comparator<PathAttributes> comparator;
20 private final RIBExtensionConsumerContext registry;
22 RIBTables(final Comparator<PathAttributes> comparator, final RIBExtensionConsumerContext extensions) {
23 this.comparator = Preconditions.checkNotNull(comparator);
24 this.registry = Preconditions.checkNotNull(extensions);
27 public synchronized AdjRIBsIn get(final TablesKey key) {
28 return tables.get(key);
31 public synchronized AdjRIBsIn getOrCreate(final DataModificationTransaction trans, final RibReference rib, final TablesKey key) {
32 if (tables.containsKey(key)) {
33 return tables.get(key);
36 final AdjRIBsInFactory f = registry.getAdjRIBsInFactory(key.getAfi(), key.getSafi());
41 final AdjRIBsIn table = Preconditions.checkNotNull(f.createAdjRIBsIn(trans, rib, comparator, key));
42 tables.put(key, table);