You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2018/04/04 11:31:53 UTC

[ambari] branch trunk updated: AMBARI-23279. Integrate HostComponentService with Swagger (#785)

This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 5df06c1  AMBARI-23279. Integrate HostComponentService with Swagger (#785)
5df06c1 is described below

commit 5df06c19d6bcb5ceb398d5aa9f040567c466790d
Author: Gabor Boros <63...@users.noreply.github.com>
AuthorDate: Wed Apr 4 13:31:50 2018 +0200

    AMBARI-23279. Integrate HostComponentService with Swagger (#785)
---
 .../server/api/services/HostComponentService.java  | 165 ++++++++++++--
 .../eventcreator/ComponentEventCreator.java        |  18 +-
 .../request/eventcreator/HostEventCreator.java     |   2 +-
 .../controller/HostComponentProcessResponse.java   |   7 +
 .../server/controller/HostComponentSwagger.java    |  88 ++++++++
 .../controller/ServiceComponentHostResponse.java   |  23 +-
 .../internal/ComponentResourceProvider.java        | 154 +++++++------
 .../HostComponentProcessResourceProvider.java      |  57 ++---
 .../internal/HostComponentResourceProvider.java    | 240 +++++++++++----------
 .../internal/RequestResourceProvider.java          |  26 +--
 .../request/creator/ComponentEventCreatorTest.java |  34 +--
 .../request/creator/HostEventCreatorTest.java      |   2 +-
 .../internal/ComponentResourceProviderTest.java    |  96 ++++-----
 .../HostComponentProcessResourceProviderTest.java  |  26 +--
 .../HostComponentResourceProviderTest.java         | 120 +++++------
 .../internal/RequestResourceProviderTest.java      |   6 +-
 .../ambari/annotations/SwaggerPreferredParent.java |  40 ++++
 .../apache/ambari/swagger/AmbariSwaggerReader.java |  66 ++++--
 .../ambari/swagger/AmbariSwaggerReaderTest.java    | 116 +++++++++-
 19 files changed, 875 insertions(+), 411 deletions(-)

diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostComponentService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostComponentService.java
index a5e9aec..2f2051a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostComponentService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/HostComponentService.java
@@ -35,20 +35,38 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
 import org.apache.ambari.annotations.ApiIgnore;
+import org.apache.ambari.annotations.SwaggerPreferredParent;
 import org.apache.ambari.server.api.resources.ResourceInstance;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.HostComponentProcessResponse;
+import org.apache.ambari.server.controller.HostComponentSwagger;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.Validate;
 
+import org.apache.http.HttpStatus;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+
 /**
  * Service responsible for host_components resource requests.
  */
+@Api(value = "Host Components", description = "Endpoint for host component specific operations")
+@SwaggerPreferredParent(preferredParent = ClusterService.class)
 public class HostComponentService extends BaseService {
+
+  public static final String HOST_ROLE_REQUEST_TYPE = "org.apache.ambari.server.controller.ServiceComponentHostResponse";
+
   /**
    * Parent cluster id.
    */
@@ -79,9 +97,21 @@ public class HostComponentService extends BaseService {
    * @param hostComponentName host_component id
    * @return host_component resource representation
    */
-  @GET @ApiIgnore // until documented
+  @GET
   @Path("{hostComponentName}")
-  @Produces("text/plain")
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Get single host component for a host", response = HostComponentSwagger.class)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY),
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+  })
   public Response getHostComponent(String body, @Context HttpHeaders headers, @Context UriInfo ui,
                                    @PathParam("hostComponentName") String hostComponentName, @QueryParam("format") String format) {
 
@@ -108,8 +138,21 @@ public class HostComponentService extends BaseService {
    * @param ui      uri info
    * @return host_component collection resource representation
    */
-  @GET @ApiIgnore // until documented
-  @Produces("text/plain")
+  @GET
+  @Path("") // This is needed if class level path is not present otherwise no Swagger docs will be generated for this method
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Get all host components for a host", response = HostComponentSwagger.class, responseContainer = RESPONSE_CONTAINER_LIST)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY),
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+  })
   public Response getHostComponents(String body, @Context HttpHeaders headers, @Context UriInfo ui, @QueryParam("format") String format) {
     if (format != null && format.equals("client_config_tar")) {
       return createClientConfigResource(body, headers, ui, null);
@@ -129,8 +172,21 @@ public class HostComponentService extends BaseService {
    *
    * @return status code only, 201 if successful
    */
-  @POST @ApiIgnore // until documented
-  @Produces("text/plain")
+  @POST @ApiIgnore // ignored as doesnt work as intended, not able to accept multiple HostRoles
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Create new host components")
+  @ApiImplicitParams({
+    @ApiImplicitParam(dataType = HOST_ROLE_REQUEST_TYPE, paramType = PARAM_TYPE_BODY,  allowMultiple = true)
+  })
+  @ApiResponses(value = {
+    @ApiResponse(code = HttpStatus.SC_CREATED, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response createHostComponents(String body, @Context HttpHeaders headers, @Context UriInfo ui) {
 
     return handleRequest(headers, body, ui, Request.Type.POST,
@@ -148,9 +204,22 @@ public class HostComponentService extends BaseService {
    *
    * @return host_component resource representation
    */
-  @POST @ApiIgnore // until documented
+  @POST
   @Path("{hostComponentName}")
-  @Produces("text/plain")
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Create new host component")
+  @ApiImplicitParams({
+    @ApiImplicitParam(dataType = HOST_ROLE_REQUEST_TYPE, paramType = PARAM_TYPE_BODY)
+  })
+  @ApiResponses(value = {
+    @ApiResponse(code = HttpStatus.SC_CREATED, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response createHostComponent(String body, @Context HttpHeaders headers, @Context UriInfo ui,
                                    @PathParam("hostComponentName") String hostComponentName) {
 
@@ -169,9 +238,22 @@ public class HostComponentService extends BaseService {
    *
    * @return information regarding updated host_component
    */
-  @PUT @ApiIgnore // until documented
+  @PUT
   @Path("{hostComponentName}")
-  @Produces("text/plain")
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Update host component detail")
+  @ApiImplicitParams({
+    @ApiImplicitParam(dataType = HOST_ROLE_REQUEST_TYPE, paramType = PARAM_TYPE_BODY)
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response updateHostComponent(String body, @Context HttpHeaders headers, @Context UriInfo ui,
                                       @PathParam("hostComponentName") String hostComponentName) {
 
@@ -189,8 +271,21 @@ public class HostComponentService extends BaseService {
    *
    * @return information regarding updated host_component resources
    */
-  @PUT @ApiIgnore // until documented
-  @Produces("text/plain")
+  @PUT @ApiIgnore // ignored as doesnt work as intended, not able to accept multiple HostRoles
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Update multiple host component details")
+  @ApiImplicitParams({
+    @ApiImplicitParam(dataType = HOST_ROLE_REQUEST_TYPE, paramType = PARAM_TYPE_BODY,  allowMultiple = true)
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_ACCEPTED, message = MSG_REQUEST_ACCEPTED),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response updateHostComponents(String body, @Context HttpHeaders headers, @Context UriInfo ui) {
 
     return handleRequest(headers, body, ui, Request.Type.PUT,
@@ -207,9 +302,19 @@ public class HostComponentService extends BaseService {
    *
    * @return host_component resource representation
    */
-  @DELETE @ApiIgnore // until documented
+  @DELETE
   @Path("{hostComponentName}")
-  @Produces("text/plain")
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Delete host component")
+  @ApiImplicitParams({
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response deleteHostComponent(@Context HttpHeaders headers, @Context UriInfo ui,
                                    @PathParam("hostComponentName") String hostComponentName) {
 
@@ -226,17 +331,41 @@ public class HostComponentService extends BaseService {
    *
    * @return host_component resource representation
    */
-  @DELETE @ApiIgnore // until documented
-  @Produces("text/plain")
+  @DELETE
+  @Path("") // This is needed if class level path is not present otherwise no Swagger docs will be generated for this method
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Delete host components")
+  @ApiImplicitParams({
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+  })
   public Response deleteHostComponents(String body, @Context HttpHeaders headers, @Context UriInfo ui) {
 
     return handleRequest(headers, body, ui, Request.Type.DELETE,
         createHostComponentResource(m_clusterName, m_hostName, null));
   }
 
-  @GET @ApiIgnore // until documented
+
+  @GET
   @Path("{hostComponentName}/processes")
-  @Produces("text/plain")
+  @Produces(MediaType.TEXT_PLAIN)
+  @ApiOperation(value = "Get processes of a specific host component", response = HostComponentProcessResponse.class)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = QUERY_FIELDS, value = QUERY_FILTER_DESCRIPTION, dataType = DATA_TYPE_STRING, paramType = PARAM_TYPE_QUERY),
+  })
+  @ApiResponses({
+    @ApiResponse(code = HttpStatus.SC_OK, message = MSG_SUCCESSFUL_OPERATION),
+    @ApiResponse(code = HttpStatus.SC_NOT_FOUND, message = MSG_CLUSTER_OR_HOST_NOT_FOUND),
+    @ApiResponse(code = HttpStatus.SC_UNAUTHORIZED, message = MSG_NOT_AUTHENTICATED),
+    @ApiResponse(code = HttpStatus.SC_FORBIDDEN, message = MSG_PERMISSION_DENIED),
+    @ApiResponse(code = HttpStatus.SC_INTERNAL_SERVER_ERROR, message = MSG_SERVER_ERROR),
+    @ApiResponse(code = HttpStatus.SC_BAD_REQUEST, message = MSG_INVALID_ARGUMENTS),
+  })
   public Response getProcesses(@Context HttpHeaders headers, @Context UriInfo ui,
       @PathParam("hostComponentName") String hostComponentName) {
     Map<Resource.Type,String> mapIds = new HashMap<>();
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
index 8c65a35..1fb87f0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/ComponentEventCreator.java
@@ -91,7 +91,7 @@ public class ComponentEventCreator implements RequestAuditEventCreator {
       .withOperation(operation)
       .withRemoteIp(request.getRemoteAddress())
       .withTimestamp(System.currentTimeMillis())
-      .withHostname(RequestAuditEventCreatorHelper.getProperty(request, HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID))
+      .withHostname(RequestAuditEventCreatorHelper.getProperty(request, HostComponentResourceProvider.HOST_NAME))
       .withRequestId(String.valueOf(requestId));
 
     if (result.getStatus().isErrorState()) {
@@ -117,8 +117,8 @@ public class ComponentEventCreator implements RequestAuditEventCreator {
       switch (request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_LEVEL_ID)) {
         case "CLUSTER":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID)) {
-              operation = String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID)) + ": all services"
+            if (map.containsKey(HostComponentResourceProvider.CLUSTER_NAME)) {
+              operation = String.valueOf(map.get(HostComponentResourceProvider.STATE)) + ": all services"
                 + " on all hosts"
                 + (request.getBody().getQueryString() != null && request.getBody().getQueryString().length() > 0 ? " that matches " + request.getBody().getQueryString() : "")
                 + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
@@ -128,9 +128,9 @@ public class ComponentEventCreator implements RequestAuditEventCreator {
           break;
         case "HOST":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID)) {
+            if (map.containsKey(HostComponentResourceProvider.CLUSTER_NAME)) {
               String query = request.getBody().getRequestInfoProperties().get("query");
-              operation = String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID)) + ": " + query.substring(query.indexOf("(") + 1, query.length() - 1)
+              operation = String.valueOf(map.get(HostComponentResourceProvider.STATE)) + ": " + query.substring(query.indexOf("(") + 1, query.length() - 1)
                 + " on " + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_HOST_NAME)
                 + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
               break;
@@ -139,8 +139,8 @@ public class ComponentEventCreator implements RequestAuditEventCreator {
           break;
         case "HOST_COMPONENT":
           for (Map<String, Object> map : request.getBody().getPropertySets()) {
-            if (map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID)) {
-              operation = String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID)) + ": " + String.valueOf(map.get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID))
+            if (map.containsKey(HostComponentResourceProvider.COMPONENT_NAME)) {
+              operation = String.valueOf(map.get(HostComponentResourceProvider.STATE)) + ": " + String.valueOf(map.get(HostComponentResourceProvider.COMPONENT_NAME))
                 + "/" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_SERVICE_ID)
                 + " on " + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_HOST_NAME)
                 + " (" + request.getBody().getRequestInfoProperties().get(RequestOperationLevel.OPERATION_CLUSTER_ID) + ")";
@@ -153,8 +153,8 @@ public class ComponentEventCreator implements RequestAuditEventCreator {
     }
 
     for (Map<String, Object> map : request.getBody().getPropertySets()) {
-      if (map.containsKey(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID)) {
-        return "Turn " + map.get(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID) + " Maintenance Mode for " + map.get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+      if (map.containsKey(HostComponentResourceProvider.MAINTENANCE_STATE)) {
+        return "Turn " + map.get(HostComponentResourceProvider.MAINTENANCE_STATE) + " Maintenance Mode for " + map.get(HostComponentResourceProvider.COMPONENT_NAME);
       }
     }
 
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
index eec7a3a..b2cfbb5 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/audit/request/eventcreator/HostEventCreator.java
@@ -138,7 +138,7 @@ public class HostEventCreator implements RequestAuditEventCreator {
       Set<Map<String, String>> set = (Set<Map<String, String>>) propertySet.getProperties().get("host_components");
       if (set != null && !set.isEmpty()) {
         for(Map<String, String> element : set) {
-          components.add(element.get(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID));
+          components.add(element.get(HostComponentResourceProvider.COMPONENT_NAME));
         }
       }
     }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentProcessResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentProcessResponse.java
index 6dcfdde..dae83bc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentProcessResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentProcessResponse.java
@@ -19,6 +19,10 @@ package org.apache.ambari.server.controller;
 
 import java.util.Map;
 
+import org.apache.ambari.server.controller.internal.HostComponentProcessResourceProvider;
+
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Response object for HostComponent processes
  */
@@ -47,6 +51,7 @@ public class HostComponentProcessResponse {
   /**
    * @return the cluster
    */
+  @ApiModelProperty(name = HostComponentProcessResourceProvider.CLUSTER_NAME_PROPERTY_ID)
   public String getCluster() {
     return cluster;
   }
@@ -54,6 +59,7 @@ public class HostComponentProcessResponse {
   /**
    * @return the host
    */
+  @ApiModelProperty(name = HostComponentProcessResourceProvider.HOST_NAME_PROPERTY_ID)
   public String getHost() {
     return host;
   }
@@ -61,6 +67,7 @@ public class HostComponentProcessResponse {
   /**
    * @return the component
    */
+  @ApiModelProperty(name = HostComponentProcessResourceProvider.COMPONENT_NAME_PROPERTY_ID)
   public String getComponent() {
     return component;
   }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentSwagger.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentSwagger.java
new file mode 100644
index 0000000..67672e4
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/HostComponentSwagger.java
@@ -0,0 +1,88 @@
+/*
+ * 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.controller;
+
+import java.util.List;
+
+import org.apache.ambari.server.controller.internal.ComponentResourceProvider;
+import org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
+
+import io.swagger.annotations.ApiModelProperty;
+
+public interface HostComponentSwagger extends ApiModel {
+
+    @ApiModelProperty(name = HostComponentResourceProvider.HOST_ROLES)
+    ServiceComponentHostResponse getHostRole();
+
+    @ApiModelProperty(name = HostComponentResourceProvider.HOST_PROPERTY_ID)
+    HostComponentHost getHost();
+
+    @ApiModelProperty(name = HostComponentResourceProvider.METRICS_PROPERTY_ID)
+    HostComponentMetrics getMetrics();
+
+    @ApiModelProperty(name = HostComponentResourceProvider.PROCESSES_PROPERTY_ID)
+    List<HostComponentProcesses> getProcesses();
+
+    @ApiModelProperty(name = HostComponentResourceProvider.COMPONENT_PROPERTY_ID)
+    List<HostComponentComponent> getComponent();
+
+
+    interface HostComponentHost extends ApiModel {
+
+        @ApiModelProperty(name = HostComponentResourceProvider.HREF_PROPERTY_ID)
+        String getHref();
+    }
+
+    interface HostComponentMetrics extends ApiModel {
+
+
+    }
+
+    interface HostComponentProcesses extends ApiModel {
+
+
+    }
+
+
+    interface HostComponentComponent extends ApiModel {
+
+        @ApiModelProperty(name = HostComponentResourceProvider.HREF_PROPERTY_ID)
+        String getHref();
+
+        @ApiModelProperty(name = HostComponentResourceProvider.SERVICE_COMPONENT_INFO)
+        HostComponentServiceComponentInfo getHostComponentServiceComponentInfo();
+
+
+        interface HostComponentServiceComponentInfo extends ApiModel {
+
+            @ApiModelProperty(name = ComponentResourceProvider.CLUSTER_NAME_PROPERTY_ID)
+            String getClusterName();
+
+            @ApiModelProperty(name = ComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID)
+            String getComponentName();
+
+            @ApiModelProperty(name = ComponentResourceProvider.SERVICE_NAME_PROPERTY_ID)
+            String getServiceName();
+        }
+
+
+    }
+
+
+}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java
index bc67117..fe8734c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceComponentHostResponse.java
@@ -20,11 +20,14 @@ package org.apache.ambari.server.controller;
 
 import java.util.Map;
 
+import org.apache.ambari.server.controller.internal.HostComponentResourceProvider;
 import org.apache.ambari.server.state.HostComponentAdminState;
 import org.apache.ambari.server.state.HostConfig;
 import org.apache.ambari.server.state.UpgradeState;
 
-public class ServiceComponentHostResponse {
+import io.swagger.annotations.ApiModelProperty;
+
+public class ServiceComponentHostResponse implements ApiModel {
 
   private String clusterName; // REF
   private String serviceName;
@@ -68,6 +71,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the serviceName
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.SERVICE_NAME_PROPERTY_ID)
   public String getServiceName() {
     return serviceName;
   }
@@ -82,6 +86,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the componentName
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID)
   public String getComponentName() {
     return componentName;
   }
@@ -96,6 +101,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the displayName
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.DISPLAY_NAME_PROPERTY_ID)
   public String getDisplayName() {
     return displayName;
   }
@@ -103,6 +109,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the hostname
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.HOST_NAME_PROPERTY_ID)
   public String getHostname() {
     return hostname;
   }
@@ -117,6 +124,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the public hostname
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.PUBLIC_HOST_NAME_PROPERTY_ID)
   public String getPublicHostname() {
     return publicHostname;
   }
@@ -131,6 +139,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the liveState
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.STATE_PROPERTY_ID)
   public String getLiveState() {
     return liveState;
   }
@@ -145,6 +154,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the version
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.VERSION_PROPERTY_ID)
   public String getVersion() {
     return version;
   }
@@ -152,6 +162,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the desiredState
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.DESIRED_STATE_PROPERTY_ID)
   public String getDesiredState() {
     return desiredState;
   }
@@ -166,6 +177,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the desiredStackVersion
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.DESIRED_STACK_ID_PROPERTY_ID)
   public String getDesiredStackVersion() {
     return desiredStackVersion;
   }
@@ -182,6 +194,7 @@ public class ServiceComponentHostResponse {
    *
    * @return the desired repository.
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION_PROPERTY_ID)
   public String getDesiredRepositoryVersion() {
     return desiredRepositoryVersion;
   }
@@ -189,6 +202,8 @@ public class ServiceComponentHostResponse {
   /**
    * @return the clusterName
    */
+
+  @ApiModelProperty(name = HostComponentResourceProvider.CLUSTER_NAME_PROPERTY_ID)
   public String getClusterName() {
     return clusterName;
   }
@@ -203,6 +218,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the admin state of the host component
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.DESIRED_ADMIN_STATE_PROPERTY_ID, hidden = true)
   public String getAdminState() {
     return adminState;
   }
@@ -258,6 +274,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the actual configs
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.ACTUAL_CONFIGS_PROPERTY_ID)
   public Map<String, HostConfig> getActualConfigs() {
     return actualConfigs;
   }
@@ -272,6 +289,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return if the configs are stale
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.STALE_CONFIGS_PROPERTY_ID)
   public boolean isStaleConfig() {
     return staleConfig;
   }
@@ -286,6 +304,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return true if configs are reloadable without RESTART command
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.RELOAD_CONFIGS_PROPERTY_ID)
   public boolean isReloadConfig() {
     return reloadConfig;
   }
@@ -300,6 +319,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the maintenance state
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.MAINTENANCE_STATE_PROPERTY_ID)
   public String getMaintenanceState() {
     return maintenanceState;
   }
@@ -321,6 +341,7 @@ public class ServiceComponentHostResponse {
   /**
    * @return the upgrade state
    */
+  @ApiModelProperty(name = HostComponentResourceProvider.UPGRADE_STATE_PROPERTY_ID)
   public UpgradeState getUpgradeState() {
     return upgradeState;
   }
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
index 759ec82..03b45e7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
@@ -47,6 +47,7 @@ import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.security.authorization.AuthorizationException;
 import org.apache.ambari.server.security.authorization.AuthorizationHelper;
 import org.apache.ambari.server.security.authorization.ResourceType;
@@ -79,37 +80,56 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
 
   private static final Logger LOG = LoggerFactory.getLogger(ComponentResourceProvider.class);
 
-  // ----- Property ID constants ---------------------------------------------
+  public static final String SERVICE_COMPONENT_INFO = "ServiceComponentInfo";
+
+  public static final String CLUSTER_NAME_PROPERTY_ID = "cluster_name";
+  public static final String SERVICE_NAME_PROPERTY_ID = "service_name";
+  public static final String COMPONENT_NAME_PROPERTY_ID  = "component_name";
+  public static final String DISPLAY_NAME_PROPERTY_ID = "display_name";
+  public static final String STATE_PROPERTY_ID = "state";
+  public static final String CATEGORY_PROPERTY_ID = "category";
+  public static final String TOTAL_COUNT_PROPERTY_ID = "total_count";
+  public static final String STARTED_COUNT_PROPERTY_ID = "started_count";
+  public static final String INSTALLED_COUNT_PROPERTY_ID = "installed_count";
+  public static final String INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID = "installed_and_maintenance_off_count";
+  public static final String INIT_COUNT_PROPERTY_ID = "init_count";
+  public static final String UNKNOWN_COUNT_PROPERTY_ID = "unknown_count";
+  public static final String INSTALL_FAILED_COUNT_PROPERTY_ID = "install_failed_count";
+  public static final String RECOVERY_ENABLED_PROPERTY_ID = "recovery_enabled";
+  public static final String DESIRED_STACK_PROPERTY_ID = "desired_stack";
+  public static final String DESIRED_VERSION_PROPERTY_ID = "desired_version";
+  public static final String REPOSITORY_STATE_PROPERTY_ID = "repository_state";
 
   // Components
-  protected static final String COMPONENT_CLUSTER_NAME_PROPERTY_ID    = "ServiceComponentInfo/cluster_name";
-  protected static final String COMPONENT_SERVICE_NAME_PROPERTY_ID    = "ServiceComponentInfo/service_name";
-  protected static final String COMPONENT_COMPONENT_NAME_PROPERTY_ID  = "ServiceComponentInfo/component_name";
-  protected static final String COMPONENT_DISPLAY_NAME_PROPERTY_ID    = "ServiceComponentInfo/display_name";
-  protected static final String COMPONENT_STATE_PROPERTY_ID           = "ServiceComponentInfo/state";
-  protected static final String COMPONENT_CATEGORY_PROPERTY_ID        = "ServiceComponentInfo/category";
-  protected static final String COMPONENT_TOTAL_COUNT_PROPERTY_ID     = "ServiceComponentInfo/total_count";
-  protected static final String COMPONENT_STARTED_COUNT_PROPERTY_ID   = "ServiceComponentInfo/started_count";
-  protected static final String COMPONENT_INSTALLED_COUNT_PROPERTY_ID = "ServiceComponentInfo/installed_count";
-  protected static final String COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID
-                                                                      = "ServiceComponentInfo/installed_and_maintenance_off_count";
-  protected static final String COMPONENT_INIT_COUNT_PROPERTY_ID      = "ServiceComponentInfo/init_count";
-  protected static final String COMPONENT_UNKNOWN_COUNT_PROPERTY_ID   = "ServiceComponentInfo/unknown_count";
-  protected static final String COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID = "ServiceComponentInfo/install_failed_count";
-  protected static final String COMPONENT_RECOVERY_ENABLED_ID         = "ServiceComponentInfo/recovery_enabled";
-  protected static final String COMPONENT_DESIRED_STACK               = "ServiceComponentInfo/desired_stack";
-  protected static final String COMPONENT_DESIRED_VERSION             = "ServiceComponentInfo/desired_version";
-  protected static final String COMPONENT_REPOSITORY_STATE            = "ServiceComponentInfo/repository_state";
-
+  public static final String CLUSTER_NAME = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + CLUSTER_NAME_PROPERTY_ID;
+  public static final String SERVICE_NAME = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + SERVICE_NAME_PROPERTY_ID;
+  public static final String COMPONENT_NAME = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + COMPONENT_NAME_PROPERTY_ID;
+  public static final String DISPLAY_NAME = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + DISPLAY_NAME_PROPERTY_ID;
+  public static final String STATE = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + STATE_PROPERTY_ID;
+  public static final String CATEGORY = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + CATEGORY_PROPERTY_ID;
+  public static final String TOTAL_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + TOTAL_COUNT_PROPERTY_ID;
+  public static final String STARTED_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + STARTED_COUNT_PROPERTY_ID;
+  public static final String INSTALLED_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + INSTALLED_COUNT_PROPERTY_ID;
+  public static final String INSTALLED_AND_MAINTENANCE_OFF_COUNT =
+          SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID;
+  public static final String INIT_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + INIT_COUNT_PROPERTY_ID;
+  public static final String UNKNOWN_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + UNKNOWN_COUNT_PROPERTY_ID;
+  public static final String INSTALL_FAILED_COUNT = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + INSTALL_FAILED_COUNT_PROPERTY_ID;
+  public static final String RECOVERY_ENABLED = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + RECOVERY_ENABLED_PROPERTY_ID;
+  public static final String DESIRED_STACK = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + DESIRED_STACK_PROPERTY_ID;
+  public static final String DESIRED_VERSION = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + DESIRED_VERSION_PROPERTY_ID;
+  public static final String REPOSITORY_STATE = SERVICE_COMPONENT_INFO + PropertyHelper.EXTERNAL_PATH_SEP + REPOSITORY_STATE_PROPERTY_ID;
+
+  
   private static final String TRUE = "true";
 
   //Parameters from the predicate
   private static final String QUERY_PARAMETERS_RUN_SMOKE_TEST_ID = "params/run_smoke_test";
 
   private static Set<String> pkPropertyIds = Sets.newHashSet(
-          COMPONENT_CLUSTER_NAME_PROPERTY_ID,
-          COMPONENT_SERVICE_NAME_PROPERTY_ID,
-          COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+          CLUSTER_NAME,
+          SERVICE_NAME,
+          COMPONENT_NAME);
 
   /**
    * The property ids for an servce resource.
@@ -123,31 +143,29 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
 
   static {
     // properties
-    PROPERTY_IDS.add(COMPONENT_CLUSTER_NAME_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_SERVICE_NAME_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_COMPONENT_NAME_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_DISPLAY_NAME_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_STATE_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_CATEGORY_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_TOTAL_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_STARTED_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_INSTALLED_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID);
-
-    PROPERTY_IDS.add(COMPONENT_INIT_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_UNKNOWN_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID);
-    PROPERTY_IDS.add(COMPONENT_RECOVERY_ENABLED_ID);
-    PROPERTY_IDS.add(COMPONENT_DESIRED_STACK);
-    PROPERTY_IDS.add(COMPONENT_DESIRED_VERSION);
-    PROPERTY_IDS.add(COMPONENT_REPOSITORY_STATE);
-
+    PROPERTY_IDS.add(CLUSTER_NAME);
+    PROPERTY_IDS.add(SERVICE_NAME);
+    PROPERTY_IDS.add(COMPONENT_NAME);
+    PROPERTY_IDS.add(DISPLAY_NAME);
+    PROPERTY_IDS.add(STATE);
+    PROPERTY_IDS.add(CATEGORY);
+    PROPERTY_IDS.add(TOTAL_COUNT);
+    PROPERTY_IDS.add(STARTED_COUNT);
+    PROPERTY_IDS.add(INSTALLED_COUNT);
+    PROPERTY_IDS.add(INSTALLED_AND_MAINTENANCE_OFF_COUNT);
+    PROPERTY_IDS.add(INIT_COUNT);
+    PROPERTY_IDS.add(UNKNOWN_COUNT);
+    PROPERTY_IDS.add(INSTALL_FAILED_COUNT);
+    PROPERTY_IDS.add(RECOVERY_ENABLED);
+    PROPERTY_IDS.add(DESIRED_STACK);
+    PROPERTY_IDS.add(DESIRED_VERSION);
+    PROPERTY_IDS.add(REPOSITORY_STATE);
     PROPERTY_IDS.add(QUERY_PARAMETERS_RUN_SMOKE_TEST_ID);
 
     // keys
-    KEY_PROPERTY_IDS.put(Resource.Type.Component, COMPONENT_COMPONENT_NAME_PROPERTY_ID);
-    KEY_PROPERTY_IDS.put(Resource.Type.Service, COMPONENT_SERVICE_NAME_PROPERTY_ID);
-    KEY_PROPERTY_IDS.put(Resource.Type.Cluster, COMPONENT_CLUSTER_NAME_PROPERTY_ID);
+    KEY_PROPERTY_IDS.put(Resource.Type.Component, COMPONENT_NAME);
+    KEY_PROPERTY_IDS.put(Resource.Type.Service, SERVICE_NAME);
+    KEY_PROPERTY_IDS.put(Resource.Type.Cluster, CLUSTER_NAME);
   }
 
   private MaintenanceStateHelper maintenanceStateHelper;
@@ -223,23 +241,23 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
 
     for (ServiceComponentResponse response : responses) {
       Resource resource = new ResourceImpl(Resource.Type.Component);
-      setResourceProperty(resource, COMPONENT_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
-      setResourceProperty(resource, COMPONENT_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds);
-      setResourceProperty(resource, COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds);
-      setResourceProperty(resource, COMPONENT_DISPLAY_NAME_PROPERTY_ID, response.getDisplayName(), requestedIds);
-      setResourceProperty(resource, COMPONENT_STATE_PROPERTY_ID, response.getDesiredState(), requestedIds);
-      setResourceProperty(resource, COMPONENT_CATEGORY_PROPERTY_ID, response.getCategory(), requestedIds);
-      setResourceProperty(resource, COMPONENT_TOTAL_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("totalCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_STARTED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("startedCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_INSTALLED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installedCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installedAndMaintenanceOffCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("installFailedCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_INIT_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("initCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_UNKNOWN_COUNT_PROPERTY_ID, response.getServiceComponentStateCount().get("unknownCount"), requestedIds);
-      setResourceProperty(resource, COMPONENT_RECOVERY_ENABLED_ID, String.valueOf(response.isRecoveryEnabled()), requestedIds);
-      setResourceProperty(resource, COMPONENT_DESIRED_STACK, response.getDesiredStackId(), requestedIds);
-      setResourceProperty(resource, COMPONENT_DESIRED_VERSION, response.getDesiredVersion(), requestedIds);
-      setResourceProperty(resource, COMPONENT_REPOSITORY_STATE, response.getRepositoryState(), requestedIds);
+      setResourceProperty(resource, CLUSTER_NAME, response.getClusterName(), requestedIds);
+      setResourceProperty(resource, SERVICE_NAME, response.getServiceName(), requestedIds);
+      setResourceProperty(resource, COMPONENT_NAME, response.getComponentName(), requestedIds);
+      setResourceProperty(resource, DISPLAY_NAME, response.getDisplayName(), requestedIds);
+      setResourceProperty(resource, STATE, response.getDesiredState(), requestedIds);
+      setResourceProperty(resource, CATEGORY, response.getCategory(), requestedIds);
+      setResourceProperty(resource, TOTAL_COUNT, response.getServiceComponentStateCount().get("totalCount"), requestedIds);
+      setResourceProperty(resource, STARTED_COUNT, response.getServiceComponentStateCount().get("startedCount"), requestedIds);
+      setResourceProperty(resource, INSTALLED_COUNT, response.getServiceComponentStateCount().get("installedCount"), requestedIds);
+      setResourceProperty(resource, INSTALLED_AND_MAINTENANCE_OFF_COUNT, response.getServiceComponentStateCount().get("installedAndMaintenanceOffCount"), requestedIds);
+      setResourceProperty(resource, INSTALL_FAILED_COUNT, response.getServiceComponentStateCount().get("installFailedCount"), requestedIds);
+      setResourceProperty(resource, INIT_COUNT, response.getServiceComponentStateCount().get("initCount"), requestedIds);
+      setResourceProperty(resource, UNKNOWN_COUNT, response.getServiceComponentStateCount().get("unknownCount"), requestedIds);
+      setResourceProperty(resource, RECOVERY_ENABLED, String.valueOf(response.isRecoveryEnabled()), requestedIds);
+      setResourceProperty(resource, DESIRED_STACK, response.getDesiredStackId(), requestedIds);
+      setResourceProperty(resource, DESIRED_VERSION, response.getDesiredVersion(), requestedIds);
+      setResourceProperty(resource, REPOSITORY_STATE, response.getRepositoryState(), requestedIds);
 
       resources.add(resource);
     }
@@ -309,12 +327,12 @@ public class ComponentResourceProvider extends AbstractControllerResourceProvide
    */
   private ServiceComponentRequest getRequest(Map<String, Object> properties) {
     return new ServiceComponentRequest(
-        (String) properties.get(COMPONENT_CLUSTER_NAME_PROPERTY_ID),
-        (String) properties.get(COMPONENT_SERVICE_NAME_PROPERTY_ID),
-        (String) properties.get(COMPONENT_COMPONENT_NAME_PROPERTY_ID),
-        (String) properties.get(COMPONENT_STATE_PROPERTY_ID),
-        (String) properties.get(COMPONENT_RECOVERY_ENABLED_ID),
-        (String) properties.get(COMPONENT_CATEGORY_PROPERTY_ID));
+        (String) properties.get(CLUSTER_NAME),
+        (String) properties.get(SERVICE_NAME),
+        (String) properties.get(COMPONENT_NAME),
+        (String) properties.get(STATE),
+        (String) properties.get(RECOVERY_ENABLED),
+        (String) properties.get(CATEGORY));
   }
 
   // Create the components for the given requests.
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProvider.java
index db514de..c85cdee 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProvider.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ServiceComponentHost;
@@ -48,34 +49,42 @@ public class HostComponentProcessResourceProvider extends ReadOnlyResourceProvid
 
   // ----- Property ID constants ---------------------------------------------
 
-  // process
-  public static final String HC_PROCESS_NAME_ID = "HostComponentProcess/name";
-  public static final String HC_PROCESS_STATUS_ID = "HostComponentProcess/status";
+  public static final String HOST_COMPONENT_PROCESS = "HostComponentProcess";
+
+  public static final String NAME_PROPERTY_ID = "name";
+  public static final String STATUS_PROPERTY_ID = "status";
+
+  public static final String CLUSTER_NAME_PROPERTY_ID = "cluster_name";
+  public static final String HOST_NAME_PROPERTY_ID = "host_name";
+  public static final String COMPONENT_NAME_PROPERTY_ID = "component_name";
+
+  public static final String NAME = HOST_COMPONENT_PROCESS + PropertyHelper.EXTERNAL_PATH_SEP + NAME_PROPERTY_ID;
+  public static final String STATUS = HOST_COMPONENT_PROCESS + PropertyHelper.EXTERNAL_PATH_SEP + STATUS_PROPERTY_ID;
   
-  public static final String HC_PROCESS_CLUSTER_NAME_ID = "HostComponentProcess/cluster_name";
-  public static final String HC_PROCESS_HOST_NAME_ID = "HostComponentProcess/host_name";
-  public static final String HC_PROCESS_COMPONENT_NAME_ID = "HostComponentProcess/component_name";
+  public static final String CLUSTER_NAME = HOST_COMPONENT_PROCESS + PropertyHelper.EXTERNAL_PATH_SEP + CLUSTER_NAME_PROPERTY_ID;
+  public static final String HOST_NAME = HOST_COMPONENT_PROCESS + PropertyHelper.EXTERNAL_PATH_SEP + HOST_NAME_PROPERTY_ID;
+  public static final String COMPONENT_NAME = HOST_COMPONENT_PROCESS + PropertyHelper.EXTERNAL_PATH_SEP + COMPONENT_NAME_PROPERTY_ID;
 
   /**
    * The key property ids for a HostComponentProcess resource.
    */
   private static Map<Resource.Type, String> keyPropertyIds = ImmutableMap.<Resource.Type, String>builder()
-      .put(Resource.Type.Cluster, HC_PROCESS_CLUSTER_NAME_ID)
-      .put(Resource.Type.Host, HC_PROCESS_HOST_NAME_ID)
-      .put(Resource.Type.Component, HC_PROCESS_COMPONENT_NAME_ID)
-      .put(Resource.Type.HostComponent, HC_PROCESS_COMPONENT_NAME_ID)
-      .put(Resource.Type.HostComponentProcess, HC_PROCESS_NAME_ID)
+      .put(Resource.Type.Cluster, CLUSTER_NAME)
+      .put(Resource.Type.Host, HOST_NAME)
+      .put(Resource.Type.Component, COMPONENT_NAME)
+      .put(Resource.Type.HostComponent, COMPONENT_NAME)
+      .put(Resource.Type.HostComponentProcess, NAME)
       .build();
 
   /**
    * The property ids for a HostComponentProcess resource.
    */
   private static Set<String> propertyIds = Sets.newHashSet(
-      HC_PROCESS_NAME_ID,
-      HC_PROCESS_STATUS_ID,
-      HC_PROCESS_CLUSTER_NAME_ID,
-      HC_PROCESS_HOST_NAME_ID,
-      HC_PROCESS_COMPONENT_NAME_ID);
+      NAME,
+      STATUS,
+      CLUSTER_NAME,
+      HOST_NAME,
+      COMPONENT_NAME);
 
   // ----- Constructors ----------------------------------------------------
 
@@ -118,15 +127,15 @@ public class HostComponentProcessResourceProvider extends ReadOnlyResourceProvid
     for (HostComponentProcessResponse response : responses) {
       Resource r = new ResourceImpl(Resource.Type.HostComponentProcess);
       
-      setResourceProperty(r, HC_PROCESS_CLUSTER_NAME_ID, response.getCluster(),
+      setResourceProperty(r, CLUSTER_NAME, response.getCluster(),
           requestedIds);
-      setResourceProperty(r, HC_PROCESS_HOST_NAME_ID, response.getHost(),
+      setResourceProperty(r, HOST_NAME, response.getHost(),
           requestedIds);
-      setResourceProperty(r, HC_PROCESS_COMPONENT_NAME_ID, response.getComponent(), requestedIds);
+      setResourceProperty(r, COMPONENT_NAME, response.getComponent(), requestedIds);
       
-      setResourceProperty(r, HC_PROCESS_NAME_ID, response.getValueMap().get("name"),
+      setResourceProperty(r, NAME, response.getValueMap().get("name"),
           requestedIds);
-      setResourceProperty(r, HC_PROCESS_STATUS_ID, response.getValueMap().get("status"),
+      setResourceProperty(r, STATUS, response.getValueMap().get("status"),
           requestedIds);
       
       // set the following even if they aren't defined
@@ -158,9 +167,9 @@ public class HostComponentProcessResourceProvider extends ReadOnlyResourceProvid
 
     for (Map<String, Object> requestMap : requestMaps) {
       
-      String cluster = (String) requestMap.get(HC_PROCESS_CLUSTER_NAME_ID);
-      String component = (String) requestMap.get(HC_PROCESS_COMPONENT_NAME_ID);
-      String host = (String) requestMap.get(HC_PROCESS_HOST_NAME_ID);
+      String cluster = (String) requestMap.get(CLUSTER_NAME);
+      String component = (String) requestMap.get(COMPONENT_NAME);
+      String host = (String) requestMap.get(HOST_NAME);
 
       Cluster c = clusters.getCluster(cluster);
       
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
index e1bef2a..dffde24 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
@@ -84,42 +84,52 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
   // ----- Property ID constants ---------------------------------------------
 
-  // Host Components
-  public static final String HOST_COMPONENT_ROLE_ID
-      = PropertyHelper.getPropertyId("HostRoles", "role_id");
-  public static final String HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "cluster_name");
-  public static final String HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "service_name");
-  public static final String HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "component_name");
-  public static final String HOST_COMPONENT_DISPLAY_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "display_name");
-  public static final String HOST_COMPONENT_HOST_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "host_name");
-  public static final String HOST_COMPONENT_PUBLIC_HOST_NAME_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "public_host_name");
-  public static final String HOST_COMPONENT_STATE_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "state");
-  public static final String HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "desired_state");
-  public static final String HOST_COMPONENT_VERSION_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "version");
-  public static final String HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "desired_stack_id");
-  public static final String HOST_COMPONENT_DESIRED_REPOSITORY_VERSION
-    = PropertyHelper.getPropertyId("HostRoles", "desired_repository_version");
-  public static final String HOST_COMPONENT_ACTUAL_CONFIGS_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "actual_configs");
-  public static final String HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "stale_configs");
-  public static final String HOST_COMPONENT_RELOAD_CONFIGS_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "reload_configs");
-  public static final String HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID
-      = PropertyHelper.getPropertyId("HostRoles", "desired_admin_state");
-  public static final String HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID
-      = "HostRoles/maintenance_state";
-  public static final String HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID = "HostRoles/upgrade_state";
+  public static final String HOST_ROLES = "HostRoles";
+  public static final String HOST = "host";
+  public static final String SERVICE_COMPONENT_INFO = "ServiceComponentInfo";
+
+  public static final String ROLE_ID_PROPERTY_ID = "role_id";
+  public static final String CLUSTER_NAME_PROPERTY_ID = "cluster_name";
+  public static final String SERVICE_NAME_PROPERTY_ID = "service_name";
+  public static final String COMPONENT_NAME_PROPERTY_ID = "component_name";
+  public static final String DISPLAY_NAME_PROPERTY_ID = "display_name";
+  public static final String HOST_NAME_PROPERTY_ID = "host_name";
+  public static final String PUBLIC_HOST_NAME_PROPERTY_ID = "public_host_name";
+  public static final String STATE_PROPERTY_ID = "state";
+  public static final String DESIRED_STATE_PROPERTY_ID = "desired_state";
+  public static final String VERSION_PROPERTY_ID = "version";
+  public static final String DESIRED_STACK_ID_PROPERTY_ID = "desired_stack_id";
+  public static final String DESIRED_REPOSITORY_VERSION_PROPERTY_ID = "desired_repository_version";
+  public static final String ACTUAL_CONFIGS_PROPERTY_ID = "actual_configs";
+  public static final String STALE_CONFIGS_PROPERTY_ID = "stale_configs";
+  public static final String RELOAD_CONFIGS_PROPERTY_ID = "reload_configs";
+  public static final String DESIRED_ADMIN_STATE_PROPERTY_ID = "desired_admin_state";
+  public static final String MAINTENANCE_STATE_PROPERTY_ID = "maintenance_state";
+  public static final String UPGRADE_STATE_PROPERTY_ID = "upgrade_state";
+  public static final String HOST_PROPERTY_ID = "host";
+  public static final String HREF_PROPERTY_ID = "href";
+  public static final String COMPONENT_PROPERTY_ID = "component";
+  public static final String METRICS_PROPERTY_ID = "metrics";
+  public static final String PROCESSES_PROPERTY_ID = "processes";
+
+  public static final String ROLE_ID = PropertyHelper.getPropertyId(HOST_ROLES, ROLE_ID_PROPERTY_ID);
+  public static final String CLUSTER_NAME = PropertyHelper.getPropertyId(HOST_ROLES, CLUSTER_NAME_PROPERTY_ID);
+  public static final String SERVICE_NAME = PropertyHelper.getPropertyId(HOST_ROLES, SERVICE_NAME_PROPERTY_ID);
+  public static final String COMPONENT_NAME = PropertyHelper.getPropertyId(HOST_ROLES, COMPONENT_NAME_PROPERTY_ID);
+  public static final String DISPLAY_NAME = PropertyHelper.getPropertyId(HOST_ROLES, DISPLAY_NAME_PROPERTY_ID);
+  public static final String HOST_NAME = PropertyHelper.getPropertyId(HOST_ROLES, HOST_NAME_PROPERTY_ID);
+  public static final String PUBLIC_HOST_NAME = PropertyHelper.getPropertyId(HOST_ROLES, PUBLIC_HOST_NAME_PROPERTY_ID);
+  public static final String STATE = PropertyHelper.getPropertyId(HOST_ROLES, STATE_PROPERTY_ID);
+  public static final String DESIRED_STATE = PropertyHelper.getPropertyId(HOST_ROLES, DESIRED_STATE_PROPERTY_ID);
+  public static final String VERSION = PropertyHelper.getPropertyId(HOST_ROLES, VERSION_PROPERTY_ID);
+  public static final String DESIRED_STACK_ID = PropertyHelper.getPropertyId(HOST_ROLES, DESIRED_STACK_ID_PROPERTY_ID);
+  public static final String DESIRED_REPOSITORY_VERSION = PropertyHelper.getPropertyId(HOST_ROLES, DESIRED_REPOSITORY_VERSION_PROPERTY_ID);
+  public static final String ACTUAL_CONFIGS = PropertyHelper.getPropertyId(HOST_ROLES, ACTUAL_CONFIGS_PROPERTY_ID);
+  public static final String STALE_CONFIGS = PropertyHelper.getPropertyId(HOST_ROLES, STALE_CONFIGS_PROPERTY_ID);
+  public static final String RELOAD_CONFIGS = PropertyHelper.getPropertyId(HOST_ROLES, RELOAD_CONFIGS_PROPERTY_ID);
+  public static final String DESIRED_ADMIN_STATE = PropertyHelper.getPropertyId(HOST_ROLES, DESIRED_ADMIN_STATE_PROPERTY_ID);
+  public static final String MAINTENANCE_STATE = PropertyHelper.getPropertyId(HOST_ROLES, MAINTENANCE_STATE_PROPERTY_ID);
+  public static final String UPGRADE_STATE = PropertyHelper.getPropertyId(HOST_ROLES, UPGRADE_STATE_PROPERTY_ID);
 
   //Parameters from the predicate
   private static final String QUERY_PARAMETERS_RUN_SMOKE_TEST_ID = "params/run_smoke_test";
@@ -128,34 +138,34 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
    * The key property ids for a HostComponent resource.
    */
   public static Map<Resource.Type, String> keyPropertyIds = ImmutableMap.<Resource.Type, String>builder()
-      .put(Resource.Type.Cluster, HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID)
-      .put(Resource.Type.Host, HOST_COMPONENT_HOST_NAME_PROPERTY_ID)
-      .put(Resource.Type.HostComponent, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID)
-      .put(Resource.Type.Component, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID)
+      .put(Resource.Type.Cluster, CLUSTER_NAME)
+      .put(Resource.Type.Host, HOST_NAME)
+      .put(Resource.Type.HostComponent, COMPONENT_NAME)
+      .put(Resource.Type.Component, COMPONENT_NAME)
       .build();
 
   /**
    * The property ids for a HostComponent resource.
    */
   protected static Set<String> propertyIds = Sets.newHashSet(
-      HOST_COMPONENT_ROLE_ID,
-      HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
-      HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID,
-      HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
-      HOST_COMPONENT_DISPLAY_NAME_PROPERTY_ID,
-      HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
-      HOST_COMPONENT_PUBLIC_HOST_NAME_PROPERTY_ID,
-      HOST_COMPONENT_STATE_PROPERTY_ID,
-      HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID,
-      HOST_COMPONENT_VERSION_PROPERTY_ID,
-      HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID,
-      HOST_COMPONENT_DESIRED_REPOSITORY_VERSION,
-      HOST_COMPONENT_ACTUAL_CONFIGS_PROPERTY_ID,
-      HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID,
-      HOST_COMPONENT_RELOAD_CONFIGS_PROPERTY_ID,
-      HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID,
-      HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID,
-      HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID,
+      ROLE_ID,
+      CLUSTER_NAME,
+      SERVICE_NAME,
+      COMPONENT_NAME,
+      DISPLAY_NAME,
+      HOST_NAME,
+      PUBLIC_HOST_NAME,
+      STATE,
+      DESIRED_STATE,
+      VERSION,
+      DESIRED_STACK_ID,
+      DESIRED_REPOSITORY_VERSION,
+      ACTUAL_CONFIGS,
+      STALE_CONFIGS,
+      RELOAD_CONFIGS,
+      DESIRED_ADMIN_STATE,
+      MAINTENANCE_STATE,
+      UPGRADE_STATE,
       QUERY_PARAMETERS_RUN_SMOKE_TEST_ID);
 
   /**
@@ -242,7 +252,7 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
     Set<Resource> resources = new HashSet<>();
     Set<String> requestedIds = getRequestPropertyIds(request, predicate);
     // We always need host_name for sch
-    requestedIds.add(HOST_COMPONENT_HOST_NAME_PROPERTY_ID);
+    requestedIds.add(HOST_NAME);
 
     Set<ServiceComponentHostResponse> responses = getResources(new Command<Set<ServiceComponentHostResponse>>() {
       @Override
@@ -253,44 +263,44 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
     for (ServiceComponentHostResponse response : responses) {
       Resource resource = new ResourceImpl(Resource.Type.HostComponent);
-      setResourceProperty(resource, HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
+      setResourceProperty(resource, CLUSTER_NAME,
               response.getClusterName(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID,
+      setResourceProperty(resource, SERVICE_NAME,
               response.getServiceName(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
+      setResourceProperty(resource, COMPONENT_NAME,
               response.getComponentName(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_DISPLAY_NAME_PROPERTY_ID,
+      setResourceProperty(resource, DISPLAY_NAME,
               response.getDisplayName(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_HOST_NAME_PROPERTY_ID,
+      setResourceProperty(resource, HOST_NAME,
               response.getHostname(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_PUBLIC_HOST_NAME_PROPERTY_ID,
+      setResourceProperty(resource, PUBLIC_HOST_NAME,
           response.getPublicHostname(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_STATE_PROPERTY_ID,
+      setResourceProperty(resource, STATE,
               response.getLiveState(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID,
+      setResourceProperty(resource, DESIRED_STATE,
               response.getDesiredState(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_VERSION_PROPERTY_ID, response.getVersion(),
+      setResourceProperty(resource, VERSION, response.getVersion(),
           requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID,
+      setResourceProperty(resource, DESIRED_STACK_ID,
               response.getDesiredStackVersion(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_ACTUAL_CONFIGS_PROPERTY_ID,
+      setResourceProperty(resource, ACTUAL_CONFIGS,
               response.getActualConfigs(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID,
+      setResourceProperty(resource, STALE_CONFIGS,
               response.isStaleConfig(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_RELOAD_CONFIGS_PROPERTY_ID,
+      setResourceProperty(resource, RELOAD_CONFIGS,
               response.isReloadConfig(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID,
+      setResourceProperty(resource, UPGRADE_STATE,
               response.getUpgradeState(), requestedIds);
-      setResourceProperty(resource, HOST_COMPONENT_DESIRED_REPOSITORY_VERSION,
+      setResourceProperty(resource, DESIRED_REPOSITORY_VERSION,
           response.getDesiredRepositoryVersion(), requestedIds);
 
       if (response.getAdminState() != null) {
-        setResourceProperty(resource, HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID,
+        setResourceProperty(resource, DESIRED_ADMIN_STATE,
                 response.getAdminState(), requestedIds);
       }
 
       if (null != response.getMaintenanceState()) {
-        setResourceProperty(resource, HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID,
+        setResourceProperty(resource, MAINTENANCE_STATE,
                 response.getMaintenanceState(), requestedIds);
       }
 
@@ -370,7 +380,7 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
     Map<String, Object> installProperties = new HashMap<>();
 
-    installProperties.put(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, "INSTALLED");
+    installProperties.put(DESIRED_STATE, "INSTALLED");
     Map<String, String> requestInfo = new HashMap<>();
     requestInfo.put("context", String.format("Install components on host %s", hostname));
     requestInfo.put("phase", "INITIAL_INSTALL");
@@ -381,10 +391,10 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
     Request installRequest = PropertyHelper.getUpdateRequest(installProperties, requestInfo);
 
-    Predicate statePredicate = new EqualsPredicate<>(HOST_COMPONENT_STATE_PROPERTY_ID, "INIT");
-    Predicate clusterPredicate = new EqualsPredicate<>(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, cluster);
+    Predicate statePredicate = new EqualsPredicate<>(STATE, "INIT");
+    Predicate clusterPredicate = new EqualsPredicate<>(CLUSTER_NAME, cluster);
     // single host
-    Predicate hostPredicate = new EqualsPredicate<>(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, hostname);
+    Predicate hostPredicate = new EqualsPredicate<>(HOST_NAME, hostname);
     //Predicate hostPredicate = new OrPredicate(hostPredicates.toArray(new Predicate[hostPredicates.size()]));
     Predicate hostAndStatePredicate = new AndPredicate(statePredicate, hostPredicate);
     Predicate installPredicate = new AndPredicate(hostAndStatePredicate, clusterPredicate);
@@ -423,20 +433,20 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
     requestInfo.put("phase", "INITIAL_START");
     requestInfo.put(Setting.SETTING_NAME_SKIP_FAILURE, Boolean.toString(skipFailure));
 
-    Predicate clusterPredicate = new EqualsPredicate<>(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, cluster);
-    Predicate hostPredicate = new EqualsPredicate<>(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, hostName);
+    Predicate clusterPredicate = new EqualsPredicate<>(CLUSTER_NAME, cluster);
+    Predicate hostPredicate = new EqualsPredicate<>(HOST_NAME, hostName);
     //Predicate hostPredicate = new OrPredicate(hostPredicates.toArray(new Predicate[hostPredicates.size()]));
 
     RequestStageContainer requestStages;
     try {
       Map<String, Object> startProperties = new HashMap<>();
-      startProperties.put(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, "STARTED");
+      startProperties.put(DESIRED_STATE, "STARTED");
       Request startRequest = PropertyHelper.getUpdateRequest(startProperties, requestInfo);
       // Important to query against desired_state as this has been updated when install stage was created
       // If I query against state, then the getRequest compares predicate prop against desired_state and then when the predicate
       // is later applied explicitly, it gets compared to live_state. Since live_state == INSTALLED == INIT at this point and
       // desired_state == INSTALLED, we will always get 0 matches since both comparisons can't be true :(
-      Predicate installedStatePredicate = new EqualsPredicate<>(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, "INSTALLED");
+      Predicate installedStatePredicate = new EqualsPredicate<>(DESIRED_STATE, "INSTALLED");
       Predicate notClientPredicate = new NotPredicate(new ClientComponentPredicate());
       Predicate clusterAndClientPredicate = new AndPredicate(clusterPredicate, notClientPredicate);
       Predicate hostAndStatePredicate = new AndPredicate(installedStatePredicate, hostPredicate);
@@ -452,7 +462,7 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
           new ArrayList<>();
 
         for (String installOnlyComponent : installOnlyComponents) {
-          Predicate componentNameEquals = new EqualsPredicate<>(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, installOnlyComponent);
+          Predicate componentNameEquals = new EqualsPredicate<>(COMPONENT_NAME, installOnlyComponent);
           // create predicate to filter out the install only component
           listOfComponentPredicates.add(new NotPredicate(componentNameEquals));
         }
@@ -703,28 +713,28 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
    */
   private ServiceComponentHostRequest getRequest(Map<String, Object> properties) {
     ServiceComponentHostRequest serviceComponentHostRequest = new ServiceComponentHostRequest(
-        (String) properties.get(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID),
-        (String) properties.get(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID),
-        (String) properties.get(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID),
-        (String) properties.get(HOST_COMPONENT_HOST_NAME_PROPERTY_ID),
-        (String) properties.get(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID));
-    serviceComponentHostRequest.setState((String) properties.get(HOST_COMPONENT_STATE_PROPERTY_ID));
-    if (properties.get(HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID) != null) {
+        (String) properties.get(CLUSTER_NAME),
+        (String) properties.get(SERVICE_NAME),
+        (String) properties.get(COMPONENT_NAME),
+        (String) properties.get(HOST_NAME),
+        (String) properties.get(DESIRED_STATE));
+    serviceComponentHostRequest.setState((String) properties.get(STATE));
+    if (properties.get(STALE_CONFIGS) != null) {
       serviceComponentHostRequest.setStaleConfig(
-          properties.get(HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID).toString().toLowerCase());
+          properties.get(STALE_CONFIGS).toString().toLowerCase());
     }
 
-    if (properties.get(HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID) != null) {
+    if (properties.get(DESIRED_ADMIN_STATE) != null) {
       serviceComponentHostRequest.setAdminState(
-          properties.get(HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID).toString());
+          properties.get(DESIRED_ADMIN_STATE).toString());
     }
-    if (properties.get(HOST_COMPONENT_PUBLIC_HOST_NAME_PROPERTY_ID) != null) {
+    if (properties.get(PUBLIC_HOST_NAME) != null) {
       serviceComponentHostRequest.setPublicHostname(
-          properties.get(HOST_COMPONENT_PUBLIC_HOST_NAME_PROPERTY_ID).toString());
+          properties.get(PUBLIC_HOST_NAME).toString());
     }
 
 
-    Object o = properties.get(HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID);
+    Object o = properties.get(MAINTENANCE_STATE);
     if (null != o) {
       serviceComponentHostRequest.setMaintenanceState (o.toString());
     }
@@ -740,25 +750,25 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
    */
   private ServiceComponentHostRequest changeRequest(Map<String, Object> properties) {
     ServiceComponentHostRequest serviceComponentHostRequest = new ServiceComponentHostRequest(
-            (String) properties.get(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID),
-            (String) properties.get(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID),
-            (String) properties.get(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID),
-            (String) properties.get(HOST_COMPONENT_HOST_NAME_PROPERTY_ID),
-            (String) properties.get(HOST_COMPONENT_STATE_PROPERTY_ID));
-    if (properties.get(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID) != null) {
-      serviceComponentHostRequest.setDesiredState((String)properties.get(HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID));
+            (String) properties.get(CLUSTER_NAME),
+            (String) properties.get(SERVICE_NAME),
+            (String) properties.get(COMPONENT_NAME),
+            (String) properties.get(HOST_NAME),
+            (String) properties.get(STATE));
+    if (properties.get(DESIRED_STATE) != null) {
+      serviceComponentHostRequest.setDesiredState((String)properties.get(DESIRED_STATE));
     }
-    if (properties.get(HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID) != null) {
+    if (properties.get(STALE_CONFIGS) != null) {
       serviceComponentHostRequest.setStaleConfig(
-              properties.get(HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID).toString().toLowerCase());
+              properties.get(STALE_CONFIGS).toString().toLowerCase());
     }
 
-    if (properties.get(HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID) != null) {
+    if (properties.get(DESIRED_ADMIN_STATE) != null) {
       serviceComponentHostRequest.setAdminState(
-              properties.get(HOST_COMPONENT_DESIRED_ADMIN_STATE_PROPERTY_ID).toString());
+              properties.get(DESIRED_ADMIN_STATE).toString());
     }
 
-    Object o = properties.get(HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID);
+    Object o = properties.get(MAINTENANCE_STATE);
     if (null != o) {
       serviceComponentHostRequest.setMaintenanceState (o.toString());
     }
@@ -791,7 +801,7 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
     final boolean runSmokeTest = "true".equals(getQueryParameterValue(
         QUERY_PARAMETERS_RUN_SMOKE_TEST_ID, predicate));
 
-    Set<String> queryIds = Collections.singleton(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+    Set<String> queryIds = Collections.singleton(COMPONENT_NAME);
 
     Request queryRequest = PropertyHelper.getReadRequest(queryIds);
     // will take care of 404 exception
@@ -1031,19 +1041,19 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
     public boolean evaluate(Resource resource) {
       boolean isClient = false;
 
-      String componentName = (String) resource.getPropertyValue(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+      String componentName = (String) resource.getPropertyValue(COMPONENT_NAME);
       try {
         if (componentName != null && !componentName.isEmpty()) {
           AmbariManagementController managementController = getManagementController();
-          String clusterName = (String) resource.getPropertyValue(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID);
-          String serviceName = (String) resource.getPropertyValue(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID);
+          String clusterName = (String) resource.getPropertyValue(CLUSTER_NAME);
+          String serviceName = (String) resource.getPropertyValue(SERVICE_NAME);
           if (StringUtils.isEmpty(serviceName)) {
             Cluster cluster = managementController.getClusters().getCluster(clusterName);
             serviceName = managementController.findServiceName(cluster, componentName);
           }
 
           ServiceComponent sc = getServiceComponent((String) resource.getPropertyValue(
-              HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID), serviceName, componentName);
+                  CLUSTER_NAME), serviceName, componentName);
           isClient = sc.isClientComponent();
         }
       } catch (AmbariException e) {
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
index 2ce19ed..c4ef23b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
@@ -17,10 +17,10 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID;
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.CLUSTER_NAME;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.COMPONENT_NAME;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_NAME;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.SERVICE_NAME;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -539,16 +539,16 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
       ResourceProvider resourceProvider = getResourceProvider(Resource.Type.HostComponent);
 
       Set<String> propertyIds = new HashSet<>();
-      propertyIds.add(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID);
-      propertyIds.add(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID);
-      propertyIds.add(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+      propertyIds.add(CLUSTER_NAME);
+      propertyIds.add(SERVICE_NAME);
+      propertyIds.add(COMPONENT_NAME);
 
       Request request = PropertyHelper.getReadRequest(propertyIds);
 
       Predicate finalPredicate = new PredicateBuilder(filterPredicate)
-        .property(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals(clusterName).and()
-        .property(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID).equals(serviceName).and()
-        .property(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals(componentName)
+        .property(CLUSTER_NAME).equals(clusterName).and()
+        .property(SERVICE_NAME).equals(serviceName).and()
+        .property(COMPONENT_NAME).equals(componentName)
         .toPredicate();
 
       try {
@@ -558,10 +558,10 @@ public class RequestResourceProvider extends AbstractControllerResourceProvider
           // Allow request to span services / components using just the predicate
           Map<ServiceComponentTuple, List<String>> dupleListMap = new HashMap<>();
           for (Resource resource : resources) {
-            String hostnameStr = (String) resource.getPropertyValue(HOST_COMPONENT_HOST_NAME_PROPERTY_ID);
+            String hostnameStr = (String) resource.getPropertyValue(HOST_NAME);
             if (hostnameStr != null) {
-              String computedServiceName = (String) resource.getPropertyValue(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID);
-              String computedComponentName = (String) resource.getPropertyValue(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
+              String computedServiceName = (String) resource.getPropertyValue(SERVICE_NAME);
+              String computedComponentName = (String) resource.getPropertyValue(COMPONENT_NAME);
               ServiceComponentTuple duple =
                 new ServiceComponentTuple(computedServiceName, computedComponentName);
 
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
index 63c4dbd..806a6b2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/ComponentEventCreatorTest.java
@@ -46,7 +46,7 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
 
     Map<Resource.Type,String> resource = new HashMap<>();
     resource.put(Resource.Type.HostComponent, "MyComponent");
@@ -81,9 +81,9 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "mycluster");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.CLUSTER_NAME, "mycluster");
+    properties.put(HostComponentResourceProvider.STATE, "STARTED");
 
     Request request = AuditEventCreatorTestHelper.createRequest(type, Resource.Type.HostComponent, properties, null);
     request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID, "CLUSTER");
@@ -110,9 +110,9 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "mycluster");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.CLUSTER_NAME, "mycluster");
+    properties.put(HostComponentResourceProvider.STATE, "STARTED");
 
     Request request = AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, Resource.Type.HostComponent, properties, null);
     request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID, "HOST");
@@ -140,10 +140,10 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "mycluster");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "MYCOMPONENT");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.CLUSTER_NAME, "mycluster");
+    properties.put(HostComponentResourceProvider.STATE, "STARTED");
+    properties.put(HostComponentResourceProvider.COMPONENT_NAME, "MYCOMPONENT");
 
     Request request = AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, Resource.Type.HostComponent, properties, null);
     request.getBody().addRequestInfoProperty(RequestOperationLevel.OPERATION_LEVEL_ID, "HOST_COMPONENT");
@@ -171,9 +171,9 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID, "ON");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "MYCOMPONENT");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.MAINTENANCE_STATE, "ON");
+    properties.put(HostComponentResourceProvider.COMPONENT_NAME, "MYCOMPONENT");
 
     Request request = AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, Resource.Type.HostComponent, properties, null);
 
@@ -197,9 +197,9 @@ public class ComponentEventCreatorTest extends AuditEventCreatorTestBase {
     ComponentEventCreator creator = new ComponentEventCreator();
 
     Map<String,Object> properties = new HashMap<>();
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ambari1.example.com");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_MAINTENANCE_STATE_PROPERTY_ID, "ON");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "MYCOMPONENT");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "ambari1.example.com");
+    properties.put(HostComponentResourceProvider.MAINTENANCE_STATE, "ON");
+    properties.put(HostComponentResourceProvider.COMPONENT_NAME, "MYCOMPONENT");
 
     Request request = AuditEventCreatorTestHelper.createRequest(Request.Type.PUT, Resource.Type.HostComponent, properties, null);
 
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
index bc32aff..9c56104 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/creator/HostEventCreatorTest.java
@@ -68,7 +68,7 @@ public class HostEventCreatorTest extends AuditEventCreatorTestBase{
 
     Set<Map<String,String>> set = new HashSet<>();
     Map<String,String> map = new HashMap<>();
-    map.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "MYCOMPONENT");
+    map.put(HostComponentResourceProvider.COMPONENT_NAME, "MYCOMPONENT");
     set.add(map);
 
     properties.put("host_components", set);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
index 3267163..29ff7cc 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ComponentResourceProviderTest.java
@@ -173,9 +173,9 @@ public class ComponentResourceProviderTest {
     Map<String, Object> properties = new LinkedHashMap<>();
 
     // add properties to the request map
-    properties.put(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
-    properties.put(ComponentResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID, "Service100");
-    properties.put(ComponentResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID, "Component100");
+    properties.put(ComponentResourceProvider.CLUSTER_NAME, "Cluster100");
+    properties.put(ComponentResourceProvider.SERVICE_NAME, "Service100");
+    properties.put(ComponentResourceProvider.COMPONENT_NAME, "Component100");
 
     propertySet.add(properties);
 
@@ -280,25 +280,25 @@ public class ComponentResourceProviderTest {
 
     Set<String> propertyIds = new HashSet<>();
 
-    propertyIds.add(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_CATEGORY_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_TOTAL_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_STARTED_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALLED_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_INIT_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_UNKNOWN_COUNT_PROPERTY_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_RECOVERY_ENABLED_ID);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_DESIRED_VERSION);
-    propertyIds.add(ComponentResourceProvider.COMPONENT_REPOSITORY_STATE);
+    propertyIds.add(ComponentResourceProvider.CLUSTER_NAME);
+    propertyIds.add(ComponentResourceProvider.COMPONENT_NAME);
+    propertyIds.add(ComponentResourceProvider.CATEGORY);
+    propertyIds.add(ComponentResourceProvider.TOTAL_COUNT);
+    propertyIds.add(ComponentResourceProvider.STARTED_COUNT);
+    propertyIds.add(ComponentResourceProvider.INSTALLED_COUNT);
+    propertyIds.add(ComponentResourceProvider.INSTALLED_AND_MAINTENANCE_OFF_COUNT);
+    propertyIds.add(ComponentResourceProvider.INSTALL_FAILED_COUNT);
+    propertyIds.add(ComponentResourceProvider.INIT_COUNT);
+    propertyIds.add(ComponentResourceProvider.UNKNOWN_COUNT);
+    propertyIds.add(ComponentResourceProvider.RECOVERY_ENABLED);
+    propertyIds.add(ComponentResourceProvider.DESIRED_VERSION);
+    propertyIds.add(ComponentResourceProvider.REPOSITORY_STATE);
 
     Predicate predicate = new PredicateBuilder()
-      .property(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID)
+      .property(ComponentResourceProvider.CLUSTER_NAME)
       .equals("Cluster100")
       .and()
-      .property(ComponentResourceProvider.COMPONENT_CATEGORY_PROPERTY_ID)
+      .property(ComponentResourceProvider.CATEGORY)
       .equals("MASTER").toPredicate();
 
     Request request = PropertyHelper.getReadRequest(propertyIds);
@@ -307,36 +307,36 @@ public class ComponentResourceProviderTest {
     Assert.assertEquals(2, resources.size());
     for (Resource resource : resources) {
       String clusterName = (String) resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID);
+          ComponentResourceProvider.CLUSTER_NAME);
       Assert.assertEquals("Cluster100", clusterName);
       Assert.assertEquals("MASTER", resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_CATEGORY_PROPERTY_ID));
+          ComponentResourceProvider.CATEGORY));
       Assert.assertEquals(2, resource.getPropertyValue(
-        ComponentResourceProvider.COMPONENT_TOTAL_COUNT_PROPERTY_ID));
+        ComponentResourceProvider.TOTAL_COUNT));
       Assert.assertEquals(1, resource.getPropertyValue(
-        ComponentResourceProvider.COMPONENT_STARTED_COUNT_PROPERTY_ID));
+        ComponentResourceProvider.STARTED_COUNT));
       Assert.assertEquals(0, resource.getPropertyValue(
-        ComponentResourceProvider.COMPONENT_INSTALLED_COUNT_PROPERTY_ID));
+        ComponentResourceProvider.INSTALLED_COUNT));
       Assert.assertEquals(0, resource.getPropertyValue(
-        ComponentResourceProvider.COMPONENT_INSTALLED_AND_MAINTENANCE_OFF_COUNT_PROPERTY_ID));
+        ComponentResourceProvider.INSTALLED_AND_MAINTENANCE_OFF_COUNT));
       Assert.assertEquals(0, resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_INSTALL_FAILED_COUNT_PROPERTY_ID));
+          ComponentResourceProvider.INSTALL_FAILED_COUNT));
       Assert.assertEquals(0, resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_INIT_COUNT_PROPERTY_ID));
