update
added modify and teardown cases
worked with external app for UC1 demo

Change-Id: Ia4c71cb006ff9f9eb7b7ebd43753509e7ad0763b
diff --git a/apps/calendar/pom.xml b/apps/calendar/pom.xml
index dd73c99..396a4d0 100644
--- a/apps/calendar/pom.xml
+++ b/apps/calendar/pom.xml
@@ -62,6 +62,32 @@
             <groupId>org.osgi</groupId>
             <artifactId>org.osgi.core</artifactId>
         </dependency>
+
+    <dependency>
+      <groupId>org.onlab.onos</groupId>
+      <artifactId>onlab-thirdparty</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.onlab.onos</groupId>
+      <artifactId>onlab-misc</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.onlab.onos</groupId>
+      <artifactId>onlab-junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.onlab.onos</groupId>
+      <artifactId>onos-cli</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.karaf.shell</groupId>
+      <artifactId>org.apache.karaf.shell.console</artifactId>
+    </dependency>
     </dependencies>
 
     <build>
@@ -77,6 +103,7 @@
                             ${project.groupId}.${project.artifactId}
                         </Bundle-SymbolicName>
                         <Import-Package>
+                            org.slf4j,
                             org.osgi.framework,
                             javax.ws.rs,javax.ws.rs.core,
                             com.sun.jersey.api.core,
diff --git a/apps/calendar/src/main/java/org/onlab/onos/calendar/BandwidthCalendarResource.java b/apps/calendar/src/main/java/org/onlab/onos/calendar/BandwidthCalendarResource.java
index cd8cc5c..cfa1a63 100644
--- a/apps/calendar/src/main/java/org/onlab/onos/calendar/BandwidthCalendarResource.java
+++ b/apps/calendar/src/main/java/org/onlab/onos/calendar/BandwidthCalendarResource.java
@@ -16,43 +16,47 @@
 package org.onlab.onos.calendar;
 
 import java.net.URI;
-
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.core.Response;
-
-import org.onlab.onos.core.ApplicationId;
-import org.onlab.onos.core.CoreService;
 import org.onlab.onos.net.ConnectPoint;
 import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.intent.IntentService;
+import org.onlab.rest.BaseResource;
+import javax.ws.rs.POST;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+import org.onlab.onos.core.ApplicationId;
+import org.onlab.onos.core.CoreService;
 import org.onlab.onos.net.flow.DefaultTrafficSelector;
 import org.onlab.onos.net.flow.TrafficSelector;
 import org.onlab.onos.net.flow.TrafficTreatment;
-import org.onlab.onos.net.intent.Intent;
-import org.onlab.onos.net.intent.IntentService;
-import org.onlab.onos.net.intent.PointToPointIntentWithBandwidthConstraint;
-import org.onlab.onos.net.resource.BandwidthResourceRequest;
+import org.onlab.onos.net.intent.PointToPointIntent;
 import org.onlab.packet.Ethernet;
-import org.onlab.rest.BaseResource;
-
 import static org.onlab.onos.net.PortNumber.portNumber;
 import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
 
+import static org.slf4j.LoggerFactory.getLogger;
+import org.slf4j.Logger;
+
 /**
  * Web resource for triggering calendared intents.
  */
-@Path("intent")
+@javax.ws.rs.Path("intent")
 public class BandwidthCalendarResource extends BaseResource {
 
+    private static final Logger log = getLogger(BandwidthCalendarResource.class);
+
+    @javax.ws.rs.Path("/{src}/{dst}/{srcPort}/{dstPort}/{bandwidth}")
     @POST
-    @Path("{src}/{dst}/{srcPort}/{dstPort}/{bandwidth}")
     public Response createIntent(@PathParam("src") String src,
                                  @PathParam("dst") String dst,
                                  @PathParam("srcPort") String srcPort,
                                  @PathParam("dstPort") String dstPort,
                                  @PathParam("bandwidth") String bandwidth) {
-        // TODO: implement calls to intent framework
+
+        log.info("Receiving Create Intent request...");
+        log.info("Path Constraints: Src = {} SrcPort = {} Dest = {} DestPort = {} BW = {}",
+                src, srcPort, dst, dstPort, bandwidth);
+
         IntentService service = get(IntentService.class);
 
         ConnectPoint srcPoint = new ConnectPoint(deviceId(src), portNumber(srcPort));
@@ -61,13 +65,38 @@
         TrafficSelector selector = buildTrafficSelector();
         TrafficTreatment treatment = builder().build();
 
-        Intent intent = new PointToPointIntentWithBandwidthConstraint(
-                appId(), selector, treatment,
-                srcPoint, dstPoint, new BandwidthResourceRequest(Double.parseDouble(bandwidth)));
-        service.submit(intent);
+        PointToPointIntent intentP2P =
+                        new PointToPointIntent(appId(), selector, treatment,
+                                               srcPoint, dstPoint);
+        service.submit(intentP2P);
+        log.info("Submitted Calendar App intent: src = " + src + "dest = " + dst
+                + "srcPort = " + srcPort + "destPort" + dstPort + "intentID = " + intentP2P.id().toString());
+        String reply =  intentP2P.id().toString() + "\n";
 
-        return Response.ok("Yo! We got src=" + srcPoint + "; dst=" + dstPoint +
-                                   "; bw=" + bandwidth + "; intent service " + service).build();
+        return Response.ok(reply).build();
+    }
+
+    @javax.ws.rs.Path("/cancellation/{intentId}")
+    @DELETE
+    public Response withdrawIntent(@PathParam("intentId") String intentId) {
+
+        log.info("Receiving Teardown request...");
+        log.info("Withdraw intentId = {} ", intentId);
+
+        String reply =  "ok\n";
+        return Response.ok(reply).build();
+    }
+
+    @javax.ws.rs.Path("/modification/{intentId}/{bandwidth}")
+    @POST
+    public Response modifyBandwidth(@PathParam("intentId") String intentId,
+                                 @PathParam("bandwidth") String bandwidth) {
+
+        log.info("Receiving Modify request...");
+        log.info("Modify bw for intentId = {} with new bandwidth = {}", intentId, bandwidth);
+
+        String reply =  "ok\n";
+        return Response.ok(reply).build();
     }
 
     private TrafficSelector buildTrafficSelector() {
@@ -86,5 +115,4 @@
     protected ApplicationId appId() {
         return get(CoreService.class).registerApplication("org.onlab.onos.calendar");
     }
-
 }