diff options
Diffstat (limited to 'infra/bgp-translate-impl/src/main/java/io/fd/honeycomb/bgp/translate/impl/LocRibWriter.java')
-rw-r--r-- | infra/bgp-translate-impl/src/main/java/io/fd/honeycomb/bgp/translate/impl/LocRibWriter.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/infra/bgp-translate-impl/src/main/java/io/fd/honeycomb/bgp/translate/impl/LocRibWriter.java b/infra/bgp-translate-impl/src/main/java/io/fd/honeycomb/bgp/translate/impl/LocRibWriter.java new file mode 100644 index 000000000..ce3c0c7b8 --- /dev/null +++ b/infra/bgp-translate-impl/src/main/java/io/fd/honeycomb/bgp/translate/impl/LocRibWriter.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.fd.honeycomb.bgp.translate.impl; + +import com.google.common.base.Preconditions; +import io.fd.honeycomb.translate.bgp.RibWriter; +import io.fd.honeycomb.translate.bgp.RouteWriter; +import javax.annotation.Nonnull; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.Route; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.LocRib; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +/** + * Provides route translation for routes in local RIB. + */ +public final class LocRibWriter implements RibWriter { + private final DataBroker bgpDataBroker; + + public LocRibWriter(final DataBroker bgpDataBroker) { + this.bgpDataBroker = bgpDataBroker; + } + + @Override + public void register(@Nonnull final RouteWriter writer) { + @SuppressWarnings("unchecked") + final InstanceIdentifier<Route> managedId = (InstanceIdentifier<Route>)writer.getManagedDataObjectType(); + final Class routeType = managedId.getTargetType(); + Preconditions.checkArgument(Route.class.isAssignableFrom(routeType), + "{} managed by {} is not subclass of Route", routeType, writer); + Preconditions.checkArgument(managedId.firstIdentifierOf(LocRib.class) != null, + "{} managed by {} does not contain LocRib.class", managedId, writer); + Preconditions.checkArgument(managedId.isWildcarded(), + "{} managed by {} should not contain route key", managedId, writer); + + // TODO(HONEYCOMB-367): updates for whole list instead of list item + // are needed to support deleteALL (might be required for performance reasons). + bgpDataBroker + .registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, managedId), + new LocRibChangeListener(writer)); + } +} |