Update net.onrc.onos.core.matchaction.action package.

- Added ModifySrcMacActions class.
- Implemented hashCode() and equals() methods for all Action classes.

Change-Id: I568d5fe7a105bb1553642a9e8af782248835a183
diff --git a/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java b/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
index a86b4d0..792b76e 100644
--- a/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
+++ b/src/main/java/net/onrc/onos/core/matchaction/action/OutputAction.java
@@ -1,7 +1,10 @@
 package net.onrc.onos.core.matchaction.action;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import net.onrc.onos.core.util.PortNumber;
 
+import com.google.common.base.Objects;
+
 /**
  * An action object to output traffic to specified port.
  * <p>
@@ -9,7 +12,7 @@
  * MatchAction, Flow or Intent class.
  */
 public class OutputAction implements Action {
-    protected PortNumber portNumber;
+    private final PortNumber portNumber;
 
     /**
      * Constructor.
@@ -17,7 +20,7 @@
      * @param dstPort The port number of the target output port.
      */
     public OutputAction(PortNumber dstPort) {
-        this.portNumber = dstPort;
+        this.portNumber = checkNotNull(dstPort);
     }
 
     /**
@@ -28,4 +31,22 @@
     public PortNumber getPortNumber() {
         return portNumber;
     }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(portNumber);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || getClass() != obj.getClass()) {
+            return false;
+        }
+        OutputAction that = (OutputAction) obj;
+        return Objects.equal(this.portNumber, that.portNumber);
+    }
+
 }