f214ee905b686be4dca3473f8b39045bea5e9b08
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / RIBTables.java
1 package org.opendaylight.protocol.bgp.rib.impl;
2
3 import java.util.Comparator;
4 import java.util.HashMap;
5 import java.util.Map;
6
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;
13
14 import com.google.common.base.Preconditions;
15
16 final class RIBTables {
17         private final Map<TablesKey, AdjRIBsIn> tables = new HashMap<>();
18         private final Comparator<PathAttributes> comparator;
19         private final RIBExtensionConsumerContext registry;
20
21         RIBTables(final Comparator<PathAttributes> comparator, final RIBExtensionConsumerContext extensions) {
22                 this.comparator = Preconditions.checkNotNull(comparator);
23                 this.registry = Preconditions.checkNotNull(extensions);
24         }
25
26         public synchronized AdjRIBsIn get(final TablesKey key) {
27                 return tables.get(key);
28         }
29
30         public synchronized AdjRIBsIn getOrCreate(final DataModificationTransaction trans, final TablesKey key) {
31                 if (tables.containsKey(key)) {
32                         return tables.get(key);
33                 }
34
35                 final AdjRIBsInFactory f = registry.getAdjRIBsInFactory(key.getAfi(), key.getSafi());
36                 if (f == null) {
37                         return null;
38                 }
39
40                 final AdjRIBsIn table = Preconditions.checkNotNull(f.createAdjRIBsIn(trans, comparator, key));
41                 tables.put(key, table);
42                 return table;
43         }
44 }