+          ComponentResourceProvider.INIT_COUNT));
       Assert.assertEquals(1, resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_UNKNOWN_COUNT_PROPERTY_ID));
+          ComponentResourceProvider.UNKNOWN_COUNT));
       Assert.assertEquals(String.valueOf(true), resource.getPropertyValue(
-        ComponentResourceProvider.COMPONENT_RECOVERY_ENABLED_ID));
+        ComponentResourceProvider.RECOVERY_ENABLED));
 
       if (resource.getPropertyValue(
-          ComponentResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("Component102")) {
-        Assert.assertNotNull(resource.getPropertyValue(ComponentResourceProvider.COMPONENT_REPOSITORY_STATE));
-        Assert.assertNotNull(resource.getPropertyValue(ComponentResourceProvider.COMPONENT_DESIRED_VERSION));
-        Assert.assertEquals(RepositoryVersionState.CURRENT, resource.getPropertyValue(ComponentResourceProvider.COMPONENT_REPOSITORY_STATE));
-        Assert.assertEquals("1.1", resource.getPropertyValue(ComponentResourceProvider.COMPONENT_DESIRED_VERSION));
+          ComponentResourceProvider.COMPONENT_NAME).equals("Component102")) {
+        Assert.assertNotNull(resource.getPropertyValue(ComponentResourceProvider.REPOSITORY_STATE));
+        Assert.assertNotNull(resource.getPropertyValue(ComponentResourceProvider.DESIRED_VERSION));
+        Assert.assertEquals(RepositoryVersionState.CURRENT, resource.getPropertyValue(ComponentResourceProvider.REPOSITORY_STATE));
+        Assert.assertEquals("1.1", resource.getPropertyValue(ComponentResourceProvider.DESIRED_VERSION));
       } else {
-        Assert.assertNull(resource.getPropertyValue(ComponentResourceProvider.COMPONENT_REPOSITORY_STATE));
-        Assert.assertNull(resource.getPropertyValue(ComponentResourceProvider.COMPONENT_DESIRED_VERSION));
+        Assert.assertNull(resource.getPropertyValue(ComponentResourceProvider.REPOSITORY_STATE));
+        Assert.assertNull(resource.getPropertyValue(ComponentResourceProvider.DESIRED_VERSION));
       }
     }
 
