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.spi.AdjRIBsIn;
9 import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsInFactory;
10 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.PathAttributes;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
14 import com.google.common.base.Preconditions;
16 final class RIBTables {
17 private final Map<TablesKey, AdjRIBsIn> tables = new HashMap<>();
18 private final Comparator<PathAttributes> comparator;
19 private final RIBExtensionConsumerContext registry;
21 RIBTables(final Comparator<PathAttributes> comparator, final RIBExtensionConsumerContext extensions) {
22 this.comparator = Preconditions.checkNotNull(comparator);
23 this.registry = Preconditions.checkNotNull(extensions);
26 public synchronized AdjRIBsIn get(final TablesKey key) {
27 return tables.get(key);
30 public synchronized AdjRIBsIn getOrCreate(final DataModificationTransaction trans, final TablesKey key) {
31 if (tables.containsKey(key)) {
32 return tables.get(key);
35 final AdjRIBsInFactory f = registry.getAdjRIBsInFactory(key.getAfi(), key.getSafi());
40 final AdjRIBsIn table = Preconditions.checkNotNull(f.createAdjRIBsIn(trans, comparator, key));
41 tables.put(key, table);