From 2f89a4e102ae31d29a42b44b11a7548a1feab1b7 Mon Sep 17 00:00:00 2001 From: Moiz Raja Date: Fri, 20 Dec 2013 17:53:14 -0800 Subject: [PATCH] Use a String Id for both Node and NodeConnector 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 --- .../compatibility/ComponentActivator.xtend | 14 ++++++++--- .../MDSalNodeConnectorFactory.java | 23 +++++++++++++++++++ .../sal/compatibility/MDSalNodeFactory.java | 4 +--- .../sal/compatibility/NodeMapping.xtend | 12 ++++++---- 4 files changed, 43 insertions(+), 10 deletions(-) create mode 100644 opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeConnectorFactory.java diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend index a03128995f..a32ed151a9 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/ComponentActivator.xtend @@ -47,9 +47,13 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi @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) { @@ -81,7 +85,7 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi } 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) { @@ -92,6 +96,10 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi 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) // diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeConnectorFactory.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeConnectorFactory.java new file mode 100644 index 0000000000..5b4b16a39a --- /dev/null +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeConnectorFactory.java @@ -0,0 +1,23 @@ +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; + + } +} diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.java b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.java index 0c1ee781ac..e36ebd7245 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.java +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.java @@ -3,8 +3,6 @@ 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.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; @@ -15,7 +13,7 @@ public class MDSalNodeFactory implements INodeFactory{ 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); } diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.xtend index 4c9a9e6658..087337bb99 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/NodeMapping.xtend @@ -10,10 +10,12 @@ import static extension org.opendaylight.controller.sal.common.util.Arguments.*; 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 { @@ -33,7 +35,7 @@ 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 { @@ -44,12 +46,13 @@ public class NodeMapping { 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); } @@ -57,7 +60,8 @@ public class NodeMapping { public static def toNodeConnectorRef(NodeConnector nodeConnector) { val node = nodeConnector.node.toNodeRef(); val nodePath = node.getValue() as InstanceIdentifier - 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); } -- 2.36.6