Repository: ambari
Updated Branches:
  refs/heads/trunk 3a2b83c0e -> 6f416e39e


AMBARI-5996 - Views: ViewResourceHandler should allow Request Type in 
handleRequest


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6f416e39
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6f416e39
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6f416e39

Branch: refs/heads/trunk
Commit: 6f416e39e44b40c54baff8864d4720bb853ad123
Parents: 3a2b83c
Author: tbeerbower <[email protected]>
Authored: Mon Jun 2 22:18:17 2014 -0400
Committer: tbeerbower <[email protected]>
Committed: Tue Jun 3 08:49:49 2014 -0400

----------------------------------------------------------------------
 .../api/services/ViewSubResourceService.java    |  25 +++-
 .../services/ViewSubResourceServiceTest.java    | 144 +++++++++++++++++++
 .../apache/ambari/view/ViewResourceHandler.java |  24 ++++
 3 files changed, 192 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6f416e39/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewSubResourceService.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewSubResourceService.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewSubResourceService.java
index d5434ea..135cd78 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewSubResourceService.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ViewSubResourceService.java
@@ -73,6 +73,12 @@ public class ViewSubResourceService extends BaseService 
implements ViewResourceH
   // ----- ViewResourceHandler -----------------------------------------------
 
   @Override
