REST API modifications to take application ID/Kep pair to fetch intents.

Change-Id: Icee85c6d801c92d94c6905f1d4316f63fea4e560
Reference: ONOS-1007
diff --git a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
index 3e20c5d..93b59eb 100644
--- a/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/IntentsWebResource.java
@@ -22,6 +22,8 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentService;
@@ -54,16 +56,24 @@
     /**
      * Gets a single intent by Id.
      *
-     * @param key Id to look up
+     * @param appId the Application ID
+     * @param key the Intent key value to look up
      * @return intent data
      */
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("{id}")
-    public Response getIntentById(@PathParam("id") String key) {
-        final Intent intent = nullIsNotFound(get(IntentService.class)
-                        .getIntent(Key.of(key, null)),
-                INTENT_NOT_FOUND);
+    @Path("{appId}/{key}")
+    public Response getIntentById(@PathParam("appId") Short appId,
+                                  @PathParam("key") String key) {
+        final ApplicationId app = get(CoreService.class).getAppId(appId);
+
+        Intent intent = get(IntentService.class).getIntent(Key.of(key, app));
+        if (intent == null) {
+            intent = get(IntentService.class)
+                    .getIntent(Key.of(Long.valueOf(key), app));
+        }
+        nullIsNotFound(intent, INTENT_NOT_FOUND);
+
         final ObjectNode root;
         if (intent instanceof HostToHostIntent) {
             root = codec(HostToHostIntent.class).encode((HostToHostIntent) intent, this);
diff --git a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
index d7c288e..7a2ce15 100644
--- a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
@@ -32,6 +32,7 @@
 import org.onosproject.codec.CodecService;
 import org.onosproject.codec.impl.CodecManager;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
 import org.onosproject.core.DefaultApplicationId;
 import org.onosproject.core.IdGenerator;
 import org.onosproject.net.NetworkResource;
@@ -63,6 +64,7 @@
 @Ignore
 public class IntentsResourceTest extends ResourceTest {
     final IntentService mockIntentService = createMock(IntentService.class);
+    final CoreService mockCoreService = createMock(CoreService.class);
     final HashSet<Intent> intents = new HashSet<>();
     private static final ApplicationId APP_ID = new DefaultApplicationId(1, "test");
     private IdGenerator mockGenerator;
@@ -105,6 +107,7 @@
             this.id = id;
         }
 
+        @Override
         public String toString() {
             return "Resource " + Integer.toString(id);
         }
@@ -260,14 +263,14 @@
     @Before
     public void setUpTest() {
         expect(mockIntentService.getIntents()).andReturn(intents).anyTimes();
-
         // Register the services needed for the test
         final CodecManager codecService =  new CodecManager();
         codecService.activate();
         ServiceDirectory testDirectory =
                 new TestServiceDirectory()
                         .add(IntentService.class, mockIntentService)
-                        .add(CodecService.class, codecService);
+                        .add(CodecService.class, codecService)
+                        .add(CoreService.class, mockCoreService);
 
         BaseResource.setServiceDirectory(testDirectory);
 
@@ -344,10 +347,15 @@
         expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
                 .andReturn(intent)
                 .anyTimes();
+        expect(mockIntentService.getIntent(Key.of("0", APP_ID)))
+                .andReturn(intent)
+                .anyTimes();
         replay(mockIntentService);
-
+        expect(mockCoreService.getAppId(APP_ID.id()))
+                .andReturn(APP_ID).anyTimes();
+        replay(mockCoreService);
         final WebResource rs = resource();
-        final String response = rs.path("intents/0").get(String.class);
+        final String response = rs.path("intents/1/0").get(String.class);
         final JsonObject result = JsonObject.readFrom(response);
         assertThat(result, matchesIntent(intent));
     }