@@ -477,15 +477,15 @@ public class ComponentResourceProviderTest {
 
     Map<String, Object> properties = new LinkedHashMap<>();
 
-    properties.put(ComponentResourceProvider.COMPONENT_RECOVERY_ENABLED_ID, String.valueOf(true) /* recovery enabled */);
-    properties.put(ComponentResourceProvider.COMPONENT_STATE_PROPERTY_ID, "STARTED");
-    properties.put(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
+    properties.put(ComponentResourceProvider.RECOVERY_ENABLED, String.valueOf(true) /* recovery enabled */);
+    properties.put(ComponentResourceProvider.STATE, "STARTED");
+    properties.put(ComponentResourceProvider.CLUSTER_NAME, "Cluster100");
 
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, mapRequestProps);
 
     // update the cluster named Cluster100
-    Predicate predicate = new PredicateBuilder().property(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).
+    Predicate predicate = new PredicateBuilder().property(ComponentResourceProvider.CLUSTER_NAME).
         equals("Cluster100").toPredicate();
     provider.updateResources(request, predicate);
 
@@ -566,13 +566,13 @@ public class ComponentResourceProviderTest {
 
 
     Predicate predicate = new PredicateBuilder()
-                .property(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.CLUSTER_NAME)
                 .equals("Cluster100")
                 .and()
-                .property(ComponentResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.SERVICE_NAME)
                 .equals("Service100")
                 .and()
-                .property(ComponentResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.COMPONENT_NAME)
                 .equals("Component100").toPredicate();
 
     provider.deleteResources(new RequestImpl(null, null, null, null), predicate);
@@ -644,10 +644,10 @@ public class ComponentResourceProviderTest {
     ((ObservableResourceProvider)provider).addObserver(observer);
 
     Predicate predicate1 = new PredicateBuilder()
-                .property(ComponentResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.SERVICE_NAME)
                 .equals("Service100")
                 .and()
-                .property(ComponentResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.COMPONENT_NAME)
                 .equals("Component100").toPredicate();
 
     try {
@@ -658,10 +658,10 @@ public class ComponentResourceProviderTest {
     }
 
     Predicate predicate2 = new PredicateBuilder()
-                .property(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.CLUSTER_NAME)
                 .equals("Cluster100")
                 .and()
-                .property(ComponentResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID)
+                .property(ComponentResourceProvider.SERVICE_NAME)
                 .equals("Service100")
                 .and().toPredicate();
 
@@ -797,13 +797,13 @@ public class ComponentResourceProviderTest {
 
     Map<String, Object> properties = new LinkedHashMap<>();
 
-    properties.put(ComponentResourceProvider.COMPONENT_RECOVERY_ENABLED_ID, String.valueOf(true) /* recovery enabled */);
+    properties.put(ComponentResourceProvider.RECOVERY_ENABLED, String.valueOf(true) /* recovery enabled */);
 
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, mapRequestProps);
 
     // update the cluster named Cluster100
-    Predicate predicate = new PredicateBuilder().property(ComponentResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).
+    Predicate predicate = new PredicateBuilder().property(ComponentResourceProvider.CLUSTER_NAME).
         equals("Cluster100").toPredicate();
     provider.updateResources(request, predicate);
 
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProviderTest.java
index d012601..cf99f7c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentProcessResourceProviderTest.java
@@ -61,11 +61,11 @@ public class HostComponentProcessResourceProviderTest {
         }});
 
     PredicateBuilder pb = new PredicateBuilder().property(
-        HostComponentProcessResourceProvider.HC_PROCESS_CLUSTER_NAME_ID).equals("c1").and();
+        HostComponentProcessResourceProvider.CLUSTER_NAME).equals("c1").and();
     pb = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_HOST_NAME_ID).equals("h1").and();
