Previously Node and NodeConnector were using NodeKey and NodeConnectorKey respectively as the Id. This causes problems
when you try to use some of the old north bound APIs as they expect to match a node or nodeconnector based on the string id
that is passed to it by the NB APIs
Change-Id: I697d8284f45c8b2d5f7dff327e045cf999d0c701
Signed-off-by: Moiz Raja <moraja@cisco.com>
@Property
org.opendaylight.controller.sal.utils.INodeFactory nodeFactory = new MDSalNodeFactory
+ @Property
+ org.opendaylight.controller.sal.utils.INodeConnectorFactory nodeConnectorFactory = new MDSalNodeConnectorFactory
+
+
override protected init() {
- Node.NodeIDType.registerIDType(MD_SAL_TYPE, NodeKey);
- NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, NodeConnectorKey, MD_SAL_TYPE);
+ Node.NodeIDType.registerIDType(MD_SAL_TYPE, String);
+ NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, String, MD_SAL_TYPE);
}
override start(BundleContext context) {
}
override protected getGlobalImplementations() {
- return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory)
+ return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory, nodeConnectorFactory)
}
override protected configureGlobalInstance(Component c, Object imp) {
setInterface(org.opendaylight.controller.sal.utils.INodeFactory.name, properties);
}
+ private def dispatch configure(MDSalNodeConnectorFactory imp, Component it) {
+ setInterface(org.opendaylight.controller.sal.utils.INodeConnectorFactory.name, properties);
+ }
+
private def dispatch configure(ComponentActivator imp, Component it) {
add(
createServiceDependency().setService(BindingAwareBroker) //
--- /dev/null
+package org.opendaylight.controller.sal.compatibility;
+
+import org.opendaylight.controller.sal.core.ConstructionException;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.utils.INodeConnectorFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MDSalNodeConnectorFactory implements INodeConnectorFactory{
+ private Logger logger = LoggerFactory.getLogger(MDSalNodeConnectorFactory.class);
+
+ @Override
+ public NodeConnector fromStringNoNode(String type, String id, Node node) {
+ try {
+ return new NodeConnector(type, id, node);
+ } catch (ConstructionException e) {
+ logger.error("Could not construct NodeConnector", e);
+ }
+ return null;
+
+ }
+}
import org.opendaylight.controller.sal.core.ConstructionException;
import org.opendaylight.controller.sal.core.Node;
import org.opendaylight.controller.sal.utils.INodeFactory;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public Node fromString(String type, String id) {
try {
- return new Node(type, new NodeKey(new NodeId(id)));
+ return new Node(type, id);
} catch (ConstructionException e) {
logger.error("Could not construct Node", e);
}
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey
import org.opendaylight.controller.sal.core.ConstructionException
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId
public class NodeMapping {
val arg = node.getPath().get(1);
val item = arg.checkInstanceOf(IdentifiableItem);
val nodeKey = item.getKey().checkInstanceOf(NodeKey);
- return new Node(MD_SAL_TYPE, nodeKey);
+ return new Node(MD_SAL_TYPE, nodeKey.getId().getValue().toString());
}
public static def toADNodeConnector(NodeConnectorRef source) throws ConstructionException {
val arg = path.getPath().get(2);
val item = arg.checkInstanceOf(IdentifiableItem);
val connectorKey = item.getKey().checkInstanceOf(NodeConnectorKey);
- return new NodeConnector(MD_SAL_TYPE, connectorKey, node);
+ return new NodeConnector(MD_SAL_TYPE, connectorKey.getId().getValue().toString(), node);
}
public static def toNodeRef(Node node) {
checkArgument(MD_SAL_TYPE.equals(node.getType()));
- val nodeKey = node.ID.checkInstanceOf(NodeKey);
+ var nodeId = node.ID.checkInstanceOf(String)
+ val nodeKey = new NodeKey(new NodeId(nodeId));
val nodePath = InstanceIdentifier.builder().node(Nodes).child(NODE_CLASS, nodeKey).toInstance();
return new NodeRef(nodePath);
}
public static def toNodeConnectorRef(NodeConnector nodeConnector) {
val node = nodeConnector.node.toNodeRef();
val nodePath = node.getValue() as InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node>
- val connectorKey = nodeConnector.ID.checkInstanceOf(NodeConnectorKey);
+ var nodeConnectorId = nodeConnector.ID.checkInstanceOf(String)
+ val connectorKey = new NodeConnectorKey(new NodeConnectorId(nodeConnectorId));
val path = InstanceIdentifier.builder(nodePath).child(NODECONNECTOR_CLASS, connectorKey).toInstance();
return new NodeConnectorRef(path);
}