diff options
Diffstat (limited to 'infra/northbound')
26 files changed, 90 insertions, 82 deletions
diff --git a/infra/northbound/bgp-extensions/evpn/src/main/java/io/fd/honeycomb/northbound/bgp/extension/EvpnWriterFactory.java b/infra/northbound/bgp-extensions/evpn/src/main/java/io/fd/honeycomb/northbound/bgp/extension/EvpnWriterFactory.java index d6c591603..1fcafbc58 100644 --- a/infra/northbound/bgp-extensions/evpn/src/main/java/io/fd/honeycomb/northbound/bgp/extension/EvpnWriterFactory.java +++ b/infra/northbound/bgp-extensions/evpn/src/main/java/io/fd/honeycomb/northbound/bgp/extension/EvpnWriterFactory.java @@ -20,7 +20,7 @@ import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModul import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; @@ -38,6 +38,6 @@ public class EvpnWriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(EVPN_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(EVPN_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/BGPTableTypeRegistryConsumerProvider.java b/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/BGPTableTypeRegistryConsumerProvider.java index 24e592a27..e6abf0957 100644 --- a/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/BGPTableTypeRegistryConsumerProvider.java +++ b/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/BGPTableTypeRegistryConsumerProvider.java @@ -30,7 +30,7 @@ final class BGPTableTypeRegistryConsumerProvider extends ProviderTrait<BGPTableT @Override protected BGPTableTypeRegistryConsumer create() { final SimpleBGPTableTypeRegistryProvider registry = new SimpleBGPTableTypeRegistryProvider(); - tableTypes.stream().forEach(tableType -> tableType.register(registry)); + tableTypes.forEach(tableType -> tableType.register(registry)); return registry; } diff --git a/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/RIBExtensionConsumerContextProvider.java b/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/RIBExtensionConsumerContextProvider.java index 8c4144d45..8236537a2 100644 --- a/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/RIBExtensionConsumerContextProvider.java +++ b/infra/northbound/bgp-extensions/extension-common/src/main/java/io/fd/honeycomb/northbound/bgp/extension/RIBExtensionConsumerContextProvider.java @@ -19,15 +19,17 @@ package io.fd.honeycomb.northbound.bgp.extension; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.data.init.ShutdownHandler; +import java.util.ArrayList; +import java.util.Set; import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; - -import org.opendaylight.protocol.bgp.rib.spi.*; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext; +import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext; +import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContextActivator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Set; - public class RIBExtensionConsumerContextProvider extends ProviderTrait<RIBExtensionConsumerContext> { private static final Logger LOG = LoggerFactory.getLogger(RIBExtensionConsumerContextProvider.class); @Inject diff --git a/infra/northbound/bgp-extensions/inet/src/main/java/io/fd/honeycomb/northbound/bgp/extension/InetWriterFactory.java b/infra/northbound/bgp-extensions/inet/src/main/java/io/fd/honeycomb/northbound/bgp/extension/InetWriterFactory.java index 37e053a59..7fcfcdca9 100644 --- a/infra/northbound/bgp-extensions/inet/src/main/java/io/fd/honeycomb/northbound/bgp/extension/InetWriterFactory.java +++ b/infra/northbound/bgp-extensions/inet/src/main/java/io/fd/honeycomb/northbound/bgp/extension/InetWriterFactory.java @@ -16,20 +16,19 @@ package io.fd.honeycomb.northbound.bgp.extension; +import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModule.TABLES_IID; + import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; +import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.Ipv4Routes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv6.routes.Ipv6Routes; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import javax.annotation.Nonnull; - -import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModule.TABLES_IID; - public class InetWriterFactory implements WriterFactory { private static final InstanceIdentifier<Ipv4Routes> IPV4_ROUTES_IID = TABLES_IID.child((Class) Ipv4Routes.class); @@ -42,7 +41,7 @@ public class InetWriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(IPV4_ROUTES_IID, dataBroker)); - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(IPV6_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(IPV4_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(IPV6_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp-extensions/l3-vpn-v4/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV4WriterFactory.java b/infra/northbound/bgp-extensions/l3-vpn-v4/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV4WriterFactory.java index ad33cbb06..50d832547 100644 --- a/infra/northbound/bgp-extensions/l3-vpn-v4/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV4WriterFactory.java +++ b/infra/northbound/bgp-extensions/l3-vpn-v4/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV4WriterFactory.java @@ -20,7 +20,7 @@ import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModul import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; @@ -38,6 +38,6 @@ public class L3VpnV4WriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(V4_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(V4_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp-extensions/l3-vpn-v6/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV6WriterFactory.java b/infra/northbound/bgp-extensions/l3-vpn-v6/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV6WriterFactory.java index b2b2fbd5d..f29128e8b 100644 --- a/infra/northbound/bgp-extensions/l3-vpn-v6/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV6WriterFactory.java +++ b/infra/northbound/bgp-extensions/l3-vpn-v6/src/main/java/io/fd/honeycomb/northbound/bgp/extension/L3VpnV6WriterFactory.java @@ -20,7 +20,7 @@ import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModul import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; @@ -38,6 +38,6 @@ public class L3VpnV6WriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(V6_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(V6_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp-extensions/labeled-unicast/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LabeledUnicastWriterFactory.java b/infra/northbound/bgp-extensions/labeled-unicast/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LabeledUnicastWriterFactory.java index cd683f878..030732c52 100644 --- a/infra/northbound/bgp-extensions/labeled-unicast/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LabeledUnicastWriterFactory.java +++ b/infra/northbound/bgp-extensions/labeled-unicast/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LabeledUnicastWriterFactory.java @@ -20,7 +20,7 @@ import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModul import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; @@ -41,7 +41,7 @@ public class LabeledUnicastWriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(LABELED_UNICAST_ROUTES_IID, dataBroker)); - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(LABELED_UNICAST_V6_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(LABELED_UNICAST_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(LABELED_UNICAST_V6_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp-extensions/linkstate/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LinkstateWriterFactory.java b/infra/northbound/bgp-extensions/linkstate/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LinkstateWriterFactory.java index 6738fdda3..d1631e135 100644 --- a/infra/northbound/bgp-extensions/linkstate/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LinkstateWriterFactory.java +++ b/infra/northbound/bgp-extensions/linkstate/src/main/java/io/fd/honeycomb/northbound/bgp/extension/LinkstateWriterFactory.java @@ -20,7 +20,7 @@ import static io.fd.honeycomb.northbound.bgp.extension.AbstractBgpExtensionModul import com.google.inject.Inject; import com.google.inject.name.Named; -import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; +import io.fd.honeycomb.translate.util.write.LegacyBindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; @@ -38,6 +38,6 @@ public class LinkstateWriterFactory implements WriterFactory { @Override public void init(@Nonnull ModifiableWriterRegistryBuilder registry) { - registry.wildcardedSubtreeAdd(new BindingBrokerWriter<>(LINKSTATE_ROUTES_IID, dataBroker)); + registry.wildcardedSubtreeAdd(new LegacyBindingBrokerWriter<>(LINKSTATE_ROUTES_IID, dataBroker)); } } diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java index 9ff55207b..2b8097ff9 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java @@ -22,7 +22,7 @@ import com.google.inject.name.Named; import io.fd.honeycomb.translate.util.write.BindingBrokerWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.ApplicationRib; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java index 7123caf14..8820b995d 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpModule.java @@ -25,12 +25,12 @@ import com.google.inject.name.Names; import io.fd.honeycomb.infra.distro.data.BindingDataBrokerProvider; import io.fd.honeycomb.infra.distro.data.DataStoreProvider; import io.fd.honeycomb.infra.distro.data.InmemoryDOMDataBrokerProvider; +import io.fd.honeycomb.infra.distro.data.LegacyBindingDataBrokerProvider; import io.fd.honeycomb.translate.bgp.RibWriter; import io.netty.channel.EventLoopGroup; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; import org.opendaylight.protocol.bgp.rib.impl.spi.RIB; import org.slf4j.Logger; @@ -67,12 +67,12 @@ public final class BgpModule extends PrivateModule { private void configureRIB() { // Create inmemory config data store for HONEYCOMB_BGP bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(CONFIG)) - .toProvider(new DataStoreProvider(CONFIG, LogicalDatastoreType.CONFIGURATION)) + .toProvider(new DataStoreProvider(CONFIG)) .in(Singleton.class); // Create inmemory operational data store for HONEYCOMB_BGP bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(OPERATIONAL)) - .toProvider(new DataStoreProvider(OPERATIONAL, LogicalDatastoreType.OPERATIONAL)) + .toProvider(new DataStoreProvider(OPERATIONAL)) .in(Singleton.class); // Wrap datastores as DOMDataBroker @@ -84,6 +84,12 @@ public final class BgpModule extends PrivateModule { .in(Singleton.class); expose(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_BGP)); + bind(org.opendaylight.controller.md.sal.binding.api.DataBroker.class).annotatedWith(Names.named(HONEYCOMB_BGP)) + .toProvider(LegacyBindingDataBrokerProvider.class) + .in(Singleton.class); + expose(org.opendaylight.controller.md.sal.binding.api.DataBroker.class) + .annotatedWith(Names.named(HONEYCOMB_BGP)); + // Create RIB instance bind(RIB.class).toProvider(BgpRIBProvider.class).in(Singleton.class); expose(RIB.class); diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java index 8ced20b80..398cf69b1 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpRIBProvider.java @@ -29,8 +29,9 @@ import java.util.Set; import java.util.stream.Collectors; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.broker.impl.PingPongDataBroker; +import org.opendaylight.controller.sal.core.compat.LegacyDOMDataBrokerAdapter; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.protocol.bgp.openconfig.routing.policy.impl.BGPRibRoutingPolicyFactoryImpl; import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.StatementRegistry; @@ -80,6 +81,10 @@ final class BgpRIBProvider extends ProviderTrait<RIB> { @Override protected RIB create() { + + LegacyDOMDataBrokerAdapter DomDataBrokerAdapter = new LegacyDOMDataBrokerAdapter(domBroker); + DomDataBrokerAdapter.getSupportedExtensions().get(DOMSchemaService.class); + Preconditions.checkArgument(policyCfg.getPolicyConfig().isPresent(), "Bgp policy configuration failed to load. Check bgp-policy.json configuration file."); final AsNumber asNumber = new AsNumber(cfg.bgpAsNumber.get().longValue()); @@ -91,9 +96,10 @@ final class BgpRIBProvider extends ProviderTrait<RIB> { final ArrayList<AfiSafi> afiSafiList = new ArrayList<>(configuredAfiSafis); // based on org.opendaylight.protocol.bgp.rib.impl.config.RibImpl.createRib - final PingPongDataBroker pingPongDataBroker = new PingPongDataBroker(domBroker); + final PingPongDataBroker pingPongDataBroker = new PingPongDataBroker(DomDataBrokerAdapter); final CodecsRegistryImpl codecsRegistry = CodecsRegistryImpl.create(codec, extensions.getClassLoadingStrategy()); + final BGPRibRoutingPolicyFactoryImpl bgpRibRoutingPolicyFactory = new BGPRibRoutingPolicyFactoryImpl(dataBroker, new StatementRegistry()); final BGPRibRoutingPolicy ribPolicies = bgpRibRoutingPolicyFactory diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java index 7ae724696..56af9b51f 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/BgpReaderFactoryProvider.java @@ -16,14 +16,15 @@ package io.fd.honeycomb.infra.bgp; +import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; + import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.translate.read.ReaderFactory; import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder; import io.fd.honeycomb.translate.util.read.BindingBrokerReader; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.BgpRib; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.BgpRibBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -53,8 +54,8 @@ final class BgpReaderFactoryProvider extends ProviderTrait<ReaderFactory> { @Override public void init(final ModifiableReaderRegistryBuilder registry) { - registry.add(new BindingBrokerReader<>(InstanceIdentifier.create(BgpRib.class), - bgpDataBroker, LogicalDatastoreType.OPERATIONAL, BgpRibBuilder.class)); + registry.add(new BindingBrokerReader<>(InstanceIdentifier.create(BgpRib.class), bgpDataBroker, OPERATIONAL, + BgpRibBuilder.class)); } } } diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java index e844cf3e0..c70dc0050 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java @@ -22,7 +22,6 @@ import io.fd.honeycomb.translate.impl.write.GenericListWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry; import org.opendaylight.protocol.bgp.rib.impl.spi.RIB; @@ -35,7 +34,6 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.re import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NetworkInstanceProtocol; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.osgi.framework.BundleContext; /** * Initializes writer for Bgp Neighbors ({@link Neighbor} node) and all its parents required by HC infra. diff --git a/infra/northbound/bgp/src/test/java/io/fd/honeycomb/infra/bgp/neighbors/NeighborCustomizerTest.java b/infra/northbound/bgp/src/test/java/io/fd/honeycomb/infra/bgp/neighbors/NeighborCustomizerTest.java index fadef81ab..69bff5eb3 100644 --- a/infra/northbound/bgp/src/test/java/io/fd/honeycomb/infra/bgp/neighbors/NeighborCustomizerTest.java +++ b/infra/northbound/bgp/src/test/java/io/fd/honeycomb/infra/bgp/neighbors/NeighborCustomizerTest.java @@ -24,7 +24,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; -import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.Futures; import io.fd.honeycomb.infra.bgp.BgpConfiguration; @@ -115,7 +114,7 @@ public class NeighborCustomizerTest { when(globalRib.createPeerChain(any())).thenReturn(chain); when(chain.newWriteOnlyTransaction()).thenReturn(tx); - when(tx.submit()).thenReturn(mock(CheckedFuture.class)); + when(tx.commit()).thenReturn(mock(FluentFuture.class)); when(globalRib.getRibSupportContext()).thenReturn(mock(RIBSupportContextRegistry.class)); when(globalRib.getService()).thenReturn(mock(DOMDataTreeChangeService.class)); when(globalRib.getDispatcher()).thenReturn(dispatcher); diff --git a/infra/northbound/netconf/pom.xml b/infra/northbound/netconf/pom.xml index fcbf38880..a509e0f74 100644 --- a/infra/northbound/netconf/pom.xml +++ b/infra/northbound/netconf/pom.xml @@ -76,7 +76,7 @@ </dependency> <dependency> <groupId>org.opendaylight.netconf</groupId> - <artifactId>netconf-ssh</artifactId> + <artifactId>mdsal-netconf-ssh</artifactId> </dependency> <dependency> <groupId>org.opendaylight.netconf</groupId> diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/HoneycombNotification2NetconfProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/HoneycombNotification2NetconfProvider.java index 287629288..30f8404d9 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/HoneycombNotification2NetconfProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/HoneycombNotification2NetconfProvider.java @@ -25,10 +25,10 @@ import io.fd.honeycomb.notification.impl.TranslationUtil; import java.util.List; import java.util.stream.Collectors; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; -import org.opendaylight.controller.md.sal.dom.api.DOMNotificationListener; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter; +import org.opendaylight.mdsal.dom.api.DOMNotification; +import org.opendaylight.mdsal.dom.api.DOMNotificationListener; import org.opendaylight.mdsal.dom.api.DOMSchemaService; +import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter; import org.opendaylight.netconf.notifications.NetconfNotificationCollector; import org.opendaylight.netconf.notifications.NotificationPublisherRegistration; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType; diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfBindingBrokerProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfBindingBrokerProvider.java index bafd4ea3c..5b9dd9ed3 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfBindingBrokerProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfBindingBrokerProvider.java @@ -20,8 +20,8 @@ import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.impl.FakeBindingAwareBroker; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; public final class NetconfBindingBrokerProvider extends ProviderTrait<BindingAwareBroker> { diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMdsalMapperProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMdsalMapperProvider.java index da092b21c..94863e079 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMdsalMapperProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMdsalMapperProvider.java @@ -21,8 +21,8 @@ import static io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModu import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener; @@ -44,9 +44,7 @@ public final class NetconfMdsalMapperProvider extends ProviderTrait<NetconfOpera @Override protected MdsalNetconfOperationServiceFactory create() { - MdsalNetconfOperationServiceFactory mdsalNetconfOperationServiceFactory = - new MdsalNetconfOperationServiceFactory(schemaService, netconfOperationServiceFactoryListener, - domBroker, rpcService); - return mdsalNetconfOperationServiceFactory; + return new MdsalNetconfOperationServiceFactory(schemaService, netconfOperationServiceFactoryListener, + domBroker, rpcService); } } diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfModule.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfModule.java index 509f5b898..cbd83e2de 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfModule.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfModule.java @@ -29,20 +29,19 @@ import io.fd.honeycomb.notification.NotificationCollector; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; import io.netty.util.Timer; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.store.inmemory.InMemoryDOMDataStore; import org.opendaylight.netconf.api.NetconfServerDispatcher; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.netconf.impl.osgi.AggregatedNetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener; +import org.opendaylight.netconf.mdsal.notification.impl.NetconfNotificationManager; import org.opendaylight.netconf.notifications.NetconfNotificationCollector; import org.opendaylight.netconf.notifications.NetconfNotificationListener; import org.opendaylight.netconf.notifications.NetconfNotificationRegistry; -import org.opendaylight.netconf.notifications.impl.NetconfNotificationManager; import org.opendaylight.netconf.ssh.NetconfNorthboundSshServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -72,13 +71,13 @@ public class NetconfModule extends NorthboundPrivateModule<NetconfConfiguration> // Create inmemory data store for HONEYCOMB_NETCONF config metadata bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(InmemoryDOMDataBrokerProvider.CONFIG)) .toProvider( - new DataStoreProvider(InmemoryDOMDataBrokerProvider.CONFIG, LogicalDatastoreType.CONFIGURATION)) + new DataStoreProvider(InmemoryDOMDataBrokerProvider.CONFIG)) .in(Singleton.class); // Create inmemory data store for HONEYCOMB_NETCONF operational metadata bind(InMemoryDOMDataStore.class).annotatedWith(Names.named(InmemoryDOMDataBrokerProvider.OPERATIONAL)) - .toProvider(new DataStoreProvider(InmemoryDOMDataBrokerProvider.OPERATIONAL, - LogicalDatastoreType.OPERATIONAL)) + .toProvider(new DataStoreProvider(InmemoryDOMDataBrokerProvider.OPERATIONAL + )) .in(Singleton.class); // Wrap datastores as DOMDataBroker bind(DOMDataBroker.class).toProvider(InmemoryDOMDataBrokerProvider.class).in(Singleton.class); diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringMapperProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringMapperProvider.java index e7b5edb07..3cea7421f 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringMapperProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringMapperProvider.java @@ -21,7 +21,7 @@ import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MdsalMonitoringMapperFactory; import org.opendaylight.controller.config.yang.netconf.mdsal.monitoring.MonitoringToMdsalWriter; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener; diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringReaderFactoryProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringReaderFactoryProvider.java index 50e0e8ac6..3ea783976 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringReaderFactoryProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfMonitoringReaderFactoryProvider.java @@ -16,14 +16,15 @@ package io.fd.honeycomb.northbound.netconf; +import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; + import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.translate.read.ReaderFactory; import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder; import io.fd.honeycomb.translate.util.read.BindingBrokerReader; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfStateBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -55,8 +56,7 @@ public final class NetconfMonitoringReaderFactoryProvider extends ProviderTrait< @Override public void init(final ModifiableReaderRegistryBuilder registry) { registry.add(new BindingBrokerReader<>(InstanceIdentifier.create(NetconfState.class), - netconfMonitoringBindingBrokerDependency, - LogicalDatastoreType.OPERATIONAL, NetconfStateBuilder.class)); + netconfMonitoringBindingBrokerDependency, OPERATIONAL, NetconfStateBuilder.class)); } } } diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java index f64e4b020..9289936ac 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationMapperProvider.java @@ -20,13 +20,13 @@ import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.data.init.ShutdownHandler; -import org.opendaylight.controller.config.yang.netconf.mdsal.notification.CapabilityChangeNotificationProducer; -import org.opendaylight.controller.config.yang.netconf.mdsal.notification.NotificationToMdsalWriter; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactoryListener; -import org.opendaylight.netconf.mdsal.notification.NetconfNotificationOperationServiceFactory; +import org.opendaylight.netconf.mdsal.notification.impl.CapabilityChangeNotificationProducer; +import org.opendaylight.netconf.mdsal.notification.impl.NetconfNotificationOperationServiceFactory; +import org.opendaylight.netconf.mdsal.notification.impl.NotificationToMdsalWriter; import org.opendaylight.netconf.notifications.NetconfNotificationCollector; import org.opendaylight.netconf.notifications.NetconfNotificationRegistry; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.NetconfState; diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationsReaderFactoryProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationsReaderFactoryProvider.java index 4ed682ff0..70aa99b46 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationsReaderFactoryProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfNotificationsReaderFactoryProvider.java @@ -16,6 +16,8 @@ package io.fd.honeycomb.northbound.netconf; +import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL; + import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; @@ -23,8 +25,7 @@ import io.fd.honeycomb.translate.read.ReaderFactory; import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder; import io.fd.honeycomb.translate.util.read.BindingBrokerReader; import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.Netconf; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.NetconfBuilder; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -49,8 +50,9 @@ public final class NetconfNotificationsReaderFactoryProvider extends ProviderTra @Override public void init(@Nonnull final ModifiableReaderRegistryBuilder registry) { - registry.add(new BindingBrokerReader<>(InstanceIdentifier.create(Netconf.class), netconfDataBroker, - LogicalDatastoreType.OPERATIONAL, NetconfBuilder.class)); + registry.add( + new BindingBrokerReader<>(InstanceIdentifier.create(Netconf.class), netconfDataBroker, OPERATIONAL, + NetconfBuilder.class)); } } diff --git a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfServerDispatcherProvider.java b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfServerDispatcherProvider.java index b6c22bfd8..422b81c5a 100644 --- a/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfServerDispatcherProvider.java +++ b/infra/northbound/netconf/src/main/java/io/fd/honeycomb/northbound/netconf/NetconfServerDispatcherProvider.java @@ -25,6 +25,7 @@ import java.util.concurrent.TimeUnit; import org.opendaylight.netconf.api.NetconfServerDispatcher; import org.opendaylight.netconf.api.monitoring.NetconfMonitoringService; import org.opendaylight.netconf.impl.NetconfServerDispatcherImpl; +import org.opendaylight.netconf.impl.ServerChannelInitializer; import org.opendaylight.netconf.impl.SessionIdProvider; import org.opendaylight.netconf.impl.osgi.AggregatedNetconfOperationServiceFactory; import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory; @@ -51,8 +52,7 @@ public final class NetconfServerDispatcherProvider extends ProviderTrait<Netconf NetconfServerSessionNegotiatorFactory serverNegotiatorFactory = new NetconfServerSessionNegotiatorFactory(timer, netconfOperationProvider, new SessionIdProvider(), CONNECTION_TIMEOUT_MILLIS, monitoringService); - NetconfServerDispatcherImpl.ServerChannelInitializer serverChannelInitializer = - new NetconfServerDispatcherImpl.ServerChannelInitializer(serverNegotiatorFactory); + ServerChannelInitializer serverChannelInitializer = new ServerChannelInitializer(serverNegotiatorFactory); return new NetconfServerDispatcherImpl(serverChannelInitializer, nettyThreadgroup, nettyThreadgroup); } diff --git a/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/BrokerFacadeProvider.java b/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/BrokerFacadeProvider.java index f6a7e5e81..4103399e6 100644 --- a/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/BrokerFacadeProvider.java +++ b/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/BrokerFacadeProvider.java @@ -20,9 +20,9 @@ import com.google.inject.Inject; import com.google.inject.name.Named; import io.fd.honeycomb.binding.init.ProviderTrait; import io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.broker.impl.DOMNotificationRouter; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.broker.DOMNotificationRouter; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; @@ -40,8 +40,6 @@ final class BrokerFacadeProvider extends ProviderTrait<BrokerFacade> { @Override protected BrokerFacade create() { - BrokerFacade brokerFacade = - BrokerFacade.newInstance(rpcService, domDataBroker, notificationService, controllerContext); - return brokerFacade; + return BrokerFacade.newInstance(rpcService, domDataBroker, notificationService, controllerContext); } } diff --git a/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/ControllerContextProvider.java b/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/ControllerContextProvider.java index 909f063d1..3daef1e5f 100644 --- a/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/ControllerContextProvider.java +++ b/infra/northbound/restconf/src/main/java/io/fd/honeycomb/northbound/restconf/ControllerContextProvider.java @@ -18,7 +18,7 @@ package io.fd.honeycomb.northbound.restconf; import com.google.inject.Inject; import io.fd.honeycomb.binding.init.ProviderTrait; -import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; +import org.opendaylight.mdsal.dom.api.DOMMountPointService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; |