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.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
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
*
* @return The node Type for this Node object
*/
- @XmlAttribute(name = "type")
+ @XmlElement(name = "type")
public String getType() {
return this.nodeType;
}
} 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;
+ }
}
}
- /**
+ /**
* Private setter for nodeType to be called by JAXB not by anyone
* else, Node is immutable
- *
+ *
* @param type of node to be set
*/
+ @SuppressWarnings("unused")
private void setType(String type) {
this.nodeType = type;
if (this.nodeIDString != null) {
*
* @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);
return this.nodeID.toString();
}
}
-
- /**
+
+ /**
* private setter to be used by JAXB
- *
+ *
* @param nodeIDString String representation for NodeID
*/
+ @SuppressWarnings("unused")
private void setNodeIDString(String nodeIDString) {
this.nodeIDString = nodeIDString;
if (this.nodeType != null) {
@Override
public int hashCode() {
- return new HashCodeBuilder(163841, 56473)
- .append(nodeType)
- .append(nodeID)
- .hashCode();
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((nodeID == null) ? 0 : nodeID.hashCode());
+ result = prime * result
+ + ((nodeType == null) ? 0 : nodeType.hashCode());
+ return result;
}
@Override
public boolean equals(Object obj) {
- if (obj == null) { return false; }
- if (obj == this) { return true; }
- if (obj.getClass() != getClass()) {
+ if (this == obj)
+ return true;
+ if (obj == null)
return false;
- }
- Node rhs = (Node)obj;
- return new EqualsBuilder()
- .append(this.getType(), rhs.getType())
- .append(this.getID(), rhs.getID())
- .isEquals();
+ if (getClass() != obj.getClass())
+ return false;
+ Node other = (Node) obj;
+ if (nodeID == null) {
+ if (other.nodeID != null)
+ return false;
+ } else if (!nodeID.equals(other.nodeID))
+ return false;
+ if (nodeType == null) {
+ if (other.nodeType != null)
+ return false;
+ } else if (!nodeType.equals(other.nodeType))
+ return false;
+ return true;
}
@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();
}
}
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;
}
}