Fix checkstyle
[bgpcep.git] / bgp / rib-impl / src / main / java / org / opendaylight / protocol / bgp / rib / impl / RIBSupportContextImpl.java
index 9d1f75c434f0186a58d8b6f8bb9e1c16a5abaeb9..564871a5d3ac36542e5aaa2250ff8f0b76c36430 100644 (file)
@@ -7,73 +7,63 @@
  */
 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;
     }
 }