Implement copyData as copy constructor on IntentData.

Cleaned up javadocs. 

Change-Id: I90e6350244991d4f30180fe501fec9e6fd180d43
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentData.java b/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
index 1bfa0dc..a71b20e 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentData.java
@@ -23,13 +23,15 @@
 import java.util.List;
 import java.util.Objects;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * A wrapper class that contains an intents, its state, and other metadata for
  * internal use.
  */
 public class IntentData { //FIXME need to make this "immutable"
                           // manager should be able to mutate a local copy while processing
-    private Intent intent;
+    private final Intent intent;
 
     private IntentState state;
     private Timestamp version;
@@ -37,34 +39,77 @@
 
     private List<Intent> installables;
 
+    /**
+     * Creates a new intent data object.
+     *
+     * @param intent intent this metadata references
+     * @param state intent state
+     * @param version version of the intent for this key
+     */
     public IntentData(Intent intent, IntentState state, Timestamp version) {
         this.intent = intent;
         this.state = state;
         this.version = version;
     }
 
-    // kryo constructor
-    protected IntentData() {
+    /**
+     * Copy constructor.
+     *
+     * @param intentData intent data to copy
+     */
+    public IntentData(IntentData intentData) {
+        checkNotNull(intentData);
+
+        intent = intentData.intent;
+        state = intentData.state;
+        version = intentData.version;
+        origin = intentData.origin;
+        installables = intentData.installables;
     }
 
+    // kryo constructor
+    protected IntentData() {
+        intent = null;
+    }
+
+    /**
+     * Returns the intent this metadata references.
+     *
+     * @return intent
+     */
     public Intent intent() {
         return intent;
     }
 
+    /**
+     * Returns the state of the intent.
+     *
+     * @return intent state
+     */
     public IntentState state() {
         return state;
     }
 
+    /**
+     * Returns the intent key.
+     *
+     * @return intent key
+     */
     public Key key() {
         return intent.key();
     }
 
+    /**
+     * Returns the version of the intent for this key.
+     *
+     * @return intent version
+     */
     public Timestamp version() {
         return version;
     }
 
     /**
-     * Sets the origin, which is the node that created the instance.
+     * Sets the origin, which is the node that created the intent.
      *
      * @param origin origin instance
      */
@@ -72,10 +117,20 @@
         this.origin = origin;
     }
 
+    /**
+     * Returns the origin node that created this intent.
+     *
+     * @return origin node ID
+     */
     public NodeId origin() {
         return origin;
     }
 
+    /**
+     * Updates the state of the intent to the given new state.
+     *
+     * @param newState new state of the intent
+     */
     public void setState(IntentState newState) {
         this.state = newState;
     }
@@ -94,10 +149,20 @@
         this.version = version;
     }
 
+    /**
+     * Sets the intent installables to the given list of intents.
+     *
+     * @param installables list of installables for this intent
+     */
     public void setInstallables(List<Intent> installables) {
         this.installables = ImmutableList.copyOf(installables);
     }
 
+    /**
+     * Returns the installables associated with this intent.
+     *
+     * @return list of installable intents
+     */
     public List<Intent> installables() {
         return installables;
     }
@@ -120,12 +185,14 @@
                 && Objects.equals(this.version, other.version);
     }
 
+    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("key", key())
                 .add("state", state())
                 .add("version", version())
                 .add("intent", intent())
+                .add("origin", origin())
                 .add("installables", installables())
                 .toString();
     }