AMBARI-22353. Remove properties.json And Switch To Adding Properties to 
ResourceProviders Dynamically (dlysnichenko)


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

Branch: refs/heads/branch-3.0-perf
Commit: e77a31ab0aa7edbabba29ba8e4d40becf122deef
Parents: 24c64b4
Author: Lisnichenko Dmitro <[email protected]>
Authored: Mon Dec 4 18:20:26 2017 +0200
Committer: Lisnichenko Dmitro <[email protected]>
Committed: Mon Dec 4 18:21:17 2017 +0200

----------------------------------------------------------------------
 ...xternalServerAuthenticationProviderTest.java |   1 -
 .../controller/ResourceProviderFactory.java     |  17 +-
 .../AbstractAuthorizedResourceProvider.java     |  12 +-
 .../AbstractControllerResourceProvider.java     |  83 ++--
 .../internal/AbstractDRResourceProvider.java    |   9 +-
 .../internal/ActionResourceProvider.java        |  34 +-
 .../ActiveWidgetLayoutResourceProvider.java     |   2 +-
 .../AlertDefinitionResourceProvider.java        |   2 +-
 .../internal/AlertGroupResourceProvider.java    |   2 +-
 .../internal/AlertHistoryResourceProvider.java  |   2 +-
 .../internal/AlertNoticeResourceProvider.java   |   2 +-
 .../internal/AlertResourceProvider.java         |   2 +-
 .../internal/AlertTargetResourceProvider.java   |   2 +-
 .../AmbariPrivilegeResourceProvider.java        |  36 +-
 .../internal/BlueprintResourceProvider.java     |  37 +-
 .../internal/ClientConfigResourceProvider.java  |  31 +-
 ...usterKerberosDescriptorResourceProvider.java |   2 +-
 .../ClusterPrivilegeResourceProvider.java       |  31 +-
 .../internal/ClusterResourceProvider.java       |  23 +-
 .../ClusterStackVersionResourceProvider.java    |   2 +-
 .../internal/ConfigGroupResourceProvider.java   |  39 +-
 .../internal/ConfigurationResourceProvider.java |   2 +-
 .../internal/CredentialResourceProvider.java    |   2 +-
 .../internal/DefaultProviderModule.java         |  17 +-
 .../internal/ExtensionLinkResourceProvider.java |  33 +-
 .../internal/ExtensionResourceProvider.java     |  27 +-
 .../ExtensionVersionResourceProvider.java       |  32 +-
 .../internal/FeedResourceProvider.java          |  41 +-
 .../GroupPrivilegeResourceProvider.java         |  42 +-
 .../internal/GroupResourceProvider.java         |  32 +-
 .../HostComponentProcessResourceProvider.java   |  38 +-
 .../internal/HostComponentResourceProvider.java |  49 +-
 .../HostKerberosIdentityResourceProvider.java   |   2 +-
 .../internal/HostResourceProvider.java          |  51 +-
 .../HostStackVersionResourceProvider.java       |   2 +-
 .../internal/InstanceResourceProvider.java      |  35 +-
 .../internal/JobResourceProvider.java           |  57 ++-
 .../KerberosDescriptorResourceProvider.java     |  20 +-
 .../internal/LdapSyncEventResourceProvider.java |  47 +-
 .../internal/LoggingResourceProvider.java       |   9 +-
 .../internal/MemberResourceProvider.java        |  29 +-
 .../OperatingSystemResourceProvider.java        |   2 +-
 .../internal/PermissionResourceProvider.java    |  25 +-
 .../internal/PrivilegeResourceProvider.java     |   2 +-
 .../QuickLinkArtifactResourceProvider.java      |   2 +-
 .../internal/ReadOnlyResourceProvider.java      |   7 -
 .../RecommendationResourceProvider.java         |  65 ++-
 .../internal/RemoteClusterResourceProvider.java |  28 +-
 .../internal/RequestResourceProvider.java       |  25 +-
 .../RequestScheduleResourceProvider.java        |  55 ++-
 .../RoleAuthorizationResourceProvider.java      |   2 +-
 ...eComponentConfigurationResourceProvider.java |   2 +-
 .../RootServiceComponentResourceProvider.java   |  31 +-
 ...ootServiceHostComponentResourceProvider.java |  34 +-
 .../internal/RootServiceResourceProvider.java   |  26 +-
 .../ServiceConfigVersionResourceProvider.java   |   2 +-
 .../internal/SettingResourceProvider.java       |   2 +-
 .../internal/StackAdvisorResourceProvider.java  |   7 +-
 .../internal/StackArtifactResourceProvider.java |   2 +-
 ...ConfigurationDependencyResourceProvider.java |  40 +-
 .../StackConfigurationResourceProvider.java     |  42 +-
 .../StackDependencyResourceProvider.java        |  41 +-
 ...StackLevelConfigurationResourceProvider.java |  40 +-
 .../internal/StackResourceProvider.java         |  28 +-
 .../StackServiceComponentResourceProvider.java  |  52 +-
 .../internal/StackServiceResourceProvider.java  |  45 +-
 .../internal/StackVersionResourceProvider.java  |  39 +-
 .../internal/StageResourceProvider.java         |   2 +-
 .../internal/TargetClusterResourceProvider.java |  31 +-
 .../internal/TaskAttemptResourceProvider.java   |  53 +-
 .../internal/TaskResourceProvider.java          |  27 +-
 .../internal/ThemeArtifactResourceProvider.java |   2 +-
 .../internal/UpgradeGroupResourceProvider.java  |   2 +-
 .../internal/UpgradeItemResourceProvider.java   |   2 +-
 .../internal/UpgradeResourceProvider.java       |   2 +-
 .../UpgradeSummaryResourceProvider.java         |   2 +-
 .../UserAuthorizationResourceProvider.java      |   2 +-
 .../internal/UserPrivilegeResourceProvider.java |  40 +-
 .../internal/UserResourceProvider.java          |  33 +-
 .../internal/ValidationResourceProvider.java    |  86 +++-
 .../VersionDefinitionResourceProvider.java      |   2 +-
 .../internal/ViewInstanceResourceProvider.java  |  55 +--
 .../ViewPermissionResourceProvider.java         |  29 +-
 .../internal/ViewPrivilegeResourceProvider.java |  36 +-
 .../internal/ViewResourceProvider.java          |  19 +-
 .../internal/ViewURLResourceProvider.java       |  25 +-
 .../internal/ViewVersionResourceProvider.java   |  45 +-
 .../internal/WidgetLayoutResourceProvider.java  |   2 +-
 .../internal/WidgetResourceProvider.java        |   2 +-
 .../internal/WorkflowResourceProvider.java      |  54 +-
 .../controller/utilities/PropertyHelper.java    |   6 +-
 .../system/impl/AmbariMetricSinkImpl.java       |   2 -
 .../src/main/resources/key_properties.json      | 161 ------
 .../src/main/resources/properties.json          | 487 -------------------
 .../api/query/render/MinimalRendererTest.java   |   6 +
 .../AbstractControllerResourceProviderTest.java |  10 +-
 .../AbstractDRResourceProviderTest.java         |   2 -
 .../internal/AbstractResourceProviderTest.java  |  26 +-
 .../internal/ActionResourceProviderTest.java    |   4 -
 .../ActiveWidgetLayoutResourceProviderTest.java |   2 -
 .../internal/BlueprintResourceProviderTest.java |  21 +-
 .../ClientConfigResourceProviderTest.java       |  10 -
 .../internal/ClusterControllerImplTest.java     |  14 +-
 ...rKerberosDescriptorResourceProviderTest.java |  17 -
 .../internal/ClusterResourceProviderTest.java   |  14 -
 ...ClusterStackVersionResourceProviderTest.java |  12 +-
 .../ConfigGroupResourceProviderTest.java        |   2 -
 .../ConfigurationResourceProviderTest.java      |   6 -
 .../CredentialResourceProviderTest.java         |  23 -
 .../internal/ExtensionResourceProviderTest.java |   2 -
 .../internal/FeedResourceProviderTest.java      |  29 +-
 .../internal/GroupResourceProviderTest.java     |   8 -
 ...ostComponentProcessResourceProviderTest.java |   2 -
 .../HostComponentResourceProviderTest.java      |  49 +-
 .../internal/HostResourceProviderTest.java      |  53 +-
 .../HostStackVersionResourceProviderTest.java   |  14 +-
 .../internal/InstanceResourceProviderTest.java  |  29 +-
 .../internal/JMXHostProviderTest.java           |   5 +-
 .../internal/JobResourceProviderTest.java       |  37 +-
 .../KerberosDescriptorResourceProviderTest.java |   6 +-
 .../internal/MemberResourceProviderTest.java    |  25 +-
 .../internal/RequestResourceProviderTest.java   |  42 +-
 .../RequestScheduleResourceProviderTest.java    |   2 -
 ...ootServiceComponentResourceProviderTest.java |   2 -
 ...erviceHostComponentResourceProviderTest.java |   2 -
 .../RootServiceResourceProviderTest.java        |   2 -
 .../StackAdvisorResourceProviderTest.java       |  12 +-
 .../StackArtifactResourceProviderTest.java      |   2 -
 ...igurationDependencyResourceProviderTest.java |   2 -
 .../StackConfigurationResourceProviderTest.java |   4 -
 .../StackDependencyResourceProviderTest.java    |   5 +-
 ...kLevelConfigurationResourceProviderTest.java |   4 -
 .../internal/StackResourceProviderTest.java     |   2 -
 .../StackServiceResourceProviderTest.java       |   4 -
 .../TargetClusterResourceProviderTest.java      |  28 +-
 .../TaskAttemptResourceProviderTest.java        |   2 +-
 .../internal/TaskResourceProviderTest.java      |  22 +-
 .../internal/TestIvoryProviderModule.java       |   6 +-
 .../internal/UpgradeResourceProviderTest.java   |   4 +-
 .../internal/UserResourceProviderDBTest.java    |   2 +-
 .../internal/UserResourceProviderTest.java      |   2 -
 .../ValidationResourceProviderTest.java         |   3 +-
 .../internal/WorkflowResourceProviderTest.java  |  30 +-
 143 files changed, 1480 insertions(+), 1925 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProviderTest.java
 
