Merge "Address @XmlSeeAlso limitation. Provide the ability to inject the JAXB types...
[controller.git] / opendaylight / forwardingrulesmanager / api / src / main / java / org / opendaylight / controller / forwardingrulesmanager / FlowEntryInstall.java
index 96b6819e5773f6071808e96a4523887c060b20a8..1318c97ce22e40016fb113a4d1c46d524eba7c1b 100644 (file)
@@ -8,8 +8,8 @@
 
 package org.opendaylight.controller.forwardingrulesmanager;
 
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.io.Serializable;
+
 import org.opendaylight.controller.sal.core.ContainerFlow;
 import org.opendaylight.controller.sal.core.Node;
 
@@ -19,35 +19,58 @@ import org.opendaylight.controller.sal.core.Node;
  * install, the container flow with which that entry had to be merged and the
  * resultant merged flow entry, which is the one that was eventually installed
  * on the network node
- * 
+ *
  * Note: If the container flow is null, the install entry will be a clone of the
  * original entry
- * 
  */
-public class FlowEntryInstall {
-    private FlowEntry original;
-    private ContainerFlow cFlow;
-    private FlowEntry install;
-    transient private long requestId; // async request id
-    transient private boolean deletePending;
+public class FlowEntryInstall implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private final FlowEntry original;
+    private final ContainerFlow cFlow;
+    private final FlowEntry install;
+    private transient long requestId; // async request id
+    private transient boolean deletePending;
 
     public FlowEntryInstall(FlowEntry original, ContainerFlow cFlow) {
         this.original = original;
         this.cFlow = cFlow;
-        this.install = (cFlow == null) ? original.clone() : original
-                .mergeWith(cFlow);
+        this.install = (cFlow == null) ? original.clone() : original.clone().mergeWith(cFlow);
         deletePending = false;
         requestId = 0;
     }
 
+    /*
+     * Given FlowEntryInstall is used as key for FRM map which contains the
+     * software view of installed entries, having its hashcode tied to the one
+     * of the installed FlowEntry which takes into account the fields which
+     * uniquely identify a flow from switch point of view: node, match and
+     * priority.
+     */
     @Override
     public int hashCode() {
-        return HashCodeBuilder.reflectionHashCode(this);
+        return install.hashCode();
     }
 
     @Override
     public boolean equals(Object obj) {
-        return EqualsBuilder.reflectionEquals(this, obj);
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        FlowEntryInstall other = (FlowEntryInstall) obj;
+        if (install == null) {
+            if (other.install != null) {
+                return false;
+            }
+        } else if (!install.equals(other.install)) {
+            return false;
+        }
+        return true;
     }
 
     public String getFlowName() {
@@ -89,14 +112,23 @@ public class FlowEntryInstall {
     public void setRequestId(long rid) {
         this.requestId = rid;
     }
-    
+
     public long getRequestId() {
         return requestId;
     }
 
+    /**
+     * Returns whether this entry is the result of an internal generated static
+     * flow
+     *
+     * @return true if internal generated static flow, false otherwise
+     */
+    public boolean isInternal() {
+        return original.isInternal();
+    }
+
     @Override
     public String toString() {
-        return "[Install = " + install + " Original = " + original + " cFlow = "
-                + cFlow + " rid = " + requestId + "]";
+        return "[Install = " + install + " Original = " + original + " cFlow = " + cFlow + " rid = " + requestId + "]";
     }
 }