+        HostComponentProcessResourceProvider.HOST_NAME).equals("h1").and();
     Predicate predicate = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_COMPONENT_NAME_ID).equals("comp1").toPredicate();
+        HostComponentProcessResourceProvider.COMPONENT_NAME).equals("comp1").toPredicate();
     
     Request request = PropertyHelper.getReadRequest(Collections.emptySet());
     
@@ -75,9 +75,9 @@ public class HostComponentProcessResourceProviderTest {
     Resource res = resources.iterator().next();
     
     Assert.assertNotNull(res.getPropertyValue(
-        HostComponentProcessResourceProvider.HC_PROCESS_NAME_ID));
+        HostComponentProcessResourceProvider.NAME));
     Assert.assertNotNull(res.getPropertyValue(
-        HostComponentProcessResourceProvider.HC_PROCESS_STATUS_ID));
+        HostComponentProcessResourceProvider.STATUS));
   }
   
   @Test
@@ -87,11 +87,11 @@ public class HostComponentProcessResourceProviderTest {
     ResourceProvider provider = init();
 
     PredicateBuilder pb = new PredicateBuilder().property(
-        HostComponentProcessResourceProvider.HC_PROCESS_CLUSTER_NAME_ID).equals("c1").and();
+        HostComponentProcessResourceProvider.CLUSTER_NAME).equals("c1").and();
     pb = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_HOST_NAME_ID).equals("h1").and();
