From b2b2cff46731661cffc4fcea32cc77f24ebe7366 Mon Sep 17 00:00:00 2001 From: Moiz Raja Date: Fri, 20 Dec 2013 15:47:29 -0800 Subject: [PATCH] Provide an MDSalNodeFactory to construct an MD-SAL node for NB interfaces like the Forwarding Rules Manager When you try to get flows using the FR NB API for a given node you have to provide both a node type and node id. Since MD_SAL nodes have a type MD_SAL which is not one of the standard types you need to provide and register a NodeFactory which can construct a Node for an MD_SAL Node type. Change-Id: Idc6631f58e248a1d958227312de07faa1fbc3d6e Signed-off-by: Moiz Raja --- .../compatibility/ComponentActivator.xtend | 12 +++++++++- .../sal/compatibility/MDSalNodeFactory.java | 24 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.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 b460edff74..a03128995f 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 @@ -44,6 +44,9 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi @Property DataPacketAdapter dataPacket = new DataPacketAdapter; + @Property + org.opendaylight.controller.sal.utils.INodeFactory nodeFactory = new MDSalNodeFactory + override protected init() { Node.NodeIDType.registerIDType(MD_SAL_TYPE, NodeKey); NodeConnector.NodeConnectorIDType.registerIDType(MD_SAL_TYPE, NodeConnectorKey, MD_SAL_TYPE); @@ -78,18 +81,24 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi } override protected getGlobalImplementations() { - return Arrays.asList(this, flow, inventory, dataPacket) + return Arrays.asList(this, flow, inventory, dataPacket, nodeFactory) } override protected configureGlobalInstance(Component c, Object imp) { configure(imp, c); } + private def dispatch configure(MDSalNodeFactory imp, Component it) { + setInterface(org.opendaylight.controller.sal.utils.INodeFactory.name, properties); + } + private def dispatch configure(ComponentActivator imp, Component it) { add( createServiceDependency().setService(BindingAwareBroker) // .setCallbacks("setBroker", "setBroker") // .setRequired(true)) + + } private def dispatch configure(DataPacketAdapter imp, Component it) { @@ -137,6 +146,7 @@ class ComponentActivator extends ComponentActivatorAbstractBase implements Bindi private def Dictionary properties() { val props = new Hashtable(); props.put(GlobalConstants.PROTOCOLPLUGINTYPE.toString, MD_SAL_TYPE) + props.put("protocolName", MD_SAL_TYPE); return props; } } 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 new file mode 100644 index 0000000000..0c1ee781ac --- /dev/null +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/MDSalNodeFactory.java @@ -0,0 +1,24 @@ +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; + +public class MDSalNodeFactory implements INodeFactory{ + private Logger logger = LoggerFactory.getLogger(MDSalNodeFactory.class); + + @Override + public Node fromString(String type, String id) { + + try { + return new Node(type, new NodeKey(new NodeId(id))); + } catch (ConstructionException e) { + logger.error("Could not construct Node", e); + } + return null; + } +} -- 2.36.6