Merge "BUG-108: defensive AbstractAdjRIBsIn"
[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.protocol.bgp.rib.spi.AdjRIBsIn;
8 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.PathAttributes;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
11
12 import com.google.common.base.Preconditions;
13
14 final class RIBTables {
15         private final Map<TablesKey, AdjRIBsIn> tables = new HashMap<>();
16         private final Comparator<PathAttributes> comparator;
17         private final RIBExtensionConsumerContext registry;
18
19         RIBTables(final Comparator<PathAttributes> comparator, final RIBExtensionConsumerContext extensions) {
20                 this.comparator = Preconditions.checkNotNull(comparator);
21                 this.registry = Preconditions.checkNotNull(extensions);
22         }
23
24         public synchronized AdjRIBsIn get(final TablesKey key) {
25                 return tables.get(key);
26         }
27
28         public synchronized AdjRIBsIn getOrCreate(final TablesKey key) {
29                 final AdjRIBsIn table;
30
31                 if (!tables.containsKey(key)) {
32                         table = registry.getAdjRIBsInFactory(key.getAfi(), key.getSafi()).createAdjRIBsIn(comparator, key);
33                         tables.put(key, table);
34                 } else {
35                         table = tables.get(key);
36                 }
37
38                 return table;
39         }
40
41 }