+  public Response handleRequest(HttpHeaders headers, UriInfo ui, RequestType 
requestType, String resourceId) {
+    return handleRequest(headers, null, ui, getRequestType(requestType),
+        createResource(resourceId));
+  }
+
+  @Override
   public Response handleRequest(HttpHeaders headers, UriInfo ui, String 
resourceId) {
     return handleRequest(headers, null, ui, Request.Type.GET,
         createResource(resourceId));
@@ -82,7 +88,7 @@ public class ViewSubResourceService extends BaseService 
implements ViewResourceH
   // ----- helper methods ----------------------------------------------------
 
   // create a resource with the given id
-  private ResourceInstance createResource(String resourceId) {
+  protected ResourceInstance createResource(String resourceId) {
     Map<Resource.Type,String> mapIds = new HashMap<Resource.Type,String>();
 
     mapIds.put(Resource.Type.View, viewName);
@@ -94,4 +100,21 @@ public class ViewSubResourceService extends BaseService 
implements ViewResourceH
     }
     return super.createResource(type, mapIds);
   }
+
+  // get the internal request type from the view API request type
+  private Request.Type getRequestType(RequestType type) {
+    switch (type) {
+      case GET:
+        return Request.Type.GET;
+      case POST:
+        return Request.Type.POST;
+      case PUT:
+        return Request.Type.PUT;
+      case DELETE:
+        return Request.Type.DELETE;
+      case QUERY_POST:
+        return Request.Type.QUERY_POST;
+    }
+    throw new IllegalArgumentException("Unknown type " + type);
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/6f416e39/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
new file mode 100644
index 0000000..2b2c269
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/services/ViewSubResourceServiceTest.java
@@ -0,0 +1,144 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.api.services;
+
+import org.apache.ambari.server.api.resources.ResourceInstance;
+import org.apache.ambari.server.api.services.parsers.RequestBodyParser;
+import org.apache.ambari.server.api.services.serializers.ResultSerializer;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
+import org.apache.ambari.server.orm.entities.ViewInstanceEntityTest;
+
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ViewSubResourceService tests
+ */
+public class ViewSubResourceServiceTest extends BaseServiceTest {
+
+  @Override
+  public List<ServiceTestInvocation> getTestInvocations() throws Exception {
+    List<ServiceTestInvocation> listInvocations = new 
ArrayList<ServiceTestInvocation>();
+
+    ViewInstanceEntity viewInstanceEntity = 
ViewInstanceEntityTest.getViewInstanceEntity();
+
+    Resource.Type type = new Resource.Type("subResource");
+
+    // get resource
+    ViewSubResourceService service = new TestViewSubResourceService(type, 
viewInstanceEntity);
+    Method m = service.getClass().getMethod("getSubResource1", 
HttpHeaders.class, UriInfo.class, String.class);
+    Object[] args = new Object[] {getHttpHeaders(), getUriInfo(), "id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, 
m, args, null));
+
+    // get resource
+    service = new TestViewSubResourceService(type, viewInstanceEntity);
+    m = service.getClass().getMethod("getSubResource2", HttpHeaders.class, 
UriInfo.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, 
m, args, null));
+
+    // create resource
+    service = new TestViewSubResourceService(type, viewInstanceEntity);
+    m = service.getClass().getMethod("postSubResource", HttpHeaders.class, 
UriInfo.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.POST, service, 
m, args, null));
+
+    // update resource
+    service = new TestViewSubResourceService(type, viewInstanceEntity);
+    m = service.getClass().getMethod("putSubResource", HttpHeaders.class, 
UriInfo.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.PUT, service, 
m, args, null));
+
+    // delete resource
+    service = new TestViewSubResourceService(type, viewInstanceEntity);
+    m = service.getClass().getMethod("deleteSubResource", HttpHeaders.class, 
UriInfo.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.DELETE, 
service, m, args, null));
+
+    return listInvocations;
+  }
+
+  private class TestViewSubResourceService extends ViewSubResourceService {
+
+    /**
+     * Construct a view sub-resource service.
+     */
+    public TestViewSubResourceService(Resource.Type type, ViewInstanceEntity 
viewInstanceDefinition) {
+      super(type, viewInstanceDefinition);
+    }
+
+    public Response getSubResource1(@Context HttpHeaders headers, @Context 
UriInfo ui,
+                             @PathParam("resourceId") String resourceId) {
+
+      return handleRequest(headers, ui, resourceId);
+    }
+
+    public Response getSubResource2(@Context HttpHeaders headers, @Context 
UriInfo ui,
+                                   @PathParam("resourceId") String resourceId) 
{
+
+      return handleRequest(headers, ui, RequestType.GET, resourceId);
+    }
+
+    public Response postSubResource(@Context HttpHeaders headers, @Context 
UriInfo ui,
+                                   @PathParam("resourceId") String resourceId) 
{
+
+      return handleRequest(headers, ui, RequestType.POST, resourceId);
+    }
+
+    public Response putSubResource(@Context HttpHeaders headers, @Context 
UriInfo ui,
+                                    @PathParam("resourceId") String 
resourceId) {
+
+      return handleRequest(headers, ui, RequestType.PUT, resourceId);
+    }
+
+    public Response deleteSubResource(@Context HttpHeaders headers, @Context 
UriInfo ui,
+                                    @PathParam("resourceId") String 
resourceId) {
+
+      return handleRequest(headers, ui, RequestType.DELETE, resourceId);
+    }
+
+    @Override
+    protected ResourceInstance createResource(String resourceId) {
+      return getTestResource();
+    }
+
+    @Override
+    RequestFactory getRequestFactory() {
+      return getTestRequestFactory();
+    }
+
+    @Override
+    protected RequestBodyParser getBodyParser() {
+      return getTestBodyParser();
+    }
+
+    @Override
+    protected ResultSerializer getResultSerializer() {
+      return getTestResultSerializer();
+    }
+  }
+}
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/6f416e39/ambari-views/src/main/java/org/apache/ambari/view/ViewResourceHandler.java
----------------------------------------------------------------------
diff --git 
a/ambari-views/src/main/java/org/apache/ambari/view/ViewResourceHandler.java 
b/ambari-views/src/main/java/org/apache/ambari/view/ViewResourceHandler.java
index 22ed0f1..2d42454 100644
--- a/ambari-views/src/main/java/org/apache/ambari/view/ViewResourceHandler.java
+++ b/ambari-views/src/main/java/org/apache/ambari/view/ViewResourceHandler.java
@@ -27,10 +27,34 @@ import javax.ws.rs.core.UriInfo;
  * the API framework to handle the request.
  */
 public interface ViewResourceHandler {
+  /**
+   * Enum of request types.
+   */
+  public enum RequestType {
+    GET,
+    POST,
+    PUT,
+    DELETE,
+    QUERY_POST
+  }
 
   /**
    * Handle the API request.
    *
+   * @param headers      the headers
+   * @param ui           the URI info
+   * @param requestType  the request type
+   * @param resourceId   the resource id; may be null for collection resources
+   *
+   * @return the response
+   */
+  public Response handleRequest(HttpHeaders headers, UriInfo ui, RequestType 
requestType, String resourceId);
+
+  /**
+   * Handle the API request with a request type of GET. Same as
+   * {@link ViewResourceHandler#handleRequest(HttpHeaders, UriInfo, 
ViewResourceHandler.RequestType, String)}
+   * for {@link ViewResourceHandler.RequestType#GET}.
+   *
    * @param headers     the headers
    * @param ui          the URI info
    * @param resourceId  the resource id; may be null for collection resources

Reply via email to