*/
package org.opendaylight.protocol.bgp.rib.impl;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Verify;
-import java.util.Map.Entry;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import static java.util.Objects.requireNonNull;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import java.util.Collection;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
+import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs;
import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContext;
import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlri;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.attributes.reach.MpReachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.attributes.unreach.MpUnreachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
+import org.opendaylight.yangtools.yang.binding.ChildOf;
+import org.opendaylight.yangtools.yang.binding.ChoiceIn;
+import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
class RIBSupportContextImpl extends RIBSupportContext {
-
- private static final ContainerNode EMPTY_TABLE_ATTRIBUTES = ImmutableNodes.containerNode(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.Attributes.QNAME);
-
- private final RIBSupport ribSupport;
+ private final RIBSupport<?, ?> ribSupport;
private final Codecs codecs;
- public RIBSupportContextImpl(final RIBSupport ribSupport, final CodecsRegistry codecs) {
- this.ribSupport = Preconditions.checkNotNull(ribSupport);
+ RIBSupportContextImpl(final RIBSupport<?, ?> ribSupport, final CodecsRegistry codecs) {
+ this.ribSupport = requireNonNull(ribSupport);
this.codecs = codecs.getCodecs(this.ribSupport);
}
@Override
- public void writeRoutes(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tableId, final MpReachNlri nlri,
- final Attributes attributes) {
+ public Collection<NodeIdentifierWithPredicates> writeRoutes(final DOMDataTreeWriteTransaction tx,
+ final YangInstanceIdentifier tableId,
+ final MpReachNlri nlri,
+ final Attributes attributes) {
final ContainerNode domNlri = this.codecs.serializeReachNlri(nlri);
final ContainerNode routeAttributes = this.codecs.serializeAttributes(attributes);
- this.ribSupport.putRoutes(tx, tableId, domNlri, routeAttributes);
+ return this.ribSupport.putRoutes(tx, tableId, domNlri, routeAttributes);
}
@Override
- public void clearTable(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tableId) {
- final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> tb = ImmutableNodes.mapEntryBuilder();
- tb.withNodeIdentifier((NodeIdentifierWithPredicates)tableId.getLastPathArgument());
- tb.withChild(EMPTY_TABLE_ATTRIBUTES);
-
- // tableId is keyed, but that fact is not directly visible from YangInstanceIdentifier, see BUG-2796
- final NodeIdentifierWithPredicates tableKey = (NodeIdentifierWithPredicates) tableId.getLastPathArgument();
- for (final Entry<QName, Object> e : tableKey.getKeyValues().entrySet()) {
- tb.withChild(ImmutableNodes.leafNode(e.getKey(), e.getValue()));
- }
-
- final ChoiceNode routes = this.ribSupport.emptyRoutes();
- Verify.verifyNotNull(routes, "Null empty routes in %s", this.ribSupport);
- Verify.verify(Routes.QNAME.equals(routes.getNodeType()), "Empty routes have unexpected identifier %s, expected %s", routes.getNodeType(), Routes.QNAME);
-
- tx.put(LogicalDatastoreType.OPERATIONAL, tableId, tb.withChild(routes).build());
+ public void createEmptyTableStructure(final DOMDataTreeWriteTransaction tx, final YangInstanceIdentifier tableId) {
+ tx.put(LogicalDatastoreType.OPERATIONAL, tableId, this.ribSupport.emptyTable());
}
@Override
- public void deleteRoutes(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tableId, final MpUnreachNlri nlri) {
+ public void deleteRoutes(final DOMDataTreeWriteTransaction tx, final YangInstanceIdentifier tableId,
+ final MpUnreachNlri nlri) {
this.ribSupport.deleteRoutes(tx, tableId, this.codecs.serializeUnreachNlri(nlri));
}
@Override
- public RIBSupport getRibSupport() {
- return this.ribSupport;
+ @SuppressWarnings("unchecked")
+ @SuppressFBWarnings("NM_CONFUSING")
+ public <C extends Routes & DataObject & ChoiceIn<Tables>, S extends ChildOf<? super C>>
+ RIBSupport<C, S> getRibSupport() {
+ return (RIBSupport<C, S>) this.ribSupport;
}
}