[ONOS-4164] todo removal

Change-Id: Iaed7a5d2960529ecd548897b546a8804bbc9da27
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceSetupPathCommand.java b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceSetupPathCommand.java
index 497905f..a14e6e1 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceSetupPathCommand.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceSetupPathCommand.java
@@ -24,9 +24,12 @@
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 
+import org.onlab.util.DataRateUnit;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.intent.constraint.BandwidthConstraint;
 import org.onosproject.net.intent.Constraint;
+import org.onosproject.pce.pceservice.constraint.CostConstraint;
 import org.onosproject.pce.pceservice.LspType;
 import org.onosproject.pce.pceservice.api.PceService;
 
@@ -71,21 +74,33 @@
 
         DeviceId srcDevice = DeviceId.deviceId(src);
         DeviceId dstDevice = DeviceId.deviceId(dst);
-        LspType lspType = LspType.values()[type];
         List<Constraint> listConstrnt = new LinkedList<>();
 
-        // add cost
-        //TODO: need to uncomment below lines once CostConstraint is ready
-        //CostConstraint.Type costType = CostConstraint.Type.values()[cost];
-        //listConstrnt.add(CostConstraint.of(costType));
+        // LSP type validation
+        if ((type < 0) || (type > 2)) {
+           error("The LSP type value can be PCE tunnel with signalling in network (0), " +
+                 "PCE tunnel without signalling in network with segment routing (1), " +
+                 "PCE tunnel without signalling in network (2).");
+           return;
+        }
+        LspType lspType = LspType.values()[type];
 
-        // add bandwidth
+        // Add bandwidth
         // bandwidth default data rate unit is in BPS
         if (bandwidth != 0.0) {
-            //TODO: need to uncomment below line once BandwidthConstraint is ready
-            //listConstrnt.add(LocalBandwidthConstraint.of(bandwidth, DataRateUnit.valueOf("BPS")));
+            listConstrnt.add(BandwidthConstraint.of(bandwidth, DataRateUnit.valueOf("BPS")));
         }
 
+        // Add cost
+        // Cost validation
+        if ((cost < 1) || (cost > 2)) {
+            error("The cost attribute value either IGP cost(1) or TE cost(2).");
+            return;
+        }
+        // Here 'cost - 1' indicates the index of enum
+        CostConstraint.Type costType = CostConstraint.Type.values()[cost - 1];
+        listConstrnt.add(CostConstraint.of(costType));
+
         if (!service.setupPath(srcDevice, dstDevice, name, listConstrnt, lspType)) {
             error("Path creation failed.");
         }
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
index 5ea8686..6ef5fc1 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/cli/PceUpdatePathCommand.java
@@ -24,8 +24,12 @@
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 
+import org.onlab.util.DataRateUnit;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.net.intent.constraint.BandwidthConstraint;
 import org.onosproject.net.intent.Constraint;
+import org.onosproject.pce.pceservice.constraint.CostConstraint;
 import org.onosproject.pce.pceservice.api.PceService;
 
 import org.slf4j.Logger;
@@ -56,23 +60,25 @@
         PceService service = get(PceService.class);
 
         List<Constraint> constrntList = new LinkedList<>();
-        // Assign cost
-        if (cost != 0) {
-            //TODO: need to uncomment below lines once CostConstraint is ready
-            //CostConstraint.Type costType = CostConstraint.Type.values()[Integer.valueOf(cost)];
-            //constrntList.add(CostConstraint.of(costType));
-        }
-
         // Assign bandwidth. Data rate unit is in Bps.
         if (bandwidth != 0.0) {
-            //TODO: need to uncomment below line once BandwidthConstraint is ready
-            //constrntList.add(LocalBandwidthConstraint.of(Double.valueOf(bandwidth), DataRateUnit.valueOf("BPS")));
+            constrntList.add(BandwidthConstraint.of(Double.valueOf(bandwidth), DataRateUnit.valueOf("BPS")));
         }
 
-        //TODO: need to uncomment below lines once updatePath method is added to PceService
-        //if (null == service.updatePath(PcePathId.of(id), constrntList)) {
-        //    error("Path updation failed.");
-        //    return;
-        //}
+        // Assign cost
+        if (cost != 0) {
+            // Cost validation
+            if ((cost < 1) || (cost > 2)) {
+                error("The cost attribute value is either IGP cost(1) or TE cost(2).");
+                return;
+            }
+            CostConstraint.Type costType = CostConstraint.Type.values()[cost - 1];
+            constrntList.add(CostConstraint.of(costType));
+        }
+
+        if (!service.updatePath(TunnelId.valueOf(id), constrntList)) {
+            error("Path updation failed.");
+            return;
+        }
     }
 }
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 e9d3fec..2724e8a 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
@@ -20,9 +20,12 @@
 
 import java.util.Objects;
 