b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProviderTest.java
index b6464c2..7ec598d 100644
--- 
a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProviderTest.java
+++ 
b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProviderTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.ambari.logsearch.web.security;
 
-import com.google.common.collect.Lists;
 import org.apache.ambari.logsearch.common.ExternalServerClient;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.junit.Before;

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
index f6ca16b..5b4967d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
@@ -19,28 +19,21 @@
 
 package org.apache.ambari.server.controller;
 
-import java.util.Map;
-import java.util.Set;
-
 import javax.inject.Named;
 
 import 
org.apache.ambari.server.controller.internal.AlertTargetResourceProvider;
 import 
org.apache.ambari.server.controller.internal.ClusterStackVersionResourceProvider;
 import org.apache.ambari.server.controller.internal.UpgradeResourceProvider;
 import 
org.apache.ambari.server.controller.internal.ViewInstanceResourceProvider;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.Resource.Type;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 
 
 public interface ResourceProviderFactory {
   @Named("host")
-  ResourceProvider getHostResourceProvider(Set<String> propertyIds, Map<Type, 
String> keyPropertyIds,
-                                           AmbariManagementController 
managementController);
+  ResourceProvider getHostResourceProvider(AmbariManagementController 
managementController);
 
   @Named("hostComponent")
-  ResourceProvider getHostComponentResourceProvider(Set<String> propertyIds, 
Map<Type, String> keyPropertyIds,
-                                                    AmbariManagementController 
managementController);
+  ResourceProvider getHostComponentResourceProvider(AmbariManagementController 
managementController);
 
   @Named("service")
   ResourceProvider getServiceResourceProvider(AmbariManagementController 
managementController);
@@ -49,8 +42,7 @@ public interface ResourceProviderFactory {
   ResourceProvider getComponentResourceProvider(AmbariManagementController 
managementController);
 
   @Named("member")
-  ResourceProvider getMemberResourceProvider(Set<String> propertyIds, 
Map<Type, String> keyPropertyIds,
-                                             AmbariManagementController 
managementController);
+  ResourceProvider getMemberResourceProvider(AmbariManagementController 
managementController);
 
   @Named("hostKerberosIdentity")
   ResourceProvider 
getHostKerberosIdentityResourceProvider(AmbariManagementController 
managementController);
@@ -62,8 +54,7 @@ public interface ResourceProviderFactory {
   ResourceProvider getRepositoryVersionResourceProvider();
 
   @Named("kerberosDescriptor")
-  ResourceProvider 
getKerberosDescriptorResourceProvider(AmbariManagementController 
managementController, Set<String> propertyIds,
-                                                         Map<Resource.Type, 
String> keyPropertyIds);
+  ResourceProvider 
getKerberosDescriptorResourceProvider(AmbariManagementController 
managementController);
 
   @Named("upgrade")
   UpgradeResourceProvider 
getUpgradeResourceProvider(AmbariManagementController managementController);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
index a24c639..8d92dd1 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractAuthorizedResourceProvider.java
@@ -82,16 +82,6 @@ public abstract class AbstractAuthorizedResourceProvider 
extends AbstractResourc
   private Set<RoleAuthorization> requiredDeleteAuthorizations = 
Collections.emptySet();
 
   /**
-   * Constructor
-   *
-   * @param propertyIds    the property ids
-   * @param keyPropertyIds the key property ids
-   */
-  protected AbstractAuthorizedResourceProvider(Set<String> propertyIds, 
Map<Resource.Type, String> keyPropertyIds) {
-    super(propertyIds, keyPropertyIds);
-  }
-
-  /**
    * Create a new resource provider. This constructor will initialize the
    * specified {@link Resource.Type} with the provided keys. It should be used
    * in cases where the provider declares its own keys instead of reading them
@@ -106,7 +96,7 @@ public abstract class AbstractAuthorizedResourceProvider 
extends AbstractResourc
    */
   AbstractAuthorizedResourceProvider(Resource.Type type, Set<String> 
propertyIds,
       Map<Resource.Type, String> keyPropertyIds) {
-    this(propertyIds, keyPropertyIds);
+    super(propertyIds, keyPropertyIds);
     PropertyHelper.setPropertyIds(type, propertyIds);
     PropertyHelper.setKeyPropertyIds(type, keyPropertyIds);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index cc2548c..f5e61ef 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -27,7 +27,6 @@ import 
org.apache.ambari.server.controller.ResourceProviderFactory;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.utilities.ClusterControllerHelper;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.state.Cluster;
 
 /**
@@ -45,20 +44,6 @@ public abstract class AbstractControllerResourceProvider 
extends AbstractAuthori
   // ----- Constructors ------------------------------------------------------
 
   /**
-   * Create a  new resource provider for the given management controller.
-   *
-   * @param propertyIds          the property ids
-   * @param keyPropertyIds       the key property ids
-   * @param managementController the management controller
-   */
-  protected AbstractControllerResourceProvider(Set<String> propertyIds,
-                                               Map<Resource.Type, String> 
keyPropertyIds,
-                                               AmbariManagementController 
managementController) {
-    super(propertyIds, keyPropertyIds);
-    this.managementController = managementController;
-  }
-
-  /**
    * Create a new resource provider for the given management controller. This
    * constructor will initialize the specified {@link Resource.Type} with the
    * provided keys. It should be used in cases where the provider declares its
@@ -75,9 +60,8 @@ public abstract class AbstractControllerResourceProvider 
extends AbstractAuthori
    */
   AbstractControllerResourceProvider(Resource.Type type, Set<String> 
propertyIds,
       Map<Resource.Type, String> keyPropertyIds, AmbariManagementController 
managementController) {
-    this(propertyIds, keyPropertyIds, managementController);
-    PropertyHelper.setPropertyIds(type, propertyIds);
-    PropertyHelper.setKeyPropertyIds(type, keyPropertyIds);
+    super(type, propertyIds, keyPropertyIds);
+    this.managementController = managementController;
   }
 
   public static void init(ResourceProviderFactory factory) {
@@ -139,14 +123,11 @@ public abstract class AbstractControllerResourceProvider 
extends AbstractAuthori
    * Factory method for obtaining a resource provider based on a given type 
and management controller.
    *
    * @param type                  the resource type
-   * @param propertyIds           the property ids
    * @param managementController  the management controller
    *
    * @return a new resource provider
    */
   public static ResourceProvider getResourceProvider(Resource.Type type,
-                                                     Set<String> propertyIds,
-                                                     Map<Resource.Type, 
String> keyPropertyIds,
                                                      
AmbariManagementController managementController) {
 
     switch (type.getInternalType()) {
@@ -157,75 +138,75 @@ public abstract class AbstractControllerResourceProvider 
extends AbstractAuthori
       case Component:
         return 
resourceProviderFactory.getComponentResourceProvider(managementController);
       case Host:
-        return resourceProviderFactory.getHostResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return 
resourceProviderFactory.getHostResourceProvider(managementController);
       case HostComponent:
-        return 
resourceProviderFactory.getHostComponentResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return 
resourceProviderFactory.getHostComponentResourceProvider(managementController);
       case Configuration:
         return new ConfigurationResourceProvider(managementController);
       case ServiceConfigVersion:
         return new ServiceConfigVersionResourceProvider(managementController);
       case Action:
-        return new ActionResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new ActionResourceProvider(managementController);
       case Request:
-        return new RequestResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new RequestResourceProvider(managementController);
       case Task:
-        return new TaskResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new TaskResourceProvider(managementController);
       case User:
-        return new UserResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new UserResourceProvider(managementController);
       case Group:
-        return new GroupResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new GroupResourceProvider(managementController);
       case Member:
-        return resourceProviderFactory.getMemberResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return 
resourceProviderFactory.getMemberResourceProvider(managementController);
       case Upgrade:
         return 
resourceProviderFactory.getUpgradeResourceProvider(managementController);
       case Stack:
-        return new StackResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new StackResourceProvider(managementController);
       case StackVersion:
-        return new StackVersionResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new StackVersionResourceProvider(managementController);
       case ClusterStackVersion:
         return 
resourceProviderFactory.getClusterStackVersionResourceProvider(managementController);
       case HostStackVersion:
         return new HostStackVersionResourceProvider(managementController);
       case StackService:
-        return new StackServiceResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new StackServiceResourceProvider(managementController);
       case StackServiceComponent:
-        return new StackServiceComponentResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new StackServiceComponentResourceProvider(managementController);
       case StackConfiguration:
-        return new StackConfigurationResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new StackConfigurationResourceProvider(managementController);
       case StackConfigurationDependency:
-        return new StackConfigurationDependencyResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new 
StackConfigurationDependencyResourceProvider(managementController);
       case StackLevelConfiguration:
-        return new StackLevelConfigurationResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new 
StackLevelConfigurationResourceProvider(managementController);
       case ExtensionLink:
-          return new ExtensionLinkResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new ExtensionLinkResourceProvider(managementController);
       case Extension:
-        return new ExtensionResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new ExtensionResourceProvider(managementController);
       case ExtensionVersion:
-        return new ExtensionVersionResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new ExtensionVersionResourceProvider(managementController);
       case RootService:
-        return new RootServiceResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new RootServiceResourceProvider(managementController);
       case RootServiceComponent:
-        return new RootServiceComponentResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new RootServiceComponentResourceProvider(managementController);
       case RootServiceComponentConfiguration:
         return 
resourceProviderFactory.getRootServiceHostComponentConfigurationResourceProvider();
       case RootServiceHostComponent:
-        return new RootServiceHostComponentResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new 
RootServiceHostComponentResourceProvider(managementController);
       case ConfigGroup:
-        return new ConfigGroupResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new ConfigGroupResourceProvider(managementController);
       case RequestSchedule:
-        return new RequestScheduleResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new RequestScheduleResourceProvider(managementController);
       case HostComponentProcess:
-        return new HostComponentProcessResourceProvider(propertyIds, 
keyPropertyIds, managementController);
+        return new HostComponentProcessResourceProvider(managementController);
       case Blueprint:
-        return new BlueprintResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new BlueprintResourceProvider(managementController);
       case KerberosDescriptor:
-        return 
resourceProviderFactory.getKerberosDescriptorResourceProvider(managementController,
 propertyIds, keyPropertyIds);
+        return 
resourceProviderFactory.getKerberosDescriptorResourceProvider(managementController);
       case Recommendation:
-        return new RecommendationResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new RecommendationResourceProvider(managementController);
       case Validation:
-        return new ValidationResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new ValidationResourceProvider(managementController);
       case ClientConfig:
-        return new ClientConfigResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new ClientConfigResourceProvider(managementController);
       case RepositoryVersion:
         return resourceProviderFactory.getRepositoryVersionResourceProvider();
       case CompatibleRepositoryVersion:
@@ -255,7 +236,7 @@ public abstract class AbstractControllerResourceProvider 
extends AbstractAuthori
       case ClusterKerberosDescriptor:
         return new 
ClusterKerberosDescriptorResourceProvider(managementController);
       case LoggingQuery:
-        return new LoggingResourceProvider(propertyIds, keyPropertyIds, 
managementController);
+        return new LoggingResourceProvider(managementController);
       case AlertTarget:
         return resourceProviderFactory.getAlertTargetResourceProvider();
       case ViewInstance:

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractDRResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractDRResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractDRResourceProvider.java
index 953a2a7..74fff00 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractDRResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractDRResourceProvider.java
@@ -68,22 +68,19 @@ public abstract class AbstractDRResourceProvider extends 
AbstractResourceProvide
    * Factory method for obtaining a resource provider based on a given Ivory 
service instance.
    *
    * @param type         the resource type
-   * @param propertyIds  the property ids
    * @param service      the Ivory service
    *
    * @return a new resource provider
    */
   public static ResourceProvider getResourceProvider(Resource.Type type,
-                                                     Set<String> propertyIds,
-                                                     Map<Resource.Type, 
String> keyPropertyIds,
                                                      IvoryService service) {
     switch (type.getInternalType()) {
       case DRFeed:
-        return new FeedResourceProvider(service, propertyIds, keyPropertyIds);
+        return new FeedResourceProvider(service);
       case DRTargetCluster:
-        return new TargetClusterResourceProvider(service, propertyIds, 
keyPropertyIds);
+        return new TargetClusterResourceProvider(service);
       case DRInstance:
-        return new InstanceResourceProvider(service, propertyIds, 
keyPropertyIds);
+        return new InstanceResourceProvider(service);
       default:
         throw new IllegalArgumentException("Unknown type " + type);
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
index 290931555..1adc55a 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
@@ -19,7 +19,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -46,6 +45,9 @@ import 
org.apache.ambari.server.customactions.ActionDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 public class ActionResourceProvider extends AbstractControllerResourceProvider 
{
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ActionResourceProvider.class);
@@ -66,13 +68,29 @@ public class ActionResourceProvider extends 
AbstractControllerResourceProvider {
       .getPropertyId("Actions", "target_type");
   public static final String DEFAULT_TIMEOUT_PROPERTY_ID = PropertyHelper
       .getPropertyId("Actions", "default_timeout");
-  private static Set<String> pkPropertyIds = new HashSet<>(
-    Arrays.asList(new String[]{ACTION_NAME_PROPERTY_ID}));
 
-  public ActionResourceProvider(Set<String> propertyIds,
-                                Map<Type, String> keyPropertyIds,
-                                AmbariManagementController 
managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  /**
+   * The key property ids for a Action resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Type.Action, ACTION_NAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a Action resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      ACTION_NAME_PROPERTY_ID,
+      ACTION_TYPE_PROPERTY_ID,
+      INPUTS_PROPERTY_ID,
+      TARGET_SERVICE_PROPERTY_ID,
+      TARGET_COMPONENT_PROPERTY_ID,
+      DESCRIPTION_PROPERTY_ID,
+      TARGET_HOST_PROPERTY_ID,
+      DEFAULT_TIMEOUT_PROPERTY_ID);
+
+  public ActionResourceProvider(AmbariManagementController 
managementController) {
+    super(Type.Action, propertyIds, keyPropertyIds, managementController);
   }
 
   @Override
@@ -168,7 +186,7 @@ public class ActionResourceProvider extends 
AbstractControllerResourceProvider {
 
   @Override
   public Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
   private ActionManager getActionManager() {

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
index 389f0b2..2b1c671 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
@@ -126,7 +126,7 @@ public class ActiveWidgetLayoutResourceProvider extends 
AbstractControllerResour
    *
    */
   public ActiveWidgetLayoutResourceProvider(AmbariManagementController 
managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+    super(Type.ActiveWidgetLayout, propertyIds, keyPropertyIds, 
managementController);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
index 9579dca..c98cc9d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
@@ -172,7 +172,7 @@ public class AlertDefinitionResourceProvider extends 
AbstractControllerResourceP
    * @param controller
    */
   AlertDefinitionResourceProvider(AmbariManagementController controller) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
+    super(Resource.Type.AlertDefinition, PROPERTY_IDS, KEY_PROPERTY_IDS, 
controller);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
index 0898bc3..e707496 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
@@ -118,7 +118,7 @@ public class AlertGroupResourceProvider extends
    * @param controller
    */
   AlertGroupResourceProvider(AmbariManagementController controller) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
+    super(Resource.Type.AlertGroup, PROPERTY_IDS, KEY_PROPERTY_IDS, 
controller);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertHistoryResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertHistoryResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertHistoryResourceProvider.java
index 8d716ea..759b5a8 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertHistoryResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertHistoryResourceProvider.java
@@ -118,7 +118,7 @@ public class AlertHistoryResourceProvider extends 
ReadOnlyResourceProvider imple
    * Constructor.
    */
   AlertHistoryResourceProvider(AmbariManagementController controller) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
+    super(Resource.Type.AlertHistory, PROPERTY_IDS, KEY_PROPERTY_IDS, 
controller);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertNoticeResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertNoticeResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertNoticeResourceProvider.java
index 8ffd596..dae1f1e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertNoticeResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertNoticeResourceProvider.java
@@ -105,7 +105,7 @@ public class AlertNoticeResourceProvider extends 
AbstractControllerResourceProvi
    * Constructor.
    */
   AlertNoticeResourceProvider(AmbariManagementController managementController) 
{
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
+    super(Resource.Type.AlertNotice, PROPERTY_IDS, KEY_PROPERTY_IDS, 
managementController);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
index 4ab78b7..0f0c7b2 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
@@ -145,7 +145,7 @@ public class AlertResourceProvider extends 
ReadOnlyResourceProvider implements
    * @param controller
    */
   AlertResourceProvider(AmbariManagementController controller) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
+    super(Resource.Type.Alert, PROPERTY_IDS, KEY_PROPERTY_IDS, controller);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
index c1e9eb4..4f1690c 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
@@ -130,7 +130,7 @@ public class AlertTargetResourceProvider extends
    */
   @Inject
   AlertTargetResourceProvider() {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS);
+    super(Resource.Type.AlertTarget, PROPERTY_IDS, KEY_PROPERTY_IDS);
 
     EnumSet<RoleAuthorization> requiredAuthorizations = 
EnumSet.of(RoleAuthorization.CLUSTER_MANAGE_ALERT_NOTIFICATIONS);
     setRequiredCreateAuthorizations(requiredAuthorizations);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java
index 0ffceca..49b0d91 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java
@@ -24,7 +24,6 @@ import static 
org.apache.ambari.server.controller.internal.ViewPrivilegeResource
 
 import java.util.EnumSet;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -45,6 +44,9 @@ import 
org.apache.ambari.server.security.authorization.ResourceType;
 import org.apache.ambari.server.security.authorization.RoleAuthorization;
 import org.apache.ambari.server.view.ViewRegistry;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * Resource provider for Ambari privileges.
  */
@@ -60,28 +62,24 @@ public class AmbariPrivilegeResourceProvider extends 
PrivilegeResourceProvider<O
   /**
    * The property ids for an Ambari privilege resource.
    */
-  private static Set<String> propertyIds = new HashSet<>();
-  static {
-    propertyIds.add(PRIVILEGE_ID_PROPERTY_ID);
-    propertyIds.add(PERMISSION_NAME_PROPERTY_ID);
-    propertyIds.add(PERMISSION_LABEL_PROPERTY_ID);
-    propertyIds.add(PRINCIPAL_NAME_PROPERTY_ID);
-    propertyIds.add(PRINCIPAL_TYPE_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_VIEW_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_VIEW_VERSION_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_INSTANCE_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_CLUSTER_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_TYPE_PROPERTY_ID);
-
-  }
+  private static Set<String> propertyIds = Sets.newHashSet(
+      PRIVILEGE_ID_PROPERTY_ID,
+      PERMISSION_NAME_PROPERTY_ID,
+      PERMISSION_LABEL_PROPERTY_ID,
+      PRINCIPAL_NAME_PROPERTY_ID,
+      PRINCIPAL_TYPE_PROPERTY_ID,
+      PRIVILEGE_VIEW_NAME_PROPERTY_ID,
+      PRIVILEGE_VIEW_VERSION_PROPERTY_ID,
+      PRIVILEGE_INSTANCE_NAME_PROPERTY_ID,
+      PRIVILEGE_CLUSTER_NAME_PROPERTY_ID,
+      PRIVILEGE_TYPE_PROPERTY_ID);
 
   /**
    * The key property ids for a privilege resource.
    */
-  private static Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-  static {
-    keyPropertyIds.put(Resource.Type.AmbariPrivilege, 
PRIVILEGE_ID_PROPERTY_ID);
-  }
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.AmbariPrivilege, PRIVILEGE_ID_PROPERTY_ID)
+      .build();
 
 
   // ----- Constructors ------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
index 8f4d62e..c665aec 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
@@ -19,7 +19,6 @@
 package org.apache.ambari.server.controller.internal;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,6 +65,8 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 
 
@@ -119,10 +120,25 @@ public class BlueprintResourceProvider extends 
AbstractControllerResourceProvide
     "Configuration elements must be Maps";
   public static final String CONFIGURATION_MAP_SIZE_CHECK_ERROR_MESSAGE =
     "Configuration Maps must hold a single configuration type each";
-  // Primary Key Fields
-  private static Set<String> pkPropertyIds =
-    new HashSet<>(Arrays.asList(new String[]{
-      BLUEPRINT_NAME_PROPERTY_ID}));
+
+  /**
+   * The key property ids for a Blueprint resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Blueprint, BLUEPRINT_NAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a Blueprint resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      BLUEPRINT_NAME_PROPERTY_ID,
+      STACK_NAME_PROPERTY_ID,
+      STACK_VERSION_PROPERTY_ID,
+      BLUEPRINT_SECURITY_PROPERTY_ID,
+      HOST_GROUP_PROPERTY_ID,
+      CONFIGURATION_PROPERTY_ID,
+      SETTING_PROPERTY_ID);
 
   /**
    * Used to create Blueprint instances
@@ -149,15 +165,10 @@ public class BlueprintResourceProvider extends 
AbstractControllerResourceProvide
   /**
    * Create a  new resource provider for the given management controller.
    *
-   * @param propertyIds     the property ids
-   * @param keyPropertyIds  the key property ids
    * @param controller      management controller
    */
-  BlueprintResourceProvider(Set<String> propertyIds,
-                            Map<Resource.Type, String> keyPropertyIds,
-                            AmbariManagementController controller) {
-
-    super(propertyIds, keyPropertyIds, controller);
+  BlueprintResourceProvider(AmbariManagementController controller) {
+    super(Resource.Type.Blueprint, propertyIds, keyPropertyIds, controller);
   }
 
   /**
@@ -180,7 +191,7 @@ public class BlueprintResourceProvider extends 
AbstractControllerResourceProvide
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index f0ede5d..75f47ca 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -103,6 +103,8 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.assistedinject.AssistedInject;
@@ -123,11 +125,24 @@ public class ClientConfigResourceProvider extends 
AbstractControllerResourceProv
 
   private final Gson gson;
 
-  private static Set<String> pkPropertyIds =
-    new HashSet<>(Arrays.asList(new String[]{
+  /**
+   * The key property ids for a ClientConfig resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Cluster, COMPONENT_CLUSTER_NAME_PROPERTY_ID)
+      .put(Resource.Type.Service, COMPONENT_SERVICE_NAME_PROPERTY_ID)
+      .put(Resource.Type.Component, COMPONENT_COMPONENT_NAME_PROPERTY_ID)
+      .put(Resource.Type.Host, HOST_COMPONENT_HOST_NAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a ClientConfig resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
       COMPONENT_CLUSTER_NAME_PROPERTY_ID,
       COMPONENT_SERVICE_NAME_PROPERTY_ID,
-      COMPONENT_COMPONENT_NAME_PROPERTY_ID}));
+      COMPONENT_COMPONENT_NAME_PROPERTY_ID,
+      HOST_COMPONENT_HOST_NAME_PROPERTY_ID);
 
   private MaintenanceStateHelper maintenanceStateHelper;
   private static final Logger LOG = 
LoggerFactory.getLogger(ClientConfigResourceProvider.class);
@@ -137,15 +152,11 @@ public class ClientConfigResourceProvider extends 
AbstractControllerResourceProv
   /**
    * Create a  new resource provider for the given management controller.
    *
-   * @param propertyIds          the property ids
-   * @param keyPropertyIds       the key property ids
    * @param managementController the management controller
    */
   @AssistedInject
-  ClientConfigResourceProvider(@Assisted Set<String> propertyIds,
-                               @Assisted Map<Resource.Type, String> 
keyPropertyIds,
-                               @Assisted AmbariManagementController 
managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  ClientConfigResourceProvider(@Assisted AmbariManagementController 
managementController) {
+    super(Resource.Type.ClientConfig, propertyIds, keyPropertyIds, 
managementController);
     gson = new Gson();
   }
 
@@ -890,7 +901,7 @@ public class ClientConfigResourceProvider extends 
AbstractControllerResourceProv
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterKerberosDescriptorResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterKerberosDescriptorResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterKerberosDescriptorResourceProvider.java
index 2678d55..9dad423 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterKerberosDescriptorResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterKerberosDescriptorResourceProvider.java
@@ -111,7 +111,7 @@ public class ClusterKerberosDescriptorResourceProvider 
extends ReadOnlyResourceP
    * Create a new resource provider.
    */
   public ClusterKerberosDescriptorResourceProvider(AmbariManagementController 
managementController) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
+    super(Type.ClusterKerberosDescriptor, PROPERTY_IDS, KEY_PROPERTY_IDS, 
managementController);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterPrivilegeResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterPrivilegeResourceProvider.java
index 60cf783..a21de15 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterPrivilegeResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterPrivilegeResourceProvider.java
@@ -20,7 +20,6 @@ package org.apache.ambari.server.controller.internal;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -38,6 +37,9 @@ import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.UserEntity;
 import org.apache.ambari.server.security.authorization.RoleAuthorization;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * Resource provider for cluster privileges.
  */
@@ -56,25 +58,22 @@ public class ClusterPrivilegeResourceProvider extends 
PrivilegeResourceProvider<
   /**
    * The property ids for a privilege resource.
    */
-  private static Set<String> propertyIds = new HashSet<>();
-  static {
-    propertyIds.add(PRIVILEGE_CLUSTER_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_ID_PROPERTY_ID);
-    propertyIds.add(PERMISSION_NAME_PROPERTY_ID);
-    propertyIds.add(PERMISSION_NAME_PROPERTY_ID);
-    propertyIds.add(PERMISSION_LABEL_PROPERTY_ID);
-    propertyIds.add(PRINCIPAL_NAME_PROPERTY_ID);
-    propertyIds.add(PRINCIPAL_TYPE_PROPERTY_ID);
-  }
+  private static Set<String> propertyIds = Sets.newHashSet(
+      PRIVILEGE_CLUSTER_NAME_PROPERTY_ID,
+      PRIVILEGE_ID_PROPERTY_ID,
+      PERMISSION_NAME_PROPERTY_ID,
+      PERMISSION_NAME_PROPERTY_ID,
+      PERMISSION_LABEL_PROPERTY_ID,
+      PRINCIPAL_NAME_PROPERTY_ID,
+      PRINCIPAL_TYPE_PROPERTY_ID);
 
   /**
    * The key property ids for a privilege resource.
    */
-  private static Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-  static {
-    keyPropertyIds.put(Resource.Type.Cluster, 
PRIVILEGE_CLUSTER_NAME_PROPERTY_ID);
-    keyPropertyIds.put(Resource.Type.ClusterPrivilege, 
PRIVILEGE_ID_PROPERTY_ID);
-  }
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Cluster, PRIVILEGE_CLUSTER_NAME_PROPERTY_ID)
+      .put(Resource.Type.ClusterPrivilege, PRIVILEGE_ID_PROPERTY_ID)
+      .build();
 
   // ----- Constructors ------------------------------------------------------
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
index b9b3b56..16f04e4 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.EnumSet;
@@ -60,6 +59,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.core.Authentication;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.gson.Gson;
 
 
@@ -96,6 +96,7 @@ public class ClusterResourceProvider extends 
AbstractControllerResourceProvider
   public static final String CLUSTER_TOTAL_HOSTS_PROPERTY_ID = RESPONSE_KEY + 
PropertyHelper.EXTERNAL_PATH_SEP + TOTAL_HOSTS;
   public static final String CLUSTER_HEALTH_REPORT_PROPERTY_ID = RESPONSE_KEY 
+ PropertyHelper.EXTERNAL_PATH_SEP + HEALTH_REPORT;
   public static final String CLUSTER_CREDENTIAL_STORE_PROPERTIES_PROPERTY_ID = 
RESPONSE_KEY + PropertyHelper.EXTERNAL_PATH_SEP + CREDENTIAL_STORE_PROPERTIES;
+  public static final String CLUSTER_STATE_PROPERTY_ID = 
PropertyHelper.getPropertyId("Clusters","state");
 
   static final String BLUEPRINT = "blueprint";
   private static final String SECURITY = "security";
@@ -129,23 +130,16 @@ public class ClusterResourceProvider extends 
AbstractControllerResourceProvider
   private static SecurityConfigurationFactory securityConfigurationFactory;
 
   /**
-   * The cluster primary key properties.
-   */
-  private static Set<String> pkPropertyIds =
-    new HashSet<>(Arrays.asList(new String[]{CLUSTER_ID_PROPERTY_ID}));
-
-  /**
    * The key property ids for a cluster resource.
    */
-  private static Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-  static {
-    keyPropertyIds.put(Resource.Type.Cluster, CLUSTER_NAME_PROPERTY_ID);
-  }
+  protected static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Cluster, CLUSTER_NAME_PROPERTY_ID)
+      .build();
 
   /**
    * The property ids for a cluster resource.
    */
-  private static Set<String> propertyIds = new HashSet<>();
+  protected static Set<String> propertyIds = new HashSet<>();
 
   /**
    * Used to serialize to/from json.
@@ -169,6 +163,7 @@ public class ClusterResourceProvider extends 
AbstractControllerResourceProvider
     propertyIds.add(SECURITY);
     propertyIds.add(CREDENTIALS);
     propertyIds.add(QUICKLINKS_PROFILE);
+    propertyIds.add(CLUSTER_STATE_PROPERTY_ID);
   }
 
 
@@ -180,7 +175,7 @@ public class ClusterResourceProvider extends 
AbstractControllerResourceProvider
    * @param managementController  the management controller
    */
   ClusterResourceProvider(AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+    super(Resource.Type.Cluster, propertyIds, keyPropertyIds, 
managementController);
 
     
setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_ADD_DELETE_CLUSTERS));
     
setRequiredDeleteAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_ADD_DELETE_CLUSTERS));
@@ -192,7 +187,7 @@ public class ClusterResourceProvider extends 
AbstractControllerResourceProvider
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(Collections.singletonList(CLUSTER_ID_PROPERTY_ID));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 1c36c96..fa13116 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -219,7 +219,7 @@ public class ClusterStackVersionResourceProvider extends 
AbstractControllerResou
   @Inject
   public ClusterStackVersionResourceProvider(
           AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+    super(Type.ClusterStackVersion, propertyIds, keyPropertyIds, 
managementController);
 
     
setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_STACK_VERSIONS,
 RoleAuthorization.CLUSTER_UPGRADE_DOWNGRADE_STACK));
     
setRequiredDeleteAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_STACK_VERSIONS,
 RoleAuthorization.CLUSTER_UPGRADE_DOWNGRADE_STACK));

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
index 737bfa4..33430a5 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
@@ -18,7 +18,6 @@
 package org.apache.ambari.server.controller.internal;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
@@ -67,6 +66,8 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.inject.Inject;
 
 @StaticallyInject
@@ -102,8 +103,30 @@ public class ConfigGroupResourceProvider extends
   public static final String CONFIGGROUP_VERSION_TAGS_PROPERTY_ID =
     PropertyHelper.getPropertyId("ConfigGroup", "version_tags");
 
-  private static Set<String> pkPropertyIds = new HashSet<>(Arrays
-    .asList(new String[]{CONFIGGROUP_ID_PROPERTY_ID}));
+  /**
+   * The key property ids for a ConfigGroup resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Cluster, CONFIGGROUP_CLUSTER_NAME_PROPERTY_ID)
+      .put(Resource.Type.ConfigGroup, CONFIGGROUP_ID_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a ConfigGroup resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      CONFIGGROUP_CLUSTER_NAME_PROPERTY_ID,
+      CONFIGGROUP_ID_PROPERTY_ID,
+      CONFIGGROUP_NAME_PROPERTY_ID,
+      CONFIGGROUP_TAG_PROPERTY_ID,
+      CONFIGGROUP_SERVICENAME_PROPERTY_ID,
+      CONFIGGROUP_DESC_PROPERTY_ID,
+      CONFIGGROUP_SCV_NOTE_ID,
+      CONFIGGROUP_HOSTNAME_PROPERTY_ID,
+      CONFIGGROUP_HOSTS_HOSTNAME_PROPERTY_ID,
+      CONFIGGROUP_HOSTS_PROPERTY_ID,
+      CONFIGGROUP_CONFIGS_PROPERTY_ID,
+      CONFIGGROUP_VERSION_TAGS_PROPERTY_ID);
 
   @Inject
   private static HostDAO hostDAO;
@@ -117,14 +140,10 @@ public class ConfigGroupResourceProvider extends
   /**
    * Create a  new resource provider for the given management controller.
    *
-   * @param propertyIds          the property ids
-   * @param keyPropertyIds       the key property ids
    * @param managementController the management controller
    */
-  protected ConfigGroupResourceProvider(Set<String> propertyIds,
-       Map<Resource.Type, String> keyPropertyIds,
-       AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  protected ConfigGroupResourceProvider(AmbariManagementController 
managementController) {
+    super(Resource.Type.ConfigGroup, propertyIds, keyPropertyIds, 
managementController);
 
     EnumSet<RoleAuthorization> manageGroupsAuthSet =
         EnumSet.of(RoleAuthorization.SERVICE_MANAGE_CONFIG_GROUPS, 
RoleAuthorization.CLUSTER_MANAGE_CONFIG_GROUPS);
@@ -141,7 +160,7 @@ public class ConfigGroupResourceProvider extends
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
index 0f26085..1ac7563 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
@@ -103,7 +103,7 @@ public class ConfigurationResourceProvider extends
    * @param managementController  the associated management controller
    */
   ConfigurationResourceProvider(AmbariManagementController 
managementController) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
+    super(Resource.Type.Configuration, PROPERTY_IDS, KEY_PROPERTY_IDS, 
managementController);
 
     // creating configs requires authorizations based on the type of changes 
being performed, therefore
     // checks need to be performed inline.

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CredentialResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CredentialResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CredentialResourceProvider.java
index ebc7645..9e6fe3d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CredentialResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CredentialResourceProvider.java
@@ -105,7 +105,7 @@ public class CredentialResourceProvider extends 
AbstractControllerResourceProvid
    */
   @AssistedInject
   public CredentialResourceProvider(@Assisted AmbariManagementController 
managementController) {
-    super(PROPERTY_IDS, KEY_PROPERTY_IDS, managementController);
+    super(Type.Credential, PROPERTY_IDS, KEY_PROPERTY_IDS, 
managementController);
 
     EnumSet<RoleAuthorization> authorizations = EnumSet.of(
         RoleAuthorization.CLUSTER_MANAGE_CREDENTIALS,

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
index c3758b3..9f92cdd 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DefaultProviderModule.java
@@ -18,12 +18,8 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Map;
-import java.util.Set;
-
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,16 +46,14 @@ public class DefaultProviderModule extends 
AbstractProviderModule {
   protected ResourceProvider createResourceProvider(Resource.Type type) {
 
     LOGGER.debug("Creating resource provider for the type: {}", type);
-    Set<String> propertyIds = PropertyHelper.getPropertyIds(type);
-    Map<Resource.Type, String> keyPropertyIds = 
PropertyHelper.getKeyPropertyIds(type);
 
     switch (type.getInternalType()) {
       case Workflow:
-        return new WorkflowResourceProvider(propertyIds, keyPropertyIds);
+        return new WorkflowResourceProvider();
       case Job:
-        return new JobResourceProvider(propertyIds, keyPropertyIds);
+        return new JobResourceProvider();
       case TaskAttempt:
-        return new TaskAttemptResourceProvider(propertyIds, keyPropertyIds);
+        return new TaskAttemptResourceProvider();
       case View:
         return new ViewResourceProvider();
       case ViewVersion:
@@ -67,7 +61,7 @@ public class DefaultProviderModule extends 
AbstractProviderModule {
       case ViewURL:
         return new ViewURLResourceProvider();
       case StackServiceComponentDependency:
-        return new StackDependencyResourceProvider(propertyIds, 
keyPropertyIds);
+        return new StackDependencyResourceProvider();
       case Permission:
         return new PermissionResourceProvider();
       case AmbariPrivilege:
@@ -118,8 +112,7 @@ public class DefaultProviderModule extends 
AbstractProviderModule {
         return new RemoteClusterResourceProvider();
       default:
         LOGGER.debug("Delegating creation of resource provider for: {} to the 
AbstractControllerResourceProvider", type.getInternalType());
-        return AbstractControllerResourceProvider.getResourceProvider(type, 
propertyIds,
-          keyPropertyIds, managementController);
+        return AbstractControllerResourceProvider.getResourceProvider(type, 
managementController);
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java
index db904bf..1a4ffc2 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionLinkResourceProvider.java
@@ -18,7 +18,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
@@ -43,6 +42,8 @@ import 
org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.orm.dao.ExtensionLinkDAO;
 import org.apache.ambari.server.orm.entities.ExtensionLinkEntity;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.inject.Inject;
 
 /**
@@ -68,16 +69,32 @@ public class ExtensionLinkResourceProvider extends 
AbstractControllerResourcePro
   public static final String EXTENSION_VERSION_PROPERTY_ID = PropertyHelper
       .getPropertyId("ExtensionLink", "extension_version");
 
-  private static Set<String> pkPropertyIds = new HashSet<>(
-    Arrays.asList(new String[]{LINK_ID_PROPERTY_ID, STACK_NAME_PROPERTY_ID, 
STACK_VERSION_PROPERTY_ID, EXTENSION_NAME_PROPERTY_ID, 
EXTENSION_VERSION_PROPERTY_ID}));
+  /**
+   * The key property ids for a ExtensionLink resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Type.ExtensionLink, LINK_ID_PROPERTY_ID)
+      .put(Type.Stack, STACK_NAME_PROPERTY_ID)
+      .put(Type.StackVersion, STACK_VERSION_PROPERTY_ID)
+      .put(Type.Extension, EXTENSION_NAME_PROPERTY_ID)
+      .put(Type.ExtensionVersion, EXTENSION_VERSION_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a ExtensionLink resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      LINK_ID_PROPERTY_ID,
+      STACK_NAME_PROPERTY_ID,
+      STACK_VERSION_PROPERTY_ID,
+      EXTENSION_NAME_PROPERTY_ID,
+      EXTENSION_VERSION_PROPERTY_ID);
 
   @Inject
   private static ExtensionLinkDAO dao;
 
-  protected ExtensionLinkResourceProvider(Set<String> propertyIds,
-      Map<Type, String> keyPropertyIds,
-      AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  protected ExtensionLinkResourceProvider(AmbariManagementController 
managementController) {
+    super(Type.ExtensionLink, propertyIds, keyPropertyIds, 
managementController);
   }
 
   @Override
@@ -259,6 +276,6 @@ public class ExtensionLinkResourceProvider extends 
AbstractControllerResourcePro
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionResourceProvider.java
index 53e44e1..9ec4bab 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionResourceProvider.java
@@ -18,7 +18,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
@@ -40,6 +39,9 @@ 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 com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * An extension version is like a stack version but it contains custom 
services.  Linking an extension
  * version to the current stack version allows the cluster to install the 
custom services contained in
@@ -50,13 +52,22 @@ public class ExtensionResourceProvider extends 
ReadOnlyResourceProvider {
   public static final String EXTENSION_NAME_PROPERTY_ID = PropertyHelper
       .getPropertyId("Extensions", "extension_name");
 
-  private static Set<String> pkPropertyIds = new HashSet<>(
-    Arrays.asList(new String[]{EXTENSION_NAME_PROPERTY_ID}));
 
-  protected ExtensionResourceProvider(Set<String> propertyIds,
-      Map<Type, String> keyPropertyIds,
-      AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  /**
+   * The key property ids for a Extension resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Type.Extension, EXTENSION_NAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a Extension resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      EXTENSION_NAME_PROPERTY_ID);
+
+  protected ExtensionResourceProvider(AmbariManagementController 
managementController) {
+    super(Type.Extension, propertyIds, keyPropertyIds, managementController);
   }
 
 
@@ -127,6 +138,6 @@ public class ExtensionResourceProvider extends 
ReadOnlyResourceProvider {
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionVersionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionVersionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionVersionResourceProvider.java
index 4aa357c..0371058 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionVersionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExtensionVersionResourceProvider.java
@@ -19,7 +19,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
@@ -40,6 +39,9 @@ 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 com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * An extension version is like a stack version but it contains custom 
services.  Linking an extension
  * version to the current stack version allows the cluster to install the 
custom services contained in
@@ -54,13 +56,27 @@ public class ExtensionVersionResourceProvider extends 
ReadOnlyResourceProvider {
   public static final String EXTENSION_ERROR_SET      = 
PropertyHelper.getPropertyId("Versions", "extension-errors");
   public static final String EXTENSION_PARENT_PROPERTY_ID      = 
PropertyHelper.getPropertyId("Versions", "parent_extension_version");
 
-  private static Set<String> pkPropertyIds = new HashSet<>(
-    Arrays.asList(new String[]{EXTENSION_NAME_PROPERTY_ID, 
EXTENSION_VERSION_PROPERTY_ID}));
-
-  protected ExtensionVersionResourceProvider(Set<String> propertyIds,
-      Map<Type, String> keyPropertyIds,
+  /**
+   * The key property ids for a ExtensionVersion resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Type.Extension, EXTENSION_NAME_PROPERTY_ID)
+      .put(Type.ExtensionVersion, EXTENSION_VERSION_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a ExtensionVersion resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      EXTENSION_VERSION_PROPERTY_ID,
+      EXTENSION_NAME_PROPERTY_ID,
+      EXTENSION_VALID_PROPERTY_ID,
+      EXTENSION_ERROR_SET,
+      EXTENSION_PARENT_PROPERTY_ID);
+
+  protected ExtensionVersionResourceProvider(
       AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+    super(Type.ExtensionVersion, propertyIds, keyPropertyIds, 
managementController);
   }
 
   @Override
@@ -121,7 +137,7 @@ public class ExtensionVersionResourceProvider extends 
ReadOnlyResourceProvider {
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/FeedResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/FeedResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/FeedResourceProvider.java
index f9d75fd..82c781b 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/FeedResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/FeedResourceProvider.java
@@ -18,7 +18,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -39,6 +38,9 @@ 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 com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * DR feed resource provider.
  */
@@ -62,20 +64,39 @@ public class FeedResourceProvider extends 
AbstractDRResourceProvider {
   protected static final String FEED_TARGET_CLUSTER_ACTION_PROPERTY_ID = 
PropertyHelper.getPropertyId("Feed/targetCluster/retention", "action");
   protected static final String FEED_PROPERTIES_PROPERTY_ID = 
PropertyHelper.getPropertyId("Feed", "properties");
 
-  private static Set<String> pkPropertyIds =
-    new HashSet<>(Arrays.asList(new String[]{
-      FEED_NAME_PROPERTY_ID}));
+  /**
+   * The key property ids for a Feed resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.DRFeed, FEED_NAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a Feed resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      FEED_NAME_PROPERTY_ID,
+      FEED_DESCRIPTION_PROPERTY_ID,
+      FEED_STATUS_PROPERTY_ID,
+      FEED_SCHEDULE_PROPERTY_ID,
+      FEED_SOURCE_CLUSTER_NAME_PROPERTY_ID,
+      FEED_SOURCE_CLUSTER_START_PROPERTY_ID,
+      FEED_SOURCE_CLUSTER_END_PROPERTY_ID,
+      FEED_SOURCE_CLUSTER_LIMIT_PROPERTY_ID,
+      FEED_SOURCE_CLUSTER_ACTION_PROPERTY_ID,
+      FEED_TARGET_CLUSTER_NAME_PROPERTY_ID,
+      FEED_TARGET_CLUSTER_START_PROPERTY_ID,
+      FEED_TARGET_CLUSTER_END_PROPERTY_ID,
+      FEED_TARGET_CLUSTER_LIMIT_PROPERTY_ID,
+      FEED_TARGET_CLUSTER_ACTION_PROPERTY_ID,
+      FEED_PROPERTIES_PROPERTY_ID);
 
   /**
    * Construct a provider.
    *
    * @param ivoryService    the ivory service
-   * @param propertyIds     the properties associated with this provider
-   * @param keyPropertyIds  the key property ids
    */
-  public FeedResourceProvider(IvoryService ivoryService,
-                              Set<String> propertyIds,
-                              Map<Resource.Type, String> keyPropertyIds) {
+  public FeedResourceProvider(IvoryService ivoryService) {
     super(propertyIds, keyPropertyIds, ivoryService);
   }
 
@@ -201,7 +222,7 @@ public class FeedResourceProvider extends 
AbstractDRResourceProvider {
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
index f9f838f..18f3d0c 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
@@ -19,7 +19,6 @@ package org.apache.ambari.server.controller.internal;
 
 import java.util.Collection;
 import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -49,6 +48,8 @@ import 
org.apache.ambari.server.security.authorization.ResourceType;
 import org.apache.ambari.server.security.authorization.RoleAuthorization;
 import org.apache.ambari.server.security.authorization.Users;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
 import com.google.inject.Inject;
 
 /**
@@ -96,21 +97,18 @@ public class GroupPrivilegeResourceProvider extends 
ReadOnlyResourceProvider {
   /**
    * The property ids for a privilege resource.
    */
-  private static Set<String> propertyIds = new HashSet<>();
-
-  static {
-    propertyIds.add(PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_PERMISSION_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_VIEW_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_VIEW_VERSION_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_INSTANCE_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_CLUSTER_NAME_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_TYPE_PROPERTY_ID);
-    propertyIds.add(PRIVILEGE_GROUP_NAME_PROPERTY_ID);
-  }
+  private static Set<String> propertyIds = Sets.newHashSet(
+      PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID,
+      PRIVILEGE_PERMISSION_NAME_PROPERTY_ID,
+      PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID,
+      PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID,
+      PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID,
+      PRIVILEGE_VIEW_NAME_PROPERTY_ID,
+      PRIVILEGE_VIEW_VERSION_PROPERTY_ID,
+      PRIVILEGE_INSTANCE_NAME_PROPERTY_ID,
+      PRIVILEGE_CLUSTER_NAME_PROPERTY_ID,
+      PRIVILEGE_TYPE_PROPERTY_ID,
+      PRIVILEGE_GROUP_NAME_PROPERTY_ID);
 
   /**
    * Static initialization.
@@ -137,19 +135,17 @@ public class GroupPrivilegeResourceProvider extends 
ReadOnlyResourceProvider {
   /**
    * The key property ids for a privilege resource.
    */
-  private static Map<Resource.Type, String> keyPropertyIds = new HashMap<>();
-
-  static {
-    keyPropertyIds.put(Resource.Type.Group, PRIVILEGE_GROUP_NAME_PROPERTY_ID);
-    keyPropertyIds.put(Resource.Type.GroupPrivilege, 
PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID);
-  }
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Group, PRIVILEGE_GROUP_NAME_PROPERTY_ID)
+      .put(Resource.Type.GroupPrivilege, PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID)
+      .build();
 
 
   /**
    * Constructor.
    */
   public GroupPrivilegeResourceProvider() {
-    super(propertyIds, keyPropertyIds, null);
+    super(Resource.Type.GroupPrivilege, propertyIds, keyPropertyIds, null);
 
     EnumSet<RoleAuthorization> requiredAuthorizations = 
EnumSet.of(RoleAuthorization.AMBARI_ASSIGN_ROLES);
     setRequiredCreateAuthorizations(requiredAuthorizations);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e77a31ab/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
index 6cdd24e..3da64ae 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupResourceProvider.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.controller.internal;
 
-import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.Map;
@@ -41,6 +40,9 @@ import 
org.apache.ambari.server.security.authorization.RoleAuthorization;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
 /**
  * Resource provider for group resources.
  */
@@ -55,21 +57,29 @@ public class GroupResourceProvider extends 
AbstractControllerResourceProvider {
   public static final String GROUP_LDAP_GROUP_PROPERTY_ID = 
PropertyHelper.getPropertyId("Groups", "ldap_group");
   public static final String GROUP_GROUPTYPE_PROPERTY_ID  = 
PropertyHelper.getPropertyId("Groups", "group_type");
 
-  private static Set<String> pkPropertyIds =
-    new HashSet<>(Arrays.asList(new String[]{
-      GROUP_GROUPNAME_PROPERTY_ID}));
+
+  /**
+   * The key property ids for a Group resource.
+   */
+  private static Map<Resource.Type, String> keyPropertyIds = 
ImmutableMap.<Resource.Type, String>builder()
+      .put(Resource.Type.Group, GROUP_GROUPNAME_PROPERTY_ID)
+      .build();
+
+  /**
+   * The property ids for a Group resource.
+   */
+  private static Set<String> propertyIds = Sets.newHashSet(
+      GROUP_GROUPNAME_PROPERTY_ID,
+      GROUP_LDAP_GROUP_PROPERTY_ID,
+      GROUP_GROUPTYPE_PROPERTY_ID);
 
   /**
    * Create a new resource provider for the given management controller.
    *
-   * @param propertyIds           the property ids
-   * @param keyPropertyIds        the key property ids
    * @param managementController  the management controller
    */
-  GroupResourceProvider(Set<String> propertyIds,
-                       Map<Resource.Type, String> keyPropertyIds,
-                       AmbariManagementController managementController) {
-    super(propertyIds, keyPropertyIds, managementController);
+  GroupResourceProvider(AmbariManagementController managementController) {
+    super(Resource.Type.Group, propertyIds, keyPropertyIds, 
managementController);
 
     EnumSet<RoleAuthorization> manageUserAuthorizations = 
EnumSet.of(RoleAuthorization.AMBARI_MANAGE_USERS);
     setRequiredCreateAuthorizations(manageUserAuthorizations);
@@ -188,7 +198,7 @@ public class GroupResourceProvider extends 
AbstractControllerResourceProvider {
 
   @Override
   protected Set<String> getPKPropertyIds() {
-    return pkPropertyIds;
+    return new HashSet<>(keyPropertyIds.values());
   }
 
   private GroupRequest getRequest(Map<String, Object> properties) {

Reply via email to