[AETHER-599] Implement FabricPipelineTraceable

Core changes supporting fabric traceable implementation.
Includes minor fixes to the OFDPA traceable unit tests

Change-Id: I2f0d1172022a8fc725df9e96526092c59ddc0e0b
diff --git a/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java b/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java
index 21a9819..66a18c0 100644
--- a/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java
+++ b/core/api/src/main/java/org/onosproject/net/PipelineTraceableOutput.java
@@ -74,7 +74,7 @@
      *
      * @return the log message
      */
-    public String getLog() {
+    public String log() {
         return log;
     }
 
@@ -83,7 +83,7 @@
      *
      * @return the pipeline hit chains
      */
-    public List<PipelineTraceableHitChain> getHitChains() {
+    public List<PipelineTraceableHitChain> hitChains() {
         return hitChains;
     }
 
@@ -92,7 +92,7 @@
      *
      * @return the pipeline traceable result
      */
-    public PipelineTraceableResult getResult() {
+    public PipelineTraceableResult result() {
         return result;
     }
 
@@ -106,6 +106,16 @@
     }
 
     /**
+     * Returns a new builder initialized with the traceable output.
+     *
+     * @param pipelineTraceableOutput the output used for the initialization
+     * @return an initialized builder
+     */
+    public static PipelineTraceableOutput.Builder builder(PipelineTraceableOutput pipelineTraceableOutput) {
+        return new PipelineTraceableOutput.Builder(pipelineTraceableOutput);
+    }
+
+    /**
      * Builder of pipeline traceable entities.
      */
     public static final class Builder {
@@ -114,6 +124,15 @@
         private List<PipelineTraceableHitChain> hitChains = Lists.newArrayList();
         private PipelineTraceableResult result = PipelineTraceableResult.SUCCESS;
 
+        private Builder() {
+        }
+
+        private Builder(PipelineTraceableOutput traceableOutput) {
+            appendToLog("\n" + traceableOutput.log());
+            setResult(traceableOutput.result());
+            traceableOutput.hitChains().forEach(this::addHitChain);
+        }
+
         /**
          * Appends a message to the log.
          *
@@ -128,7 +147,7 @@
             return this;
         }
 
-        private Builder setResult(PipelineTraceableResult result) {
+        public Builder setResult(PipelineTraceableResult result) {
             // Do not override original failure
             if (this.result == PipelineTraceableResult.SUCCESS) {
                 this.result = result;