+import org.onlab.util.DataRateUnit;
 import org.onosproject.incubator.net.tunnel.Tunnel;
 import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.net.intent.constraint.BandwidthConstraint;
 import org.onosproject.net.intent.Constraint;
+import org.onosproject.pce.pceservice.constraint.CostConstraint;
 
 /**
  * Implementation of an entity which provides functionalities of pce path.
@@ -43,9 +46,10 @@
      * @param id path id
      * @param src ingress
      * @param dst egress
-     * @param lspType lsp type
+     * @param lspType LSP type
      * @param name symbolic-path-name
-     * @param constrnt pce constraint
+     * @param costConstrnt cost constraint
+     * @param bandwidthConstrnt bandwidth constraint
      */
     private DefaultPcePath(TunnelId id, String src, String dst, LspType lspType,
                            String name, Constraint costConstrnt, Constraint bandwidthConstrnt) {
@@ -210,7 +214,7 @@
         @Override
         public Builder lspType(String type) {
             if (null != type) {
-                this.lspType = LspType.values()[Integer.valueOf(type) - 1];
+                this.lspType = LspType.values()[Integer.valueOf(type)];
             }
             return this;
         }
@@ -223,19 +227,14 @@
 
         @Override
         public Builder costConstraint(String cost) {
-            this.costConstraint = null;
-            //TODO: below lines will be uncommented once CostConstraint class is ready
-            //    this.costConstraint = CostConstraint.of(cost);
-            //}
+            this.costConstraint = CostConstraint.of(CostConstraint.Type.values()[Integer.valueOf(cost) - 1]);
             return this;
         }
 
         @Override
         public Builder bandwidthConstraint(String bandwidth) {
-            this.bandwidthConstraint = null;
-            //TODO: below lines will be uncommented once LocalBandwidthConstraint class is ready
-            //    this.bandwidthConstraint = LocalBandwidthConstraint.of(bandwidth);
-            //}
+            this.bandwidthConstraint = BandwidthConstraint.of(Double.valueOf(bandwidth), DataRateUnit
+                    .valueOf("BPS"));
             return this;
         }
 
@@ -244,14 +243,24 @@
             this.id = TunnelId.valueOf(tunnel.tunnelId().id());
             this.source = tunnel.src().toString();
             this.destination = tunnel.dst().toString();
-            //TODO: need to uncomment below line once LSP_SIG_TYPE is added to AnnotationKeys.
-            this.lspType = null; // = LspType.valueOf(tunnel.annotations()
-                                           //.value(AnnotationKeys.LSP_SIG_TYPE));
             this.name = tunnel.tunnelName().toString();
-            //TODO: uncomment below lines once CostConstraint and LocalBandwidthConstraint classes are ready
-            this.costConstraint = null; // = CostConstraint.of(tunnel.path().cost());
-            this.bandwidthConstraint = null; // = LocalBandwidthConstraint.of(tunnel.annotations()
-                                                                        //.value(AnnotationKeys.BANDWIDTH));
+            // LSP type
+            String lspType = tunnel.annotations().value(PcepAnnotationKeys.LSP_SIG_TYPE);
+            if (lspType != null) {
+               this.lspType = LspType.values()[Integer.valueOf(lspType) - 1];
+            }
+            // Cost type
+            String costType = tunnel.annotations().value(PcepAnnotationKeys.COST_TYPE);
+            if (costType != null) {
+                this.costConstraint = CostConstraint.of(CostConstraint.Type.values()[Integer.valueOf(costType) - 1]);
+            }
+            // Bandwidth
+            String bandwidth = tunnel.annotations().value(PcepAnnotationKeys.BANDWIDTH);
+            if (bandwidth != null) {
+                this.bandwidthConstraint = BandwidthConstraint.of(Double.parseDouble(bandwidth),
+                                                                  DataRateUnit.valueOf("BPS"));
+            }
+
             return this;
         }
 
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
index 9b90da0..f692a62 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/DistributedPceStore.java
@@ -34,10 +34,11 @@
 import org.onosproject.incubator.net.tunnel.TunnelId;
 import org.onosproject.incubator.net.resource.label.LabelResource;
 import org.onosproject.incubator.net.resource.label.LabelResourceId;
+import org.onosproject.net.intent.constraint.BandwidthConstraint;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.intent.Constraint;
 import org.onosproject.net.Link;
 import org.onosproject.net.resource.ResourceConsumer;
