import org.opendaylight.protocol.bgp.mode.impl.OffsetMap;
import org.opendaylight.protocol.bgp.mode.impl.add.AddPathBestPath;
import org.opendaylight.protocol.bgp.mode.impl.add.RouteKey;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
final RouteKey key = new RouteKey(routerId, remotePathId);
final OffsetMap<RouteKey> map = getOffsets();
final int offset = map.offsetOf(key);
- final boolean ret = removeRoute(key, offset);
this.values = map.removeValue(this.values, offset);
- return ret;
+ return removeRoute(key, offset);
}
@Override
public MapEntryNode createValue(final YangInstanceIdentifier.PathArgument routeId, final BestPath path) {
final OffsetMap<RouteKey> map = getOffsets();
- final int offset = map.offsetOf(((AddPathBestPath) path).getRouteKey());
- return map.getValue(this.values, offset);
+ final MapEntryNode mapValues = map.getValue(this.values, map.offsetOf(((AddPathBestPath) path).getRouteKey()));
+ return RouteEntryUtil.createComplexRouteValue(routeId, path, mapValues);
}
@Override
import com.google.common.primitives.UnsignedInteger;
import org.opendaylight.protocol.bgp.mode.api.BestPath;
import org.opendaylight.protocol.bgp.mode.impl.add.RouteKey;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
final class SimpleRouteEntry extends AbstractAllPathsRouteEntry {
@Override
@Override
public MapEntryNode createValue(final YangInstanceIdentifier.PathArgument routeId, final BestPath path) {
- final DataContainerNodeAttrBuilder<YangInstanceIdentifier.NodeIdentifierWithPredicates, MapEntryNode> b = Builders.mapEntryBuilder();
- b.withNodeIdentifier((YangInstanceIdentifier.NodeIdentifierWithPredicates) routeId);
- b.addChild(path.getAttributes());
- return b.build();
+ return RouteEntryUtil.createSimpleRouteValue(routeId, path);
}
@Override
- public int addRoute(final UnsignedInteger routerId, final Long remotePathId, final NodeIdentifier attII,
- final NormalizedNode<?, ?> data) {
+ public int addRoute(final UnsignedInteger routerId, final Long remotePathId, final NodeIdentifier attII, final NormalizedNode<?, ?> data) {
return addRoute(new RouteKey(routerId, remotePathId), attII, data);
}
}
import org.opendaylight.protocol.bgp.mode.impl.OffsetMap;
import org.opendaylight.protocol.bgp.mode.impl.add.AddPathBestPath;
import org.opendaylight.protocol.bgp.mode.impl.add.RouteKey;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
final RouteKey key = new RouteKey(routerId, remotePathId);
final OffsetMap<RouteKey> map = getOffsets();
final int offset = map.offsetOf(key);
- final boolean ret = removeRoute(key, offset);
this.values = map.removeValue(this.values, offset);
- return ret;
+ return removeRoute(key, offset);
}
@Override
public MapEntryNode createValue(final PathArgument routeId, final BestPath path) {
final OffsetMap<RouteKey> map = getOffsets();
- final int offset = map.offsetOf(((AddPathBestPath) path).getRouteKey());
- return map.getValue(this.values, offset);
+ final MapEntryNode mapValues = map.getValue(this.values, map.offsetOf(((AddPathBestPath) path).getRouteKey()));
+ return RouteEntryUtil.createComplexRouteValue(routeId, path, mapValues);
}
@Override
import com.google.common.primitives.UnsignedInteger;
import org.opendaylight.protocol.bgp.mode.api.BestPath;
import org.opendaylight.protocol.bgp.mode.impl.add.RouteKey;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
final class SimpleRouteEntry extends AbstractNPathsRouteEntry {
public SimpleRouteEntry(final Long nBestPaths) {
@Override
public MapEntryNode createValue(final PathArgument routeId, final BestPath path) {
- final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> b = Builders.mapEntryBuilder();
- b.withNodeIdentifier((NodeIdentifierWithPredicates) routeId);
- b.addChild(path.getAttributes());
- return b.build();
+ return RouteEntryUtil.createSimpleRouteValue(routeId, path);
}
@Override
final boolean modified = !newBestPath.equals(this.bestPath);
if (modified) {
this.removedBestPath = this.bestPath;
- LOG.trace("Previous best {}, current best {}, result {}", this.bestPath, newBestPath, modified);
+ LOG.trace("Previous best {}, current best {}", this.bestPath, newBestPath);
this.bestPath = newBestPath;
}
return modified;
import com.google.common.primitives.UnsignedInteger;
import org.opendaylight.protocol.bgp.mode.api.BestPath;
import org.opendaylight.protocol.bgp.mode.impl.OffsetMap;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
}
@Override
- public MapEntryNode createValue(final PathArgument routeId, final BestPath path) {
+ public boolean removeRoute(final UnsignedInteger routerId, final Long remotePathId) {
final OffsetMap<UnsignedInteger> map = getOffsets();
- return map.getValue(this.values, map.offsetOf(path.getRouterId()));
+ final int offset = map.offsetOf(routerId);
+ this.values = map.removeValue(this.values, offset);
+ return removeRoute(routerId, offset);
}
@Override
- public boolean removeRoute(final UnsignedInteger routerId, final Long remotePathId) {
+ public MapEntryNode createValue(final PathArgument routeId, final BestPath path) {
final OffsetMap<UnsignedInteger> map = getOffsets();
- final int offset = map.offsetOf(routerId);
- final boolean ret = removeRoute(routerId, offset);
- this.values = map.removeValue(this.values, offset);
- return ret;
+ final MapEntryNode mapValues = map.getValue(this.values, map.offsetOf(path.getRouterId()));
+ return RouteEntryUtil.createComplexRouteValue(routeId, path, mapValues);
}
}
import com.google.common.primitives.UnsignedInteger;
import org.opendaylight.protocol.bgp.mode.api.BestPath;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+import org.opendaylight.protocol.bgp.mode.spi.RouteEntryUtil;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
final class BaseSimpleRouteEntry extends BaseAbstractRouteEntry {
@Override
@Override
public MapEntryNode createValue(final PathArgument routeId, final BestPath path) {
- final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> b = Builders.mapEntryBuilder();
- b.withNodeIdentifier((NodeIdentifierWithPredicates) routeId);
- b.addChild(path.getAttributes());
- return b.build();
+ return RouteEntryUtil.createSimpleRouteValue(routeId, path);
}
}
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.protocol.bgp.mode.spi;
+
+import org.opendaylight.protocol.bgp.mode.api.BestPath;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+
+final public class RouteEntryUtil {
+ public static MapEntryNode createSimpleRouteValue(final PathArgument routeId, final BestPath path) {
+ final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> b = Builders.mapEntryBuilder();
+ b.withNodeIdentifier((NodeIdentifierWithPredicates) routeId);
+ b.addChild(path.getAttributes());
+ return b.build();
+ }
+
+ public static MapEntryNode createComplexRouteValue(final PathArgument routeId, final BestPath path, final MapEntryNode mapValues) {
+ final DataContainerNodeAttrBuilder<NodeIdentifierWithPredicates, MapEntryNode> mapEntryBuilder = Builders.mapEntryBuilder();
+ mapEntryBuilder.withNodeIdentifier((NodeIdentifierWithPredicates) routeId);
+ mapEntryBuilder.addChild(path.getAttributes());
+ mapValues.getValue().forEach(mapEntryBuilder::addChild);
+ return mapEntryBuilder.build();
+ }
+}