Simple changes to eliminate pmd warnings
[controller.git] / opendaylight / sal / api / src / main / java / org / opendaylight / controller / sal / core / NodeConnector.java
index 6245c9be8a79d8c17d256f1dd274b6b386a309bf..46c5a9dae933baee49c47e98476a37dd9222dae5 100644 (file)
 package org.opendaylight.controller.sal.core;
 
 import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
 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.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.opendaylight.controller.sal.utils.INodeConnectorFactory;
+import org.opendaylight.controller.sal.utils.ServiceHelper;
 
 /**
  * Describe a generic network element attachment points,
@@ -53,14 +55,14 @@ public class NodeConnector implements Serializable {
         ConcurrentHashMap<String, ImmutablePair<Class<? extends Object>, String>> compatibleType =
             new ConcurrentHashMap<String, ImmutablePair<Class<? extends Object>, String>>();
         /**
-         * Represents the OFPP_CONTROLLER reserved port to forward a 
-         * packet to the controller, this is to send data packets 
-         * to the controller from the data plane triggering 
+         * Represents the OFPP_CONTROLLER reserved port to forward a
+         * packet to the controller, this is to send data packets
+         * to the controller from the data plane triggering
          * a packet_in event.
          */
         public static String CONTROLLER = "CTRL";
         /**
-         * Represents the OFPP_ALL reserved OF port 
+         * Represents the OFPP_ALL reserved OF port
          * to forward to ALL the ports in the system ,
          * should be used for flooding like mechanism to
          * be used cautiously to avoid excessive flooding.
@@ -74,8 +76,8 @@ public class NodeConnector implements Serializable {
          */
         public static String SWSTACK = "SW";
         /**
-         * Describes OFPP_Normal reserved port destination that invokes 
-         * the traditional native L2/L3 HW normal forwarding functionality 
+         * Describes OFPP_Normal reserved port destination that invokes
+         * the traditional native L2/L3 HW normal forwarding functionality
          * if supported on the forwarding element.
          */
         public static String HWPATH = "HW";
@@ -278,7 +280,7 @@ public class NodeConnector implements Serializable {
      *
      * @return the NodeConnectorType of this object
      */
-    @XmlAttribute(name = "type")
+    @XmlElement(name = "type")
     public String getType() {
         return this.nodeConnectorType;
     }
@@ -332,10 +334,10 @@ public class NodeConnector implements Serializable {
         }
     }
 
-    /** 
+    /**
      * Private setter for nodeConnectorType to be called by JAXB not by anyone
      * else, NodeConnector is immutable
-     * 
+     *
      * @param type of node to be set
      */
     private void setType(String type) {
@@ -361,14 +363,14 @@ public class NodeConnector implements Serializable {
      *
      * @return the NodeConnector ID of this object in String format
      */
-    @XmlAttribute(name = "id")
+    @XmlElement(name = "id")
     public String getNodeConnectorIDString() {
         return this.nodeConnectorID.toString();
     }
 
-    /** 
+    /**
      * private setter to be used by JAXB
-     * 
+     *
      * @param nodeConnectorIDString String representation for NodeConnectorID
      */
     private void setNodeConnectorIDString(String IDStr) {
@@ -390,26 +392,55 @@ public class NodeConnector implements Serializable {
 
     @Override
     public int hashCode() {
-        return new HashCodeBuilder(63389, 4951)
-            .append(nodeConnectorType)
-            .append(nodeConnectorID)
-            .append(nodeConnectorNode)
-            .hashCode();
+        final int prime = 31;
+        int result = 1;
+        result = prime * result
+                + ((nodeConnectorID == null) ? 0 : nodeConnectorID.hashCode());
+        result = prime
+                * result
+                + ((nodeConnectorNode == null) ? 0 : nodeConnectorNode
+                        .hashCode());
+        result = prime
+                * result
+                + ((nodeConnectorType == null) ? 0 : nodeConnectorType
+                        .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;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        NodeConnector other = (NodeConnector) obj;
+        if (nodeConnectorID == null) {
+            if (other.nodeConnectorID != null) {
+                return false;
+            }
+        } else if (!nodeConnectorID.equals(other.nodeConnectorID)) {
+            return false;
+        }
+        if (nodeConnectorNode == null) {
+            if (other.nodeConnectorNode != null) {
+                return false;
+            }
+        } else if (!nodeConnectorNode.equals(other.nodeConnectorNode)) {
             return false;
         }
-        NodeConnector rhs = (NodeConnector)obj;
-        return new EqualsBuilder()
-            .append(this.getType(), rhs.getType())
-            .append(this.getID(), rhs.getID())
-            .append(this.getNode(), rhs.getNode())
-            .isEquals();
+        if (nodeConnectorType == null) {
+            if (other.nodeConnectorType != null) {
+                return false;
+            }
+        } else if (!nodeConnectorType.equals(other.nodeConnectorType)) {
+            return false;
+        }
+        return true;
     }
 
     @Override
@@ -433,9 +464,9 @@ public class NodeConnector implements Serializable {
             .equals(NodeConnectorIDType.SWSTACK) ||
             this.nodeConnectorType
             .equals(NodeConnectorIDType.HWPATH)) {
-            return this.nodeConnectorType.toString();
+            return this.nodeConnectorType;
         } else {
-            return this.nodeConnectorType.toString() + "|"
+            return this.nodeConnectorType + "|"
                     + this.nodeConnectorID.toString();
         }
     }
@@ -463,6 +494,27 @@ public class NodeConnector implements Serializable {
         return fromStringNoNode(parts[0], n);
     }
 
+    /**
+     * return a set of NodeConnector from a collection of string
+     *
+     * @param stringCollection Collection of String object to be parsed as a NodeConnector
+     *
+     * @return the Set of unique NodeConnector objects if parse is successful, empty Set otherwise
+     */
+    public static Set<NodeConnector> fromString(Collection<String> stringCollection) {
+        Set<NodeConnector> set = new HashSet<NodeConnector>();
+        if (stringCollection != null) {
+
+            for (String str : stringCollection) {
+                NodeConnector nodeConnector = NodeConnector.fromString(str);
+                if (nodeConnector != null) {
+                    set.add(nodeConnector);
+                }
+            }
+        }
+        return set;
+    }
+
     /**
      * return a NodeConnector from a string not containing explicitly
      * the Node portion which has to be supplied as parameter
@@ -584,8 +636,14 @@ public class NodeConnector implements Serializable {
                 return null;
             }
         } else {
-            // Lookup via OSGi service registry
+            //Use INodeConnectorFactory to create a NodeConnector of registered type.
+            //The protocol plugin being used depends on typeStr.
+            INodeConnectorFactory f = (INodeConnectorFactory) ServiceHelper
+                    .getGlobalInstance(INodeConnectorFactory.class, new NodeConnector(), "(protocolName="+typeStr+")");
+            if(f==null) {
+                return null;
+            }
+            return f.fromStringNoNode(typeStr, IDStr, n);
         }
-        return null;
     }
 }