cherry pick [ONOS-4986] [ONOS-4985] Json defect fix to master

Change-Id: Ia9ead1babf3de43e6f492f4f3b6f4d6b9377b042
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
index 42ee274..f0472aa 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/DefaultPcePath.java
@@ -162,13 +162,14 @@
     @Override
     public String toString() {
         return toStringHelper(this)
+                .omitNullValues()
                 .add("id", id())
                 .add("source", source)
                 .add("destination", destination)
                 .add("lsptype", lspType)
                 .add("name", name)
-                .add("costConstraint", costConstraint.toString())
-                .add("bandwidthConstraint", bandwidthConstraint.toString())
+                .add("costConstraint", costConstraint)
+                .add("bandwidthConstraint", bandwidthConstraint)
                 .toString();
     }
 
@@ -241,8 +242,8 @@
         @Override
         public Builder of(Tunnel tunnel) {
             this.id = TunnelId.valueOf(tunnel.tunnelId().id());
-            this.source = tunnel.src().toString();
-            this.destination = tunnel.dst().toString();
+            this.source = tunnel.path().src().deviceId().toString();
+            this.destination = tunnel.path().dst().deviceId().toString();
             this.name = tunnel.tunnelName().toString();
             // LSP type
             String lspType = tunnel.annotations().value(PcepAnnotationKeys.LSP_SIG_TYPE);
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
index 4a0b3ac..c622f0e 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pceservice/PceManager.java
@@ -509,7 +509,7 @@
             }
 
             if (existingBwValue != null) {
-                if (bwConstraintValue == 0 && bwConstraint != null) {
+                if (bwConstraint == null) {
                     bwConstraintValue = existingBwValue.bps();
                 }
                 //If bandwidth constraints not specified , take existing bandwidth for shared bandwidth calculation
@@ -526,6 +526,11 @@
         constraints.add(CapabilityConstraint.of(CapabilityType.valueOf(lspSigType)));
         if (costConstraint != null) {
             constraints.add(costConstraint);
+        } else {
+            //Take cost constraint from old tunnel if it is not specified in update flow
+            costType = tunnel.annotations().value(COST_TYPE);
+            costConstraint = CostConstraint.of(CostConstraint.Type.valueOf(costType));
+            constraints.add(costConstraint);
         }
 
         computedPathSet = computePath(links.get(0).src().deviceId(), links.get(links.size() - 1).dst().deviceId(),
@@ -845,6 +850,10 @@
             return;
         }
 
+        if (pceStore.getTunnelInfo(tunnel.tunnelId()) == null) {
+            //If bandwidth for old tunnel is not allocated i,e 0 then no need to release
+            return;
+        }
         resourceService.release(pceStore.getTunnelInfo(tunnel.tunnelId()).tunnelConsumerId());
         return;
 
@@ -1211,7 +1220,7 @@
                     localLspIdFreeList.add(Short.valueOf(tunnel.annotations().value(LOCAL_LSP_ID)));
                 }
                 // If not zero bandwidth, and delegated (initiated LSPs will also be delegated).
-                if (Float.parseFloat(tunnel.annotations().value(BANDWIDTH)) != 0
+                if (bwConstraintValue != 0
                         && mastershipService.getLocalRole(tunnel.path().src().deviceId()) == MastershipRole.MASTER) {
                     releaseBandwidth(tunnel);
                 }