BUG 2302 : odl-clustering-test-app should not be part of the odl-restconf-all feature set
[controller.git] / opendaylight / sal / api / src / main / java / org / opendaylight / controller / sal / core / Node.java
index ea9d93bdb6f0774b2d5c72128648f4431c72b2a8..ecb1f604d5e30c450f8613daf3328ea54f9e220a 100644 (file)
@@ -26,10 +26,12 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.opendaylight.controller.sal.utils.HexEncode;
+import org.opendaylight.controller.sal.utils.INodeFactory;
+import org.opendaylight.controller.sal.utils.ServiceHelper;
 
 /**
  * Describe a generic network element in multiple SDNs technologies. A
@@ -195,7 +197,7 @@ public class Node implements Serializable {
      *
      * @return The node Type for this Node object
      */
-    @XmlAttribute(name = "type")
+    @XmlElement(name = "type")
     public String getType() {
         return this.nodeType;
     }
@@ -226,8 +228,13 @@ public class Node implements Serializable {
         } else if (typeStr.equals(NodeIDType.PRODUCTION)) {
             this.nodeID = IDStr;
         } else {
-            // We need to lookup via OSGi service registry for an
-            // handler for this
+            //Use plugin's method to get appropriate conversion from IDStr to nodeID
+            INodeFactory f = (INodeFactory) ServiceHelper
+                    .getGlobalInstance(INodeFactory.class, new Node(), "(protocolName="+typeStr+")");
+            if(f!=null){
+                Node n = f.fromString(typeStr, IDStr);
+                this.nodeID = n.nodeID;
+            }
         }
     }
 
@@ -237,6 +244,7 @@ public class Node implements Serializable {
      *
      * @param type of node to be set
      */
+    @SuppressWarnings("unused")
     private void setType(String type) {
         this.nodeType = type;
         if (this.nodeIDString != null) {
@@ -259,7 +267,7 @@ public class Node implements Serializable {
      *
      * @return The nodeID in string format
      */
-    @XmlAttribute(name = "id")
+    @XmlElement(name = "id")
     public String getNodeIDString() {
         if (this.nodeType.equals(NodeIDType.OPENFLOW)) {
             return HexEncode.longToHexString((Long) this.nodeID);
@@ -273,6 +281,7 @@ public class Node implements Serializable {
      *
      * @param nodeIDString String representation for NodeID
      */
+    @SuppressWarnings("unused")
     private void setNodeIDString(String nodeIDString) {
         this.nodeIDString = nodeIDString;
         if (this.nodeType != null) {
@@ -315,10 +324,10 @@ public class Node implements Serializable {
     @Override
     public String toString() {
         if (this.nodeType.equals(NodeIDType.OPENFLOW)) {
-            return this.nodeType.toString() + "|"
+            return this.nodeType + "|"
                 + HexEncode.longToHexString((Long) this.nodeID);
         } else {
-            return this.nodeType.toString() + "|" + this.nodeID.toString();
+            return this.nodeType + "|" + this.nodeID.toString();
         }
     }
 
@@ -437,9 +446,13 @@ public class Node implements Serializable {
                 return null;
             }
         } else {
-            // We need to lookup via OSGi service registry for an
-            // handler for this
+            //Use INodeFactory to create a Node of registered Node type.
+            //The protocol plugin being used depends on typeStr.
+            INodeFactory f = (INodeFactory) ServiceHelper
+                    .getGlobalInstance(INodeFactory.class, new Node(), "(protocolName="+typeStr+")");
+            if(f==null)
+                return null;
+            return f.fromString(typeStr, IDStr);
         }
-        return null;
     }
 }