+import org.onosproject.pce.pceservice.constraint.CostConstraint;
 import org.onosproject.pce.pceservice.TunnelConsumerId;
 import org.onosproject.pce.pceservice.LspType;
 import org.onosproject.pce.pcestore.api.LspLocalLabelInfo;
@@ -128,10 +129,9 @@
                         new KryoNamespace.Builder()
                                 .register(KryoNamespaces.API)
                                 .register(PcePathInfo.class,
-                                          //TODO: Instead of Constraint.class need to add actual implemented class
-                                          //TODO: on this interface like CostConstraint.class and
-                                          //TODO: BandwidthConstraint.class. Will be added once it is confirmed.
-                                          Constraint.class,
+                                          CostConstraint.class,
+                                          CostConstraint.Type.class,
+                                          BandwidthConstraint.class,
                                           LspType.class)
                                 .build()))
 
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/PceccTunnelInfo.java b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/PceccTunnelInfo.java
index 48f49cd..3186d3a 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/PceccTunnelInfo.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/pcestore/PceccTunnelInfo.java
@@ -15,10 +15,10 @@
  */
 package org.onosproject.pce.pcestore;
 
-import java.util.List;
 import com.google.common.base.MoreObjects;
 
 import java.util.Objects;
+import java.util.List;
 
 import org.onosproject.net.resource.ResourceConsumer;
 import org.onosproject.pce.pcestore.api.LspLocalLabelInfo;
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathCodec.java b/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathCodec.java
index e0149e7..9be32e3 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathCodec.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathCodec.java
@@ -87,7 +87,7 @@
             jNode = constraintJNode.get(COST);
             if (jNode != null) {
                 String cost = jNode.asText();
-                resultBuilder.bandwidthConstraint(cost);
+                resultBuilder.costConstraint(cost);
             }
 
             // retrieve bandwidth
diff --git a/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathWebResource.java b/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathWebResource.java
index abd7c88..a54e0b2 100644
--- a/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathWebResource.java
+++ b/apps/pce/app/src/main/java/org/onosproject/pce/rest/PcePathWebResource.java
@@ -53,7 +53,6 @@
 /**
  * Query and program pce path.
  */
-
 @Path("path")
 public class PcePathWebResource extends AbstractWebResource {
 
@@ -124,14 +123,11 @@
             LspType lspType = path.lspType();
             List<Constraint> listConstrnt = new LinkedList<Constraint>();
 
-            // add cost
-            //TODO: need to uncomment below lines once Bandwidth and Cost constraint classes are ready
-            //CostConstraint.Type costType = CostConstraint.Type.values()[Integer.valueOf(path.constraint().cost())];
-            //listConstrnt.add(CostConstraint.of(costType));
+            // Add bandwidth
+            listConstrnt.add(path.bandwidthConstraint());
 
-            // add bandwidth. Data rate unit is in BPS.
-            //listConstrnt.add(LocalBandwidthConstraint.of(Double.valueOf(path.constraint().bandwidth()), DataRateUnit
-            //        .valueOf("BPS")));
+            // Add cost
+            listConstrnt.add(path.costConstraint());
 
             Boolean issuccess = nullIsNotFound(get(PceService.class)
                                                .setupPath(srcDevice, dstDevice, path.name(), listConstrnt, lspType),
@@ -161,19 +157,15 @@
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             JsonNode pathNode = jsonTree.get("path");
             PcePath path = codec(PcePath.class).decode((ObjectNode) pathNode, this);
-            // Assign cost
             List<Constraint> constrntList = new LinkedList<Constraint>();
-            //TODO: need to uncomment below lines once CostConstraint class is ready
-            if (path.costConstraint() != null) {
-                //CostConstraint.Type costType = CostConstraint.Type.values()[path.constraint().cost()];
-                //constrntList.add(CostConstraint.of(costType));
+            // Assign bandwidth
+            if (path.bandwidthConstraint() != null) {
+                constrntList.add(path.bandwidthConstraint());
             }
 
-            // Assign bandwidth. Data rate unit is in BPS.
-            if (path.bandwidthConstraint() != null) {
-                //TODO: need to uncomment below lines once BandwidthConstraint class is ready
-                //constrntList.add(LocalBandwidthConstraint
-                //        .of(path.constraint().bandwidth(), DataRateUnit.valueOf("BPS")));
+            // Assign cost
+            if (path.costConstraint() != null) {
+                constrntList.add(path.costConstraint());
             }
 
             Boolean result = nullIsNotFound(get(PceService.class).updatePath(TunnelId.valueOf(id), constrntList),