*/
package org.opendaylight.protocol.bgp.rib.spi;
-
import com.google.common.base.Preconditions;
+
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import org.opendaylight.protocol.concepts.AbstractRegistration;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.SubsequentAddressFamily;
private static final Logger LOG = LoggerFactory.getLogger(SimpleRIBExtensionProviderContext.class);
- private final ConcurrentMap<TablesKey, AdjRIBsFactory> factories = new ConcurrentHashMap<>();
private final ConcurrentMap<TablesKey, RIBSupport> supports = new ConcurrentHashMap<>();
private final ConcurrentMap<NodeIdentifierWithPredicates, RIBSupport> domSupports = new ConcurrentHashMap<>();
private final ModuleInfoBackedContext classLoadingStrategy = ModuleInfoBackedContext.create();
-
- @Override
- public final synchronized AbstractRegistration registerAdjRIBsInFactory(final Class<? extends AddressFamily> afi,
- final Class<? extends SubsequentAddressFamily> safi, final AdjRIBsFactory factory) {
- final TablesKey key = new TablesKey(afi, safi);
-
- if (this.factories.containsKey(key)) {
- throw new IllegalArgumentException("Specified AFI/SAFI combination is already registered");
- }
-
- this.factories.put(key, factory);
-
- return new AbstractRegistration() {
- @Override
- protected void removeRegistration() {
- synchronized (SimpleRIBExtensionProviderContext.this) {
- SimpleRIBExtensionProviderContext.this.factories.remove(key);
- }
- }
- };
- }
-
- @Override
- public final synchronized AdjRIBsFactory getAdjRIBsInFactory(final Class<? extends AddressFamily> afi,
- final Class<? extends SubsequentAddressFamily> safi) {
- return this.factories.get(new TablesKey(afi, safi));
- }
-
@Override
public <T extends RIBSupport> RIBSupportRegistration<T> registerRIBSupport(final Class<? extends AddressFamily> afi,
final Class<? extends SubsequentAddressFamily> safi, final T support) {