+        HostComponentProcessResourceProvider.HOST_NAME).equals("h1").and();
     Predicate predicate = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_COMPONENT_NAME_ID).equals("comp1").toPredicate();
+        HostComponentProcessResourceProvider.COMPONENT_NAME).equals("comp1").toPredicate();
     
     Request request = PropertyHelper.getReadRequest(Collections.emptySet());
     
@@ -119,11 +119,11 @@ public class HostComponentProcessResourceProviderTest {
         }});        
 
     PredicateBuilder pb = new PredicateBuilder().property(
-        HostComponentProcessResourceProvider.HC_PROCESS_CLUSTER_NAME_ID).equals("c1").and();
+        HostComponentProcessResourceProvider.CLUSTER_NAME).equals("c1").and();
     pb = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_HOST_NAME_ID).equals("h1").and();
+        HostComponentProcessResourceProvider.HOST_NAME).equals("h1").and();
     Predicate predicate = pb.property(
-        HostComponentProcessResourceProvider.HC_PROCESS_COMPONENT_NAME_ID).equals("comp1").toPredicate();
+        HostComponentProcessResourceProvider.COMPONENT_NAME).equals("comp1").toPredicate();
     
     Request request = PropertyHelper.getReadRequest(Collections.emptySet());
     
@@ -132,8 +132,8 @@ public class HostComponentProcessResourceProviderTest {
     Assert.assertEquals(Integer.valueOf(3), Integer.valueOf(resources.size()));
     
     for (Resource r : resources) {
-      Assert.assertNotNull(r.getPropertyValue(HostComponentProcessResourceProvider.HC_PROCESS_NAME_ID));
-      Assert.assertNotNull(r.getPropertyValue(HostComponentProcessResourceProvider.HC_PROCESS_STATUS_ID));
+      Assert.assertNotNull(r.getPropertyValue(HostComponentProcessResourceProvider.NAME));
+      Assert.assertNotNull(r.getPropertyValue(HostComponentProcessResourceProvider.STATUS));
     }
   }
   
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java
index 650dc78..86e4e13 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostComponentResourceProviderTest.java
@@ -134,10 +134,10 @@ public class HostComponentResourceProviderTest {
     Map<String, Object> properties = new LinkedHashMap<>();
 
     // add properties to the request map
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, "Service100");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "Component100");
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "Host100");
+    properties.put(HostComponentResourceProvider.CLUSTER_NAME, "Cluster100");
+    properties.put(HostComponentResourceProvider.SERVICE_NAME, "Service100");
+    properties.put(HostComponentResourceProvider.COMPONENT_NAME, "Component100");
+    properties.put(HostComponentResourceProvider.HOST_NAME, "Host100");
 
     propertySet.add(properties);
 
@@ -197,19 +197,19 @@ public class HostComponentResourceProviderTest {
 
     Map<String, String> expectedNameValues = new HashMap<>();
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
+        HostComponentResourceProvider.CLUSTER_NAME, "Cluster100");
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, State.INSTALLED.toString());
+        HostComponentResourceProvider.STATE, State.INSTALLED.toString());
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_VERSION_PROPERTY_ID, repositoryVersion2);
+        HostComponentResourceProvider.VERSION, repositoryVersion2);
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_DESIRED_REPOSITORY_VERSION, repositoryVersion2);
+        HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION, repositoryVersion2);
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, State.STARTED.toString());
+        HostComponentResourceProvider.DESIRED_STATE, State.STARTED.toString());
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID, stackId2.getStackId());
+        HostComponentResourceProvider.DESIRED_STACK_ID, stackId2.getStackId());
     expectedNameValues.put(
-        HostComponentResourceProvider.HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID, UpgradeState.NONE.name());
+        HostComponentResourceProvider.UPGRADE_STATE, UpgradeState.NONE.name());
 
 
     // set expectations
@@ -219,58 +219,58 @@ public class HostComponentResourceProviderTest {
 
     Set<String> propertyIds = new HashSet<>();
 
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_VERSION_PROPERTY_ID);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_REPOSITORY_VERSION);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID);
-    propertyIds.add(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID);
+    propertyIds.add(HostComponentResourceProvider.CLUSTER_NAME);
+    propertyIds.add(HostComponentResourceProvider.COMPONENT_NAME);
+    propertyIds.add(HostComponentResourceProvider.STATE);
+    propertyIds.add(HostComponentResourceProvider.VERSION);
+    propertyIds.add(HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION);
+    propertyIds.add(HostComponentResourceProvider.DESIRED_STATE);
+    propertyIds.add(HostComponentResourceProvider.DESIRED_STACK_ID);
 
     Predicate predicate = new PredicateBuilder().property(
-        HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").toPredicate();
+        HostComponentResourceProvider.CLUSTER_NAME).equals("Cluster100").toPredicate();
     Request request = PropertyHelper.getReadRequest(propertyIds);
 
     Set<Resource> hostsComponentResources = new HashSet<>();
 
     Resource hostsComponentResource1 = new ResourceImpl(Resource.Type.HostComponent);
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "Host100");
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, "Service100");
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "Component100");
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, State.INSTALLED.name());
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, State.STARTED.name());
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.CLUSTER_NAME, "Cluster100");
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_NAME, "Host100");
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.SERVICE_NAME, "Service100");
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.COMPONENT_NAME, "Component100");
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.STATE, State.INSTALLED.name());
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.DESIRED_STATE, State.STARTED.name());
     hostsComponentResource1.setProperty(
-        HostComponentResourceProvider.HOST_COMPONENT_VERSION_PROPERTY_ID, repositoryVersion2);
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID, stackId2.getStackId());
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID, UpgradeState.NONE.name());
-    hostsComponentResource1.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_REPOSITORY_VERSION, repositoryVersion2);
+        HostComponentResourceProvider.VERSION, repositoryVersion2);
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.DESIRED_STACK_ID, stackId2.getStackId());
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.UPGRADE_STATE, UpgradeState.NONE.name());
+    hostsComponentResource1.setProperty(HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION, repositoryVersion2);
 
     Resource hostsComponentResource2 = new ResourceImpl(Resource.Type.HostComponent);
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "Host100");
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, "Service100");
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "Component101");
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, State.INSTALLED.name());
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, State.STARTED.name());
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.CLUSTER_NAME, "Cluster100");
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_NAME, "Host100");
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.SERVICE_NAME, "Service100");
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.COMPONENT_NAME, "Component101");
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.STATE, State.INSTALLED.name());
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.DESIRED_STATE, State.STARTED.name());
     hostsComponentResource2.setProperty(
-        HostComponentResourceProvider.HOST_COMPONENT_VERSION_PROPERTY_ID, repositoryVersion2);
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID, stackId2.getStackId());
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID, UpgradeState.NONE.name());
-    hostsComponentResource2.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_REPOSITORY_VERSION, repositoryVersion2);
+        HostComponentResourceProvider.VERSION, repositoryVersion2);
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.DESIRED_STACK_ID, stackId2.getStackId());
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.UPGRADE_STATE, UpgradeState.NONE.name());
+    hostsComponentResource2.setProperty(HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION, repositoryVersion2);
 
     Resource hostsComponentResource3 = new ResourceImpl(Resource.Type.HostComponent);
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, "Cluster100");
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "Host100");
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, "Service100");
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "Component102");
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, State.INSTALLED.name());
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STATE_PROPERTY_ID, State.STARTED.name());
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.CLUSTER_NAME, "Cluster100");
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_NAME, "Host100");
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.SERVICE_NAME, "Service100");
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.COMPONENT_NAME, "Component102");
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.STATE, State.INSTALLED.name());
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.DESIRED_STATE, State.STARTED.name());
     hostsComponentResource3.setProperty(
-        HostComponentResourceProvider.HOST_COMPONENT_VERSION_PROPERTY_ID, repositoryVersion2);
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_STACK_ID_PROPERTY_ID, stackId2.getStackId());
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_UPGRADE_STATE_PROPERTY_ID, UpgradeState.NONE.name());
-    hostsComponentResource3.setProperty(HostComponentResourceProvider.HOST_COMPONENT_DESIRED_REPOSITORY_VERSION, repositoryVersion2);
+        HostComponentResourceProvider.VERSION, repositoryVersion2);
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.DESIRED_STACK_ID, stackId2.getStackId());
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.UPGRADE_STATE, UpgradeState.NONE.name());
+    hostsComponentResource3.setProperty(HostComponentResourceProvider.DESIRED_REPOSITORY_VERSION, repositoryVersion2);
 
     hostsComponentResources.add(hostsComponentResource1);
     hostsComponentResources.add(hostsComponentResource2);
@@ -297,7 +297,7 @@ public class HostComponentResourceProviderTest {
         Assert.assertEquals(expectedNameValues.get(key), resource.getPropertyValue(key));
       }
       names.add((String) resource.getPropertyValue(
-          HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID));
+          HostComponentResourceProvider.COMPONENT_NAME));
     }
     // Make sure that all of the response objects got moved into resources
     for (ServiceComponentHostResponse response : allResponse) {
@@ -397,16 +397,16 @@ public class HostComponentResourceProviderTest {
 
     Map<String, Object> properties = new LinkedHashMap<>();
 
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+    properties.put(HostComponentResourceProvider.STATE, "STARTED");
 
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, mapRequestProps);
 
     // update the cluster named Cluster102
     Predicate predicate = new PredicateBuilder().property(
-        HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("Cluster102").and().
-        property(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID).equals("INSTALLED").and().
-        property(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("Component100").toPredicate();
+        HostComponentResourceProvider.CLUSTER_NAME).equals("Cluster102").and().
+        property(HostComponentResourceProvider.STATE).equals("INSTALLED").and().
+        property(HostComponentResourceProvider.COMPONENT_NAME).equals("Component100").toPredicate();
     RequestStatus requestStatus = provider.updateResources(request, predicate);
     Resource responseResource = requestStatus.getRequestResource();
     assertEquals("response msg", responseResource.getPropertyValue(PropertyHelper.getPropertyId("Requests", "message")));
@@ -459,8 +459,8 @@ public class HostComponentResourceProviderTest {
     provider.addObserver(observer);
 
     Predicate predicate = new PredicateBuilder().
-        property(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("Component100").and().
-        property(HostComponentResourceProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID).equals("Host100").toPredicate();
+        property(HostComponentResourceProvider.COMPONENT_NAME).equals("Component100").and().
+        property(HostComponentResourceProvider.HOST_NAME).equals("Host100").toPredicate();
     provider.deleteResources(new RequestImpl(null, null, null, null), predicate);
 
 
@@ -575,16 +575,16 @@ public class HostComponentResourceProviderTest {
 
     Map<String, Object> properties = new LinkedHashMap<>();
 
-    properties.put(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+    properties.put(HostComponentResourceProvider.STATE, "STARTED");
 
     // create the request
     Request request = PropertyHelper.getUpdateRequest(properties, mapRequestProps);
 
     // update the cluster named Cluster102
     Predicate predicate = new PredicateBuilder().property(
-        HostComponentResourceProvider.HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("Cluster102").and().
-        property(HostComponentResourceProvider.HOST_COMPONENT_STATE_PROPERTY_ID).equals("INSTALLED").and().
-        property(HostComponentResourceProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("Component100").toPredicate();
+        HostComponentResourceProvider.CLUSTER_NAME).equals("Cluster102").and().
+        property(HostComponentResourceProvider.STATE).equals("INSTALLED").and().
+        property(HostComponentResourceProvider.COMPONENT_NAME).equals("Component100").toPredicate();
 
 
     try {
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
index d8cb701..31a3783 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
@@ -19,7 +19,7 @@
 package org.apache.ambari.server.controller.internal;
 
 
-import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID;
+import static org.apache.ambari.server.controller.internal.HostComponentResourceProvider.STALE_CONFIGS;
 import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.eq;
@@ -1178,7 +1178,7 @@ public class RequestResourceProviderTest {
     properties.put(RequestResourceProvider.REQUEST_CLUSTER_NAME_PROPERTY_ID, "c1");
 
     Set<Map<String, Object>> filterSet = new HashSet<>();
-    String predicateProperty = HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID + "=true";
+    String predicateProperty = STALE_CONFIGS + "=true";
     Map<String, Object> filterMap = new HashMap<>();
     filterMap.put(RequestResourceProvider.HOSTS_PREDICATE, predicateProperty);
     filterSet.add(filterMap);
@@ -1206,7 +1206,7 @@ public class RequestResourceProviderTest {
     String propertyIdToAssert = null;
     Object propertyValueToAssert = null;
     for (Map.Entry<String, Object> predicateEntry : predicateProperties.entrySet()) {
-      if (predicateEntry.getKey().equals(HOST_COMPONENT_STALE_CONFIGS_PROPERTY_ID)) {
+      if (predicateEntry.getKey().equals(STALE_CONFIGS)) {
         propertyIdToAssert = predicateEntry.getKey();
         propertyValueToAssert = predicateEntry.getValue();
       }
diff --git a/ambari-utility/src/main/java/org/apache/ambari/annotations/SwaggerPreferredParent.java b/ambari-utility/src/main/java/org/apache/ambari/annotations/SwaggerPreferredParent.java
new file mode 100644
index 0000000..fcd7590
--- /dev/null
+++ b/ambari-utility/src/main/java/org/apache/ambari/annotations/SwaggerPreferredParent.java
@@ -0,0 +1,40 @@
+/*
+ * 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.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The {@link SwaggerPreferredParent} is used to add information
+ * to help {@link org.apache.ambari.swagger.AmbariSwaggerReader} decide how
+ * to handle nested API resources which have multiple top level API parents.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface SwaggerPreferredParent {
+
+    /**
+     * Class name of preferred parent object
+     * @return
+     */
+    Class preferredParent();
+}
diff --git a/ambari-utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java b/ambari-utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
index e258fc4..1e0898d 100644
--- a/ambari-utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
+++ b/ambari-utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
@@ -24,6 +24,7 @@ import java.util.Set;
 
 import javax.ws.rs.Path;
 
+import org.apache.ambari.annotations.SwaggerPreferredParent;
 import org.apache.maven.plugin.logging.Log;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -84,7 +85,7 @@ public class AmbariSwaggerReader extends JaxrsReader {
           Class<?> returnType = method.getReturnType();
           Api nestedApi = AnnotationUtils.findAnnotation(returnType, Api.class);
           Path nestedApiPath = AnnotationUtils.findAnnotation(returnType, Path.class);
-          logger.debug("Examinig API method {}#{}, path={}, returnType={}", cls.getSimpleName(), method.getName(),
+          logger.debug("Examining API method {}#{}, path={}, returnType={}", cls.getSimpleName(), method.getName(),
               nestedApiPath != null ? nestedApiPath.value() : null, returnType.getSimpleName());
           if (null != nestedApi) {
             if (null != nestedApiPath) {
@@ -92,24 +93,45 @@ public class AmbariSwaggerReader extends JaxrsReader {
                   returnType.getName());
             }
             else {
-              Path apiPath = AnnotationUtils.findAnnotation(cls, Path.class);
-              String apiPathValue;
-              if (null == apiPath) {
-                logger.warn("Parent api {} also seems to be a nested API. The current version does not support " +
-                    "multi-level nesting.");
-                apiPathValue = "";
-              }
-              else {
-                apiPathValue = apiPath.value();
-              }
-              NestedApiRecord nar = new NestedApiRecord(returnType, cls, apiPathValue, method, methodPath.value());
+              boolean skipAdd = false;
+              Class<?> preferredParentClass = cls;
+
+              // API is a nested API of multiple top level APIs
               if (nestedAPIs.containsKey(returnType)) {
-                logger.warn("{} is a nested API of multiple top level API's. Ignoring top level API {}", returnType, cls);
+                SwaggerPreferredParent preferredParentAnnotation = AnnotationUtils.findAnnotation(returnType,
+                        SwaggerPreferredParent.class);
+                if (null != preferredParentAnnotation) {
+                  preferredParentClass = preferredParentAnnotation.preferredParent();
+                  if (nestedAPIs.get(returnType).parentApi.getName().equals(preferredParentClass.getName())) {
+                    skipAdd = true;
+                  } else {
+                    logger.info("Setting top level API of {} to {} based on @SwaggerPreferredParent " +
+                            "annotation", returnType, preferredParentClass.getSimpleName());
+                    try {
+                      method = preferredParentClass.getMethod(method.getName(), method.getParameterTypes());
+                    } catch (NoSuchMethodException exc) {
+                      skipAdd = true;
+                      logger.error("{} class defined as parent API is invalid due to method mismatch! Ignoring " +
+                              "API {}", preferredParentClass, returnType);
+                    }
+                  }
+                } else {
+                  logger.warn("{} is a nested API of multiple top level API's. Ignoring top level API {}",
+                          returnType, cls);
+                  skipAdd = true;
+                }
               }
-              else {
-                logger.info("Registering nested API: {}", returnType);
-                nestedAPIs.put(returnType, nar);
+
+              if (skipAdd) {
+                continue;
+              } else {
+                nestedAPIs.remove(returnType);
               }
+
+              logger.info("Registering nested API: {}", returnType);
+              NestedApiRecord nar = new NestedApiRecord(returnType, preferredParentClass,
+                      validateParentApiPath(preferredParentClass), method, methodPath.value());
+              nestedAPIs.put(returnType, nar);
             }
           }
         }
@@ -120,6 +142,18 @@ public class AmbariSwaggerReader extends JaxrsReader {
     return super.read(classes);
   }
 
+  private String validateParentApiPath(Class<?> cls) {
+    Path apiPath = AnnotationUtils.findAnnotation(cls, Path.class);
+    if (null == apiPath) {
+      logger.warn("Parent api {} also seems to be a nested API. The current version does not support " +
+              "multi-level nesting.", cls.getSimpleName());
+      return "";
+    }
+    else {
+      return apiPath.value();
+    }
+  }
+
   /**
    * Original method is overwritten to handle nested api's properly
    */
diff --git a/ambari-utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java b/ambari-utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
index a102152..fbadafa 100644
--- a/ambari-utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
+++ b/ambari-utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
@@ -22,7 +22,9 @@ import static org.junit.Assert.assertEquals ;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import java.util.Arrays;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -30,12 +32,11 @@ import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 
-import org.apache.commons.collections.set.ListOrderedSet;
+import org.apache.ambari.annotations.SwaggerPreferredParent;
 import org.apache.maven.plugin.logging.Log;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import io.swagger.annotations.Api;
@@ -79,8 +80,8 @@ public class AmbariSwaggerReaderTest {
   @Test
   public void swaggerConflictingNestedApis() {
     AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
-    ListOrderedSet classes = ListOrderedSet.decorate(
-        Lists.newArrayList(TopLevelAPI.class, AnotherTopLevelAPI.class, NestedAPI.class));
+    Set<Class<?>> classes = new LinkedHashSet<>(Arrays.asList(TopLevelAPI.class, AnotherTopLevelAPI.class,
+            NestedAPI.class));
     Swagger swagger = asr.read(classes);
     assertEquals(
         ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list", "/toplevel2/anotherTop"),
@@ -89,6 +90,61 @@ public class AmbariSwaggerReaderTest {
   }
 
   /**
+   * Test conflicting nested API's (the same API's are returned from different top level API's) with
+   * {@link SwaggerPreferredParent} annotation.
+   * In this case the nested API should be associated to the preferred top level API.
+   */
+  @Test
+  public void swaggerConflictingNestedApisWithPreferredParent() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    Set<Class<?>> classes = new LinkedHashSet<>(Arrays.asList(TopLevelAPI.class, AnotherTopLevelAPI.class,
+            NestedWithPreferredParentAPI.class));
+    Swagger swagger = asr.read(classes);
+    assertEquals(
+            ImmutableSet.of("/toplevel/top", "/toplevel2/{param}/nestedWithPreferredParent/list",
+                    "/toplevel2/anotherTop"),
+            swagger.getPaths().keySet());
+    assertPathParamsExist(swagger, "/toplevel2/{param}/nestedWithPreferredParent/list", "param");
+  }
+
+  /**
+   * Test conflicting nested API's (the same API's are returned from different top level API's) with
+   * {@link SwaggerPreferredParent} annotation.
+   * In this case the preferred parent API is the same as the one otherwise would have been set.
+   */
+  @Test
+  public void swaggerConflictingNestedApisWithSamePreferredParent() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    Set<Class<?>> classes = new LinkedHashSet<>(Arrays.asList(TopLevelAPI.class, AnotherTopLevelAPI.class,
+            NestedWithSamePreferredParentAPI.class));
+    Swagger swagger = asr.read(classes);
+    assertEquals(
+            ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nestedWithSamePreferredParent/list",
+                    "/toplevel2/anotherTop"),
+            swagger.getPaths().keySet());
+    assertPathParamsExist(swagger, "/toplevel/{param}/nestedWithSamePreferredParent/list", "param");
+  }
+
+  /**
+   * Test conflicting nested API's (the same API's are returned from different top level API's) with
+   * {@link SwaggerPreferredParent} annotation.
+   * In this case we expect an ignore since NestedWithBadPreferredParentAPI set a preferred parent which
+   * does not have it as a child.
+   */
+  @Test
+  public void swaggerConflictingNestedApisWithBadPreferredParent() {
+    AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+    Set<Class<?>> classes = new LinkedHashSet<>(Arrays.asList(TopLevelAPI.class, AnotherTopLevelAPI.class,
+            NestedWithBadPreferredParentAPI.class));
+    Swagger swagger = asr.read(classes);
+    assertEquals(
+            ImmutableSet.of("/toplevel/top", "/toplevel2/{param}/nestedWithBadPreferredParent/list",
+                    "/toplevel2/anotherTop"),
+            swagger.getPaths().keySet());
+    assertPathParamsExist(swagger, "/toplevel2/{param}/nestedWithBadPreferredParent/list", "param");
+  }
+
+  /**
    * If an API is both top level (the class has a @Path annotation) and nested (class is a return type of an
    * API operation) then it should be treated as top level.
    */
@@ -130,6 +186,14 @@ abstract class TopLevelAPI {
 
   @Path("{param}/nested")
   public abstract NestedAPI getNested(@ApiParam @PathParam(value = "param") String param);
+
+  @Path("{param}/nestedWithPreferredParent")
+  public abstract NestedWithPreferredParentAPI getNestedWithPreferredParent(@ApiParam @PathParam(value = "param")
+                                                                                      String param);
+
+  @Path("{param}/nestedWithSamePreferredParent")
+  public abstract NestedWithSamePreferredParentAPI getNestedWithSamePreferredParent(@ApiParam @PathParam(value =
+          "param") String param);
 }
 
 @Path("/toplevel2")
@@ -144,6 +208,17 @@ abstract class AnotherTopLevelAPI {
   @Path("{param}/anotherNested")
   public abstract NestedAPI getSecondNested(@ApiParam @PathParam(value = "param") String param);
 
+  @Path("{param}/nestedWithPreferredParent")
+  public abstract NestedWithPreferredParentAPI getNestedWithPreferredParent(@ApiParam @PathParam(value = "param")
+                                                                                      String param);
+
+  @Path("{param}/nestedWithSamePreferredParent")
+  public abstract NestedWithSamePreferredParentAPI getNestedWithSamePreferredParent(@ApiParam @PathParam(value =
+          "param") String param);
+
+  @Path("{param}/nestedWithBadPreferredParent")
+  public abstract NestedWithBadPreferredParentAPI getNestedWithBadPreferredParent(@ApiParam @PathParam(value =
+          "param") String param);
 }
 
 @Path("/toplevel3")
@@ -180,3 +255,36 @@ abstract class NestedAndTopLevelAPI {
   public abstract Response getList();
 
 }
+
+@Api(value = "Nested", description = "A nested API")
+@SwaggerPreferredParent(preferredParent = AnotherTopLevelAPI.class)
+abstract class NestedWithPreferredParentAPI {
+
+  @GET
+  @Path("/list")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+}
+
+@Api(value = "SameNested", description = "A nested API")
+@SwaggerPreferredParent(preferredParent = TopLevelAPI.class)
+abstract class NestedWithSamePreferredParentAPI {
+
+  @GET
+  @Path("/list")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+}
+
+@Api(value = "BadNested", description = "A nested API")
+@SwaggerPreferredParent(preferredParent = YetAnotherTopLevelAPI.class)
+abstract class NestedWithBadPreferredParentAPI {
+
+  @GET
+  @Path("/list")
+  @ApiOperation(value = "list")
+  public abstract Response getList();
+
+}

-- 
To stop receiving notification emails like this one, please contact
adoroszlai@apache.org.