You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2012/10/09 07:21:05 UTC

svn commit: r1395862 [1/2] - in /incubator/ambari/branches/AMBARI-666: ./ ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/ ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ ambari-api/src/main/java/org/apache/ambari/...

Author: mahadev
Date: Tue Oct  9 05:21:04 2012
New Revision: 1395862

URL: http://svn.apache.org/viewvc?rev=1395862&view=rev
Log:
AMBARI-829. Add unit tests for ResourceProviderImpl. (Tom Beerbower via mahadev)

Added:
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/PropertyHelper.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceProviderImplTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/utilities/PropertyHelperTest.java
Removed:
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/HostNames.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/Properties.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/utilities/PropertiesTest.java
Modified:
    incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/GangliaHelper.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/DefaultProviderModule.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/PropertyPredicateVisitor.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/RequestImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ResourceProviderImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCManagementController.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCProviderModule.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCResourceProvider.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXHelper.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXPropertyProvider.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/DBHelper.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/query/QueryImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/BaseResourceDefinition.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/ResourceDefinition.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/BasePersistenceManager.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/Request.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/RequestImpl.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/JsonPropertyParser.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/RequestBodyParser.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/ganglia/GangliaHelperTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ClusterControllerImplTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/RequestImplTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceImplTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/SchemaImplTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/jdbc/JDBCManagementControllerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/jmx/JMXHelperTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/handlers/CreateHandlerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/handlers/DeleteHandlerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/handlers/UpdateHandlerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/services/CreatePersistenceManagerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/services/UpdatePersistenceManagerTest.java
    incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/services/parsers/JsonPropertyParserTest.java
    incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/spi/Request.java

Modified: incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt (original)
+++ incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt Tue Oct  9 05:21:04 2012
@@ -11,6 +11,9 @@ AMBARI-666 branch (unreleased changes)
   INCOMPATIBLE CHANGES
 
   NEW FEATURES
+  
+  AMBARI-829. Add unit tests for ResourceProviderImpl. (Tom Beerbower via
+  mahadev)
 
   AMBARI-831. Move manifest generation into the ambari agent directory.
   (mahadev)

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/GangliaHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/GangliaHelper.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/GangliaHelper.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/ganglia/GangliaHelper.java Tue Oct  9 05:21:04 2012
@@ -42,8 +42,6 @@ public class GangliaHelper {
         "&m=" + metric +
         "&json=1";
 
-//        System.out.println("url=" + s);
-
     try {
       URLConnection connection = new URL(s).openConnection();
 
@@ -77,8 +75,6 @@ public class GangliaHelper {
         "&step=" + step +
         "&json=1";
 
-    System.out.println("url=" + s);
-
     try {
       URLConnection connection = new URL(s).openConnection();
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/DefaultProviderModule.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/DefaultProviderModule.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/DefaultProviderModule.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/DefaultProviderModule.java Tue Oct  9 05:21:04 2012
@@ -19,7 +19,7 @@
 package org.apache.ambari.api.controller.internal;
 
 import org.apache.ambari.api.controller.ProviderModule;
-import org.apache.ambari.api.controller.utilities.Properties;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariManagementControllerImpl;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
@@ -42,7 +42,7 @@ public class DefaultProviderModule imple
     AmbariManagementController managementController =
         new AmbariManagementControllerImpl(null, null);
     return ResourceProviderImpl.getResourceProvider(type,
-        PROPERTY_PROVIDERS, Properties.getPropertyIds(type, "DB"),
-        Properties.getKeyPropertyIds(type), managementController);
+        PROPERTY_PROVIDERS, PropertyHelper.getPropertyIds(type, "DB"),
+        PropertyHelper.getKeyPropertyIds(type), managementController);
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/PropertyPredicateVisitor.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/PropertyPredicateVisitor.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/PropertyPredicateVisitor.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/PropertyPredicateVisitor.java Tue Oct  9 05:21:04 2012
@@ -19,6 +19,7 @@
 package org.apache.ambari.api.controller.internal;
 
 import org.apache.ambari.server.controller.predicate.ArrayPredicate;
+import org.apache.ambari.server.controller.predicate.BasePredicate;
 import org.apache.ambari.server.controller.predicate.ComparisonPredicate;
 import org.apache.ambari.server.controller.predicate.PredicateVisitor;
 import org.apache.ambari.server.controller.predicate.UnaryPredicate;
@@ -31,16 +32,19 @@ import java.util.Map;
  * Predicate visitor for extracting property values from the PropertyPredicates of a predicate graph.
  */
 public class PropertyPredicateVisitor implements PredicateVisitor {
-  private final Map<PropertyId, Object> properties = new HashMap<PropertyId, Object>();
+  private final Map<PropertyId, String> properties = new HashMap<PropertyId, String>();
 
   @Override
   public void acceptComparisonPredicate(ComparisonPredicate predicate) {
-    properties.put(predicate.getPropertyId(), predicate.getValue());
+    properties.put(predicate.getPropertyId(), predicate.getValue().toString());
   }
 
   @Override
   public void acceptArrayPredicate(ArrayPredicate predicate) {
-    //Do nothing
+    BasePredicate[] predicates = predicate.getPredicates();
+    for (int i = 0; i < predicates.length; i++) {
+      predicates[i].accept(this);
+    }
   }
 
   @Override
@@ -56,7 +60,7 @@ public class PropertyPredicateVisitor im
    *
    * @return the properties
    */
-  public Map<PropertyId, Object> getProperties() {
+  public Map<PropertyId, String> getProperties() {
     return properties;
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/RequestImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/RequestImpl.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/RequestImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/RequestImpl.java Tue Oct  9 05:21:04 2012
@@ -41,7 +41,7 @@ public class RequestImpl implements Requ
    * The properties associated with this request.  Used for requests that create
    * resources or update resource values.
    */
-  private final Set<Map<PropertyId, Object>> properties;
+  private final Set<Map<PropertyId, String>> properties;
 
 
   // ----- Constructors ------------------------------------------------------
@@ -52,13 +52,13 @@ public class RequestImpl implements Requ
    * @param propertyIds  the property ids associated with the request; may be null
    * @param properties   the properties associated with the request; may be null
    */
-  public RequestImpl(Set<PropertyId> propertyIds, Set<Map<PropertyId, Object>> properties) {
+  public RequestImpl(Set<PropertyId> propertyIds, Set<Map<PropertyId, String>> properties) {
     this.propertyIds = propertyIds == null ?
         Collections.unmodifiableSet(new HashSet<PropertyId>()) :
         Collections.unmodifiableSet(propertyIds);
 
     this.properties = properties == null ?
-        Collections.unmodifiableSet(new HashSet<Map<PropertyId, Object>>()) :
+        Collections.unmodifiableSet(new HashSet<Map<PropertyId, String>>()) :
         Collections.unmodifiableSet(properties);
   }
 
@@ -71,7 +71,7 @@ public class RequestImpl implements Requ
   }
 
   @Override
-  public Set<Map<PropertyId, Object>> getProperties() {
+  public Set<Map<PropertyId, String>> getProperties() {
     return properties;
   }
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ResourceProviderImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ResourceProviderImpl.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ResourceProviderImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/internal/ResourceProviderImpl.java Tue Oct  9 05:21:04 2012
@@ -19,7 +19,7 @@
 package org.apache.ambari.api.controller.internal;
 
 import org.apache.ambari.api.controller.utilities.PredicateHelper;
-import org.apache.ambari.api.controller.utilities.Properties;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
@@ -40,7 +40,9 @@ import org.apache.ambari.server.controll
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.spi.Schema;
 
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -75,32 +77,33 @@ public abstract class ResourceProviderIm
   // ----- Property ID constants ---------------------------------------------
 
   // Clusters
-  private static final PropertyId CLUSTER_ID_PROPERTY_ID      = Properties.getPropertyId("cluster_id", "Clusters");
-  private static final PropertyId CLUSTER_NAME_PROPERTY_ID    = Properties.getPropertyId("cluster_name", "Clusters");
-  private static final PropertyId CLUSTER_VERSION_PROPERTY_ID = Properties.getPropertyId("version", "Clusters");
+  protected static final PropertyId CLUSTER_ID_PROPERTY_ID      = PropertyHelper.getPropertyId("cluster_id", "Clusters");
+  protected static final PropertyId CLUSTER_NAME_PROPERTY_ID    = PropertyHelper.getPropertyId("cluster_name", "Clusters");
+  protected static final PropertyId CLUSTER_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("version", "Clusters");
+  protected static final PropertyId CLUSTER_HOSTS_PROPERTY_ID   = PropertyHelper.getPropertyId("hosts", "Clusters");
   // Services
-  private static final PropertyId SERVICE_CLUSTER_NAME_PROPERTY_ID  = Properties.getPropertyId("cluster_name", "ServiceInfo");
-  private static final PropertyId SERVICE_SERVICE_NAME_PROPERTY_ID  = Properties.getPropertyId("service_name", "ServiceInfo");
-  private static final PropertyId SERVICE_SERVICE_STATE_PROPERTY_ID = Properties.getPropertyId("state", "ServiceInfo");
+  protected static final PropertyId SERVICE_CLUSTER_NAME_PROPERTY_ID  = PropertyHelper.getPropertyId("cluster_name", "ServiceInfo");
+  protected static final PropertyId SERVICE_SERVICE_NAME_PROPERTY_ID  = PropertyHelper.getPropertyId("service_name", "ServiceInfo");
+  protected static final PropertyId SERVICE_SERVICE_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("state", "ServiceInfo");
   // Components
-  private static final PropertyId COMPONENT_CLUSTER_NAME_PROPERTY_ID   = Properties.getPropertyId("cluster_name", "ServiceComponentInfo");
-  private static final PropertyId COMPONENT_SERVICE_NAME_PROPERTY_ID   = Properties.getPropertyId("service_name", "ServiceComponentInfo");
-  private static final PropertyId COMPONENT_COMPONENT_NAME_PROPERTY_ID = Properties.getPropertyId("service_name", "ServiceComponentInfo");
-  private static final PropertyId COMPONENT_STATE_PROPERTY_ID          = Properties.getPropertyId("state", "ServiceComponentInfo");
+  protected static final PropertyId COMPONENT_CLUSTER_NAME_PROPERTY_ID   = PropertyHelper.getPropertyId("cluster_name", "ServiceComponentInfo");
+  protected static final PropertyId COMPONENT_SERVICE_NAME_PROPERTY_ID   = PropertyHelper.getPropertyId("service_name", "ServiceComponentInfo");
+  protected static final PropertyId COMPONENT_COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("service_name", "ServiceComponentInfo");
+  protected static final PropertyId COMPONENT_STATE_PROPERTY_ID          = PropertyHelper.getPropertyId("state", "ServiceComponentInfo");
   // Hosts
-  private static final PropertyId HOST_CLUSTER_NAME_PROPERTY_ID = Properties.getPropertyId("cluster_name", "Hosts");
-  private static final PropertyId HOST_NAME_PROPERTY_ID         = Properties.getPropertyId("host_name", "Hosts");
-  private static final PropertyId HOST_IP_PROPERTY_ID           = Properties.getPropertyId("ip", "Hosts");
-  private static final PropertyId HOST_TOTAL_MEM_PROPERTY_ID    = Properties.getPropertyId("total_mem", "Hosts");
-  private static final PropertyId HOST_CPU_COUNT_PROPERTY_ID    = Properties.getPropertyId("cpu_count", "Hosts");
-  private static final PropertyId HOST_OS_ARCH_PROPERTY_ID      = Properties.getPropertyId("os_arch", "Hosts");
-  private static final PropertyId HOST_OS_TYPE_PROPERTY_ID      = Properties.getPropertyId("os_type", "Hosts");
+  protected static final PropertyId HOST_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "Hosts");
+  protected static final PropertyId HOST_NAME_PROPERTY_ID         = PropertyHelper.getPropertyId("host_name", "Hosts");
+  protected static final PropertyId HOST_IP_PROPERTY_ID           = PropertyHelper.getPropertyId("ip", "Hosts");
+  protected static final PropertyId HOST_TOTAL_MEM_PROPERTY_ID    = PropertyHelper.getPropertyId("total_mem", "Hosts");
+  protected static final PropertyId HOST_CPU_COUNT_PROPERTY_ID    = PropertyHelper.getPropertyId("cpu_count", "Hosts");
+  protected static final PropertyId HOST_OS_ARCH_PROPERTY_ID      = PropertyHelper.getPropertyId("os_arch", "Hosts");
+  protected static final PropertyId HOST_OS_TYPE_PROPERTY_ID      = PropertyHelper.getPropertyId("os_type", "Hosts");
   // Host Components
-  private static final PropertyId HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID   = Properties.getPropertyId("cluster_name", "HostRoles");
-  private static final PropertyId HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID   = Properties.getPropertyId("service_name", "HostRoles");
-  private static final PropertyId HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID = Properties.getPropertyId("service_name", "HostRoles");
-  private static final PropertyId HOST_COMPONENT_HOST_NAME_PROPERTY_ID      = Properties.getPropertyId("host_name", "HostRoles");
-  private static final PropertyId HOST_COMPONENT_STATE_PROPERTY_ID          = Properties.getPropertyId("state", "HostRoles");
+  protected static final PropertyId HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID   = PropertyHelper.getPropertyId("cluster_name", "HostRoles");
+  protected static final PropertyId HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID   = PropertyHelper.getPropertyId("service_name", "HostRoles");
+  protected static final PropertyId HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("service_name", "HostRoles");
+  protected static final PropertyId HOST_COMPONENT_HOST_NAME_PROPERTY_ID      = PropertyHelper.getPropertyId("host_name", "HostRoles");
+  protected static final PropertyId HOST_COMPONENT_STATE_PROPERTY_ID          = PropertyHelper.getPropertyId("state", "HostRoles");
 
 
   // ----- Constructors ------------------------------------------------------
@@ -154,6 +157,34 @@ public abstract class ResourceProviderIm
 
   // ----- utility methods ---------------------------------------------------
 
+  protected abstract Set<PropertyId> getPKPropertyIds();
+
+  protected Set<Map<PropertyId, String>> getPropertyMaps(Map<PropertyId, String> requestPropertyMap, Predicate predicate) throws AmbariException{
+
+    Set<PropertyId>              pkPropertyIds       = getPKPropertyIds();
+    Set<Map<PropertyId, String>> properties          = new HashSet<Map<PropertyId, String>>();
+    Set<Map<PropertyId, String>> predicateProperties = new HashSet<Map<PropertyId, String>>();
+
+    if (predicate != null && pkPropertyIds.equals(PredicateHelper.getPropertyIds(predicate))) {
+      predicateProperties.add(getProperties(predicate));
+    } else {
+      for (Resource resource : getResources(PropertyHelper.getReadRequest(pkPropertyIds), predicate)) {
+        predicateProperties.add(PropertyHelper.getProperties(resource));
+      }
+    }
+
+    for (Map<PropertyId, String> predicatePropertyMap : predicateProperties) {
+      // get properties from the given request properties
+      Map<PropertyId, String> propertyMap = requestPropertyMap == null ?
+          new HashMap<PropertyId, String>():
+          new HashMap<PropertyId, String>(requestPropertyMap);
+      // add the pk properties
+      setProperties(propertyMap, predicatePropertyMap, pkPropertyIds);
+      properties.add(propertyMap);
+    }
+    return properties;
+  }
+
   /**
    * Get a map of property values from a given predicate.
    *
@@ -161,7 +192,10 @@ public abstract class ResourceProviderIm
    *
    * @return the map of properties
    */
-  private static Map<PropertyId, Object> getProperties(Predicate predicate) {
+  private static Map<PropertyId, String> getProperties(Predicate predicate) {
+    if (predicate == null) {
+      return Collections.emptyMap();
+    }
     PropertyPredicateVisitor visitor = new PropertyPredicateVisitor();
     PredicateHelper.visit(predicate, visitor);
     return visitor.getProperties();
@@ -172,9 +206,9 @@ public abstract class ResourceProviderIm
    *
    * @param to           the target map
    * @param from         the source map
-   * @param propertyIds  the list of property ids
+   * @param propertyIds  the set of property ids
    */
-  private static void setProperties(Map<PropertyId, Object> to, Map<PropertyId, Object> from, PropertyId ... propertyIds) {
+  private static void setProperties(Map<PropertyId, String> to, Map<PropertyId, String> from, Set<PropertyId> propertyIds) {
     for (PropertyId propertyId : propertyIds) {
       if (from.containsKey(propertyId)) {
         to.put(propertyId, from.get(propertyId));
@@ -261,6 +295,10 @@ public abstract class ResourceProviderIm
 
   private static class ClusterResourceProvider extends ResourceProviderImpl{
 
+    private static Set<PropertyId> pkPropertyIds =
+        new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+            CLUSTER_ID_PROPERTY_ID}));
+
     // ----- Constructors ----------------------------------------------------
 
     /**
@@ -278,7 +316,7 @@ public abstract class ResourceProviderIm
     @Override
     public void createResources(Request request) throws AmbariException {
 
-      for (Map<PropertyId, Object> properties : request.getProperties()) {
+      for (Map<PropertyId, String> properties : request.getProperties()) {
         getManagementController().createCluster(getRequest(properties));
       }
     }
@@ -295,29 +333,34 @@ public abstract class ResourceProviderIm
         Resource resource = new ResourceImpl(Resource.Type.Cluster);
         setResourceProperty(resource, CLUSTER_ID_PROPERTY_ID, response.getClusterId(), requestedIds);
         setResourceProperty(resource, CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+        resources.add(resource);
       }
       return resources;
     }
 
     @Override
     public void updateResources(Request request, Predicate predicate) throws AmbariException {
-      // get the cluster request properties from the given request
-      Map<PropertyId, Object> properties = request.getProperties().iterator().next();
-      // get the id for the cluster request from the predicate
-      setProperties(properties, getProperties(predicate), CLUSTER_ID_PROPERTY_ID);
-
-      ClusterRequest clusterRequest = getRequest(properties);
-      getManagementController().updateCluster(clusterRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+        ClusterRequest clusterRequest = getRequest(propertyMap);
+        getManagementController().updateCluster(clusterRequest);
+      }
     }
 
     @Override
     public void deleteResources(Predicate predicate) throws AmbariException {
-      ClusterRequest clusterRequest = getRequest(getProperties(predicate));
-      getManagementController().deleteCluster(clusterRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(null, predicate)) {
+        ClusterRequest clusterRequest = getRequest(propertyMap);
+        getManagementController().deleteCluster(clusterRequest);
+      }
     }
 
     // ----- utility methods -------------------------------------------------
 
+    @Override
+    protected Set<PropertyId> getPKPropertyIds() {
+      return pkPropertyIds;
+    }
+
     /**
      * Get a cluster request object from a map of property values.
      *
@@ -325,13 +368,14 @@ public abstract class ResourceProviderIm
      *
      * @return the cluster request object
      */
-    private ClusterRequest getRequest(Map<PropertyId, Object> properties) {
+    private ClusterRequest getRequest(Map<PropertyId, String> properties) {
 
+      String id = properties.get(CLUSTER_ID_PROPERTY_ID);
       return new ClusterRequest(
-          (Long) properties.get(CLUSTER_ID_PROPERTY_ID),
-          (String) properties.get(CLUSTER_NAME_PROPERTY_ID),
-          (String) properties.get(CLUSTER_VERSION_PROPERTY_ID),
-          null);  // TODO : host names
+          id == null ? null : Long.decode(id),
+          properties.get(CLUSTER_NAME_PROPERTY_ID),
+          properties.get(CLUSTER_VERSION_PROPERTY_ID),
+          /*properties.get(CLUSTER_HOSTS_PROPERTY_ID)*/ null);
     }
   }
 
@@ -339,6 +383,11 @@ public abstract class ResourceProviderIm
 
   private static class ServiceResourceProvider extends ResourceProviderImpl{
 
+    private static Set<PropertyId> pkPropertyIds =
+        new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+            SERVICE_CLUSTER_NAME_PROPERTY_ID,
+            SERVICE_SERVICE_NAME_PROPERTY_ID}));
+
     // ----- Constructors ----------------------------------------------------
 
     /**
@@ -355,7 +404,7 @@ public abstract class ResourceProviderIm
 
     @Override
     public void createResources(Request request) throws AmbariException {
-      for (Map<PropertyId, Object> properties : request.getProperties()) {
+      for (Map<PropertyId, String> properties : request.getProperties()) {
         getManagementController().createService(getRequest(properties));
       }
     }
@@ -374,30 +423,34 @@ public abstract class ResourceProviderIm
         setResourceProperty(resource, SERVICE_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
         setResourceProperty(resource, SERVICE_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds);
 //        setResourceProperty(resource, SERVICE_VERSION_PROPERTY_ID, response.getCurrentStackVersion(), requestedIds);
+        resources.add(resource);
       }
       return resources;
     }
 
     @Override
     public void updateResources(Request request, Predicate predicate) throws AmbariException {
-      // get the service request properties from the given request
-      Map<PropertyId, Object> properties = request.getProperties().iterator().next();
-      // get the pk for the service request from the predicate
-      setProperties(properties, getProperties(predicate),
-          SERVICE_CLUSTER_NAME_PROPERTY_ID, SERVICE_SERVICE_NAME_PROPERTY_ID);
-
-      ServiceRequest serviceRequest = getRequest(properties);
-      getManagementController().updateService(serviceRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+        ServiceRequest serviceRequest = getRequest(propertyMap);
+        getManagementController().updateService(serviceRequest);
+      }
     }
 
     @Override
     public void deleteResources(Predicate predicate) throws AmbariException {
-      ServiceRequest serviceRequest = getRequest(getProperties(predicate));
-      getManagementController().deleteService(serviceRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(null, predicate)) {
+        ServiceRequest serviceRequest = getRequest(propertyMap);
+        getManagementController().deleteService(serviceRequest);
+      }
     }
 
     // ----- utility methods -------------------------------------------------
 
+    @Override
+    protected Set<PropertyId> getPKPropertyIds() {
+      return pkPropertyIds;
+    }
+
     /**
      * Get a service request object from a map of property values.
      *
@@ -405,12 +458,12 @@ public abstract class ResourceProviderIm
      *
      * @return the service request object
      */
-    private ServiceRequest getRequest(Map<PropertyId, Object> properties) {
+    private ServiceRequest getRequest(Map<PropertyId, String> properties) {
       return new ServiceRequest(
-          (String) properties.get(SERVICE_CLUSTER_NAME_PROPERTY_ID),
-          (String) properties.get(SERVICE_SERVICE_NAME_PROPERTY_ID),
+          properties.get(SERVICE_CLUSTER_NAME_PROPERTY_ID),
+          properties.get(SERVICE_SERVICE_NAME_PROPERTY_ID),
           null,
-          (String) properties.get(SERVICE_SERVICE_STATE_PROPERTY_ID));
+          properties.get(SERVICE_SERVICE_STATE_PROPERTY_ID));
     }
   }
 
@@ -418,6 +471,12 @@ public abstract class ResourceProviderIm
 
   private static class ComponentResourceProvider extends ResourceProviderImpl{
 
+    private static Set<PropertyId> pkPropertyIds =
+        new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+            COMPONENT_CLUSTER_NAME_PROPERTY_ID,
+            COMPONENT_SERVICE_NAME_PROPERTY_ID,
+            COMPONENT_COMPONENT_NAME_PROPERTY_ID}));
+
     // ----- Constructors ----------------------------------------------------
 
     /**
@@ -434,7 +493,7 @@ public abstract class ResourceProviderIm
 
     @Override
     public void createResources(Request request) throws AmbariException {
-      for (Map<PropertyId, Object> properties : request.getProperties()) {
+      for (Map<PropertyId, String> properties : request.getProperties()) {
         getManagementController().createComponent(getRequest(properties));
       }
     }
@@ -454,30 +513,34 @@ public abstract class ResourceProviderIm
         setResourceProperty(resource, COMPONENT_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds);
         setResourceProperty(resource, COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds);
 //        setResourceProperty(resource, COMPONENT_VERSION_PROPERTY_ID, response.getCurrentStackVersion(), requestedIds);
+        resources.add(resource);
       }
       return resources;
     }
 
     @Override
     public void updateResources(Request request, Predicate predicate) throws AmbariException {
-      // get the component request properties from the given request
-      Map<PropertyId, Object> properties = request.getProperties().iterator().next();
-      // get the pk for the service request from the predicate
-      setProperties(properties, getProperties(predicate),
-          COMPONENT_CLUSTER_NAME_PROPERTY_ID, COMPONENT_SERVICE_NAME_PROPERTY_ID, COMPONENT_COMPONENT_NAME_PROPERTY_ID);
-
-      ServiceComponentRequest serviceComponentRequest = getRequest(properties);
-      getManagementController().updateComponent(serviceComponentRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+        ServiceComponentRequest serviceComponentRequest = getRequest(propertyMap);
+        getManagementController().updateComponent(serviceComponentRequest);
+      }
     }
 
     @Override
     public void deleteResources(Predicate predicate) throws AmbariException {
-      ServiceComponentRequest serviceComponentRequest = getRequest(getProperties(predicate));
-      getManagementController().deleteComponent(serviceComponentRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(null, predicate)) {
+        ServiceComponentRequest serviceComponentRequest = getRequest(propertyMap);
+        getManagementController().deleteComponent(serviceComponentRequest);
+      }
     }
 
     // ----- utility methods -------------------------------------------------
 
+    @Override
+    protected Set<PropertyId> getPKPropertyIds() {
+      return pkPropertyIds;
+    }
+
     /**
      * Get a component request object from a map of property values.
      *
@@ -485,13 +548,13 @@ public abstract class ResourceProviderIm
      *
      * @return the component request object
      */
-    private ServiceComponentRequest getRequest(Map<PropertyId, Object> properties) {
+    private ServiceComponentRequest getRequest(Map<PropertyId, String> 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),
+          properties.get(COMPONENT_CLUSTER_NAME_PROPERTY_ID),
+          properties.get(COMPONENT_SERVICE_NAME_PROPERTY_ID),
+          properties.get(COMPONENT_COMPONENT_NAME_PROPERTY_ID),
           null,
-          (String) properties.get(COMPONENT_STATE_PROPERTY_ID));
+          properties.get(COMPONENT_STATE_PROPERTY_ID));
     }
   }
 
@@ -499,6 +562,10 @@ public abstract class ResourceProviderIm
 
   private static class HostResourceProvider extends ResourceProviderImpl{
 
+    private static Set<PropertyId> pkPropertyIds =
+        new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+            HOST_NAME_PROPERTY_ID}));
+
     // ----- Constructors ----------------------------------------------------
 
     /**
@@ -515,7 +582,7 @@ public abstract class ResourceProviderIm
 
     @Override
     public void createResources(Request request) throws AmbariException {
-      for (Map<PropertyId, Object> properties : request.getProperties()) {
+      for (Map<PropertyId, String> properties : request.getProperties()) {
         getManagementController().createHost(getRequest(properties));
       }
     }
@@ -539,29 +606,34 @@ public abstract class ResourceProviderIm
         setResourceProperty(resource, HOST_OS_ARCH_PROPERTY_ID, response.getOsArch(), requestedIds);
         setResourceProperty(resource, HOST_OS_TYPE_PROPERTY_ID, response.getOsType(), requestedIds);
         // TODO ...
+        resources.add(resource);
       }
       return resources;
     }
 
     @Override
     public void updateResources(Request request, Predicate predicate) throws AmbariException {
-      // get the host request properties from the given request
-      Map<PropertyId, Object> properties = request.getProperties().iterator().next();
-      // get the pk for the service request from the predicate
-      setProperties(properties, getProperties(predicate), HOST_CLUSTER_NAME_PROPERTY_ID);
-
-      HostRequest hostRequest = getRequest(properties);
-      getManagementController().updateHost(hostRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+        HostRequest hostRequest = getRequest(propertyMap);
+        getManagementController().updateHost(hostRequest);
+      }
     }
 
     @Override
     public void deleteResources(Predicate predicate) throws AmbariException {
-      HostRequest hostRequest = getRequest(getProperties(predicate));
-      getManagementController().deleteHost(hostRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(null, predicate)) {
+        HostRequest hostRequest = getRequest(propertyMap);
+        getManagementController().deleteHost(hostRequest);
+      }
     }
 
     // ----- utility methods -------------------------------------------------
 
+    @Override
+    protected Set<PropertyId> getPKPropertyIds() {
+      return pkPropertyIds;
+    }
+
     /**
      * Get a component request object from a map of property values.
      *
@@ -569,11 +641,11 @@ public abstract class ResourceProviderIm
      *
      * @return the component request object
      */
-    private HostRequest getRequest(Map<PropertyId, Object> properties) {
+    private HostRequest getRequest(Map<PropertyId, String> properties) {
       return new HostRequest(
-          (String) properties.get(HOST_NAME_PROPERTY_ID),
+          properties.get(HOST_NAME_PROPERTY_ID),
           // TODO : more than one cluster
-          Collections.singletonList((String) properties.get(HOST_CLUSTER_NAME_PROPERTY_ID)),
+          Collections.singletonList(properties.get(HOST_CLUSTER_NAME_PROPERTY_ID)),
           null);
     }
   }
@@ -582,6 +654,13 @@ public abstract class ResourceProviderIm
 
   private static class HostComponentResourceProvider extends ResourceProviderImpl{
 
+    private static Set<PropertyId> pkPropertyIds =
+        new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+            HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
+            HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID,
+            HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
+            HOST_COMPONENT_HOST_NAME_PROPERTY_ID}));
+
     // ----- Constructors ----------------------------------------------------
 
     /**
@@ -598,7 +677,7 @@ public abstract class ResourceProviderIm
 
     @Override
     public void createResources(Request request) throws AmbariException {
-      for (Map<PropertyId, Object> properties : request.getProperties()) {
+      for (Map<PropertyId, String> properties : request.getProperties()) {
         getManagementController().createHostComponent(getRequest(properties));
       }
     }
@@ -618,31 +697,34 @@ public abstract class ResourceProviderIm
         setResourceProperty(resource, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds);
         setResourceProperty(resource, HOST_COMPONENT_HOST_NAME_PROPERTY_ID, response.getHostname(), requestedIds);
         setResourceProperty(resource, HOST_COMPONENT_STATE_PROPERTY_ID, response.getLiveState(), requestedIds);
+        resources.add(resource);
       }
       return resources;
     }
 
     @Override
     public void updateResources(Request request, Predicate predicate) throws AmbariException {
-      // get the host request properties from the given request
-      Map<PropertyId, Object> properties = request.getProperties().iterator().next();
-      // get the pk for the service request from the predicate
-      setProperties(properties, getProperties(predicate),
-          HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID,
-          HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, HOST_COMPONENT_HOST_NAME_PROPERTY_ID);
-
-      ServiceComponentHostRequest hostComponentRequest = getRequest(properties);
-      getManagementController().updateHostComponent(hostComponentRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+        ServiceComponentHostRequest hostComponentRequest = getRequest(propertyMap);
+        getManagementController().updateHostComponent(hostComponentRequest);
+      }
     }
 
     @Override
     public void deleteResources(Predicate predicate) throws AmbariException {
-      ServiceComponentHostRequest clusterRequest = getRequest(getProperties(predicate));
-      getManagementController().deleteHostComponent(clusterRequest);
+      for (Map<PropertyId, String> propertyMap : getPropertyMaps(null, predicate)) {
+        ServiceComponentHostRequest serviceComponentHostRequest = getRequest(propertyMap);
+        getManagementController().deleteHostComponent(serviceComponentHostRequest);
+      }
     }
 
     // ----- utility methods -------------------------------------------------
 
+    @Override
+    protected Set<PropertyId> getPKPropertyIds() {
+      return pkPropertyIds;
+    }
+
     /**
      * Get a component request object from a map of property values.
      *
@@ -650,14 +732,14 @@ public abstract class ResourceProviderIm
      *
      * @return the component request object
      */
-    private ServiceComponentHostRequest getRequest(Map<PropertyId, Object> properties) {
+    private ServiceComponentHostRequest getRequest(Map<PropertyId, String> properties) {
       return 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),
+          properties.get(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID),
+          properties.get(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID),
+          properties.get(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID),
+          properties.get(HOST_COMPONENT_HOST_NAME_PROPERTY_ID),
           null,
-          (String) properties.get(HOST_COMPONENT_STATE_PROPERTY_ID));
+          properties.get(HOST_COMPONENT_STATE_PROPERTY_ID));
     }
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCManagementController.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCManagementController.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCManagementController.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCManagementController.java Tue Oct  9 05:21:04 2012
@@ -20,6 +20,7 @@ package org.apache.ambari.api.controller
 
 import org.apache.ambari.api.controller.internal.PropertyIdImpl;
 import org.apache.ambari.api.controller.internal.ResourceImpl;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
@@ -42,7 +43,6 @@ import org.apache.ambari.server.controll
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.api.controller.utilities.PredicateHelper;
-import org.apache.ambari.api.controller.utilities.Properties;
 
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
@@ -214,9 +214,9 @@ public class JDBCManagementController im
 
       try {
 
-        Set<Map<PropertyId, Object>> propertySet = request.getProperties();
+        Set<Map<PropertyId, String>> propertySet = request.getProperties();
 
-        for (Map<PropertyId, Object> properties : propertySet) {
+        for (Map<PropertyId, String> properties : propertySet) {
           String sql = getInsertSQL(resourceTables.get(type), properties);
 
           Statement statement = connection.createStatement();
@@ -301,9 +301,9 @@ public class JDBCManagementController im
     try {
       Connection connection = connectionFactory.getConnection();
       try {
-        Set<Map<PropertyId, Object>> propertySet = request.getProperties();
+        Set<Map<PropertyId, String>> propertySet = request.getProperties();
 
-        Map<PropertyId, Object> properties = propertySet.iterator().next();
+        Map<PropertyId, String> properties = propertySet.iterator().next();
 
         String resourceTable = resourceTables.get(type);
 
@@ -379,10 +379,10 @@ public class JDBCManagementController im
 
       while (rs.next()) {
 
-        PropertyId pkPropertyId = Properties.getPropertyId(
+        PropertyId pkPropertyId = PropertyHelper.getPropertyId(
             rs.getString("PKCOLUMN_NAME"), rs.getString("PKTABLE_NAME"));
 
-        PropertyId fkPropertyId = Properties.getPropertyId(
+        PropertyId fkPropertyId = PropertyHelper.getPropertyId(
             rs.getString("FKCOLUMN_NAME"), rs.getString("FKTABLE_NAME"));
 
         importedKeys.put(pkPropertyId, fkPropertyId);
@@ -411,7 +411,7 @@ public class JDBCManagementController im
 
       while (rs.next()) {
 
-        PropertyId pkPropertyId = Properties.getPropertyId(
+        PropertyId pkPropertyId = PropertyHelper.getPropertyId(
             rs.getString("COLUMN_NAME"), rs.getString("TABLE_NAME"));
 
         primaryKeys.add(pkPropertyId);
@@ -476,12 +476,12 @@ public class JDBCManagementController im
    *
    * @return the insert SQL
    */
-  private String getInsertSQL(String table, Map<PropertyId, Object> properties) {
+  private String getInsertSQL(String table, Map<PropertyId, String> properties) {
 
     StringBuilder columns = new StringBuilder();
     StringBuilder values = new StringBuilder();
 
-    for (Map.Entry<PropertyId, Object> entry : properties.entrySet()) {
+    for (Map.Entry<PropertyId, String> entry : properties.entrySet()) {
       PropertyId propertyId = entry.getKey();
       Object propertyValue = entry.getValue();
 
@@ -619,7 +619,7 @@ public class JDBCManagementController im
    *
    * @return the update SQL statement
    */
-  private String getUpdateSQL(String table, Map<PropertyId, Object> properties, Predicate predicate) {
+  private String getUpdateSQL(String table, Map<PropertyId, String> properties, Predicate predicate) {
 
     if (predicate instanceof BasePredicate) {
 
@@ -632,7 +632,7 @@ public class JDBCManagementController im
       whereClause.append(visitor.getSQL());
 
       StringBuilder setClause = new StringBuilder();
-      for (Map.Entry<PropertyId, Object> entry : properties.entrySet()) {
+      for (Map.Entry<PropertyId, String> entry : properties.entrySet()) {
 
         if (setClause.length() > 0) {
           setClause.append(", ");

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCProviderModule.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCProviderModule.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCProviderModule.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCProviderModule.java Tue Oct  9 05:21:04 2012
@@ -20,7 +20,7 @@ package org.apache.ambari.api.controller
 
 import org.apache.ambari.api.controller.ProviderModule;
 import org.apache.ambari.api.controller.utilities.DBHelper;
-import org.apache.ambari.api.controller.utilities.Properties;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
@@ -38,7 +38,7 @@ public class JDBCProviderModule implemen
   @Override
   public ResourceProvider getResourceProvider(Resource.Type type) {
     return new JDBCResourceProvider(DBHelper.CONNECTION_FACTORY, type,
-        PROPERTY_PROVIDERS, Properties.getPropertyIds(type, "DB"),
-        Properties.getKeyPropertyIds(type));
+        PROPERTY_PROVIDERS, PropertyHelper.getPropertyIds(type, "DB"),
+        PropertyHelper.getKeyPropertyIds(type));
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCResourceProvider.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCResourceProvider.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jdbc/JDBCResourceProvider.java Tue Oct  9 05:21:04 2012
@@ -22,7 +22,7 @@ import org.apache.ambari.api.controller.
 import org.apache.ambari.api.controller.internal.ResourceImpl;
 import org.apache.ambari.api.controller.internal.SchemaImpl;
 import org.apache.ambari.api.controller.utilities.PredicateHelper;
-import org.apache.ambari.api.controller.utilities.Properties;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.predicate.BasePredicate;
 import org.apache.ambari.server.controller.predicate.PredicateVisitorAcceptor;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -143,9 +143,9 @@ public class JDBCResourceProvider implem
 
       try {
 
-        Set<Map<PropertyId, Object>> propertySet = request.getProperties();
+        Set<Map<PropertyId, String>> propertySet = request.getProperties();
 
-        for (Map<PropertyId, Object> properties : propertySet) {
+        for (Map<PropertyId, String> properties : propertySet) {
           String sql = getInsertSQL(properties);
 
           Statement statement = connection.createStatement();
@@ -167,14 +167,12 @@ public class JDBCResourceProvider implem
     try {
       Connection connection = connectionFactory.getConnection();
       try {
-        Set<Map<PropertyId, Object>> propertySet = request.getProperties();
+        Set<Map<PropertyId, String>> propertySet = request.getProperties();
 
-        Map<PropertyId, Object> properties = propertySet.iterator().next();
+        Map<PropertyId, String> properties = propertySet.iterator().next();
 
         String sql = getUpdateSQL(properties, predicate);
 
-        System.out.println(sql);
-
         Statement statement = connection.createStatement();
 
         statement.execute(sql);
@@ -206,16 +204,16 @@ public class JDBCResourceProvider implem
   }
 
 
-  private String getInsertSQL(Map<PropertyId, Object> properties) {
+  private String getInsertSQL(Map<PropertyId, String> properties) {
 
     StringBuilder columns = new StringBuilder();
     StringBuilder values = new StringBuilder();
     String table = null;
 
 
-    for (Map.Entry<PropertyId, Object> entry : properties.entrySet()) {
+    for (Map.Entry<PropertyId, String> entry : properties.entrySet()) {
       PropertyId propertyId    = entry.getKey();
-      String     propertyValue = (String) entry.getValue();
+      String     propertyValue = entry.getValue();
 
       table = propertyId.getCategory();
 
@@ -305,8 +303,6 @@ public class JDBCResourceProvider implem
       sql = sql + " where " + whereClause + joinClause;
     }
 
-    System.out.println(sql);
-
     return sql;
   }
 
@@ -328,7 +324,7 @@ public class JDBCResourceProvider implem
     throw new IllegalStateException("Can't generate SQL.");
   }
 
-  private String getUpdateSQL(Map<PropertyId, Object> properties, Predicate predicate) {
+  private String getUpdateSQL(Map<PropertyId, String> properties, Predicate predicate) {
 
     if (predicate instanceof BasePredicate) {
 
@@ -344,7 +340,7 @@ public class JDBCResourceProvider implem
 
 
       StringBuilder setClause = new StringBuilder();
-      for (Map.Entry<PropertyId, Object> entry : properties.entrySet()) {
+      for (Map.Entry<PropertyId, String> entry : properties.entrySet()) {
 
         if (setClause.length() > 0) {
           setClause.append(", ");
@@ -396,10 +392,10 @@ public class JDBCResourceProvider implem
 
       while (rs.next()) {
 
-        PropertyId pkPropertyId = Properties.getPropertyId(
+        PropertyId pkPropertyId = PropertyHelper.getPropertyId(
             rs.getString("PKCOLUMN_NAME"), rs.getString("PKTABLE_NAME"));
 
-        PropertyId fkPropertyId = Properties.getPropertyId(
+        PropertyId fkPropertyId = PropertyHelper.getPropertyId(
             rs.getString("FKCOLUMN_NAME"), rs.getString("FKTABLE_NAME"));
 
         importedKeys.put(pkPropertyId, fkPropertyId);

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXHelper.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXHelper.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXHelper.java Tue Oct  9 05:21:04 2012
@@ -40,7 +40,6 @@ public class JMXHelper {
           JMXMetrics.class);
 
     } catch (IOException e) {
-      System.out.println("getJMXMetrics : caught " + e);
       throw new IllegalStateException("Can't get metric " + ".", e);
     }
   }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXPropertyProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXPropertyProvider.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXPropertyProvider.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/jmx/JMXPropertyProvider.java Tue Oct  9 05:21:04 2012
@@ -19,13 +19,13 @@
 package org.apache.ambari.api.controller.jmx;
 
 import org.apache.ambari.api.controller.internal.PropertyIdImpl;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.Predicate;
 import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.api.controller.utilities.PredicateHelper;
-import org.apache.ambari.api.controller.utilities.Properties;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -56,7 +56,7 @@ public class JMXPropertyProvider impleme
 
   private JMXPropertyProvider(Resource.Type type, Map<String, String> hosts) {
     this.hosts = hosts;
-    this.propertyIds = Properties.getPropertyIds(type, "JMX");
+    this.propertyIds = PropertyHelper.getPropertyIds(type, "JMX");
   }
 
   @Override
@@ -110,7 +110,6 @@ public class JMXPropertyProvider impleme
           String name = entry.getKey();
 
           PropertyIdImpl propertyId = new PropertyIdImpl(name, category, false);
-//                        System.out.println(i + ")" + propertyId);
 
           if (ids.contains(propertyId)) {
             resource.setProperty(propertyId, entry.getValue());

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/DBHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/DBHelper.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/DBHelper.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/DBHelper.java Tue Oct  9 05:21:04 2012
@@ -81,8 +81,6 @@ public class DBHelper {
       throw new IllegalStateException("Can't access DB.", e);
     }
 
-    System.out.println(hosts);
-
     return hosts;
   }
 }

Added: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/PropertyHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/PropertyHelper.java?rev=1395862&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/PropertyHelper.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/controller/utilities/PropertyHelper.java Tue Oct  9 05:21:04 2012
@@ -0,0 +1,132 @@
+/**
+ * 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.api.controller.utilities;
+
+import org.apache.ambari.api.controller.internal.PropertyIdImpl;
+import org.apache.ambari.api.controller.internal.RequestImpl;
+import org.apache.ambari.server.controller.spi.PropertyId;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ *
+ */
+public class PropertyHelper {
+
+  private static final String PROPERTIES_FILE = "properties.json";
+  private static final String KEY_PROPERTIES_FILE = "key_properties.json";
+
+  private static final Map<Resource.Type, Map<String, Set<PropertyId>>> PROPERTY_IDS = readPropertyIds(PROPERTIES_FILE);
+  private static final Map<Resource.Type, Map<Resource.Type, PropertyId>> KEY_PROPERTY_IDS = readKeyPropertyIds(KEY_PROPERTIES_FILE);
+
+  public static PropertyId getPropertyId(String name, String category) {
+    return new PropertyIdImpl(name, category, false);
+  }
+
+  public static PropertyId getPropertyId(String name, String category, boolean temporal) {
+    return new PropertyIdImpl(name, category, temporal);
+  }
+
+  public static Set<PropertyId> getPropertyIds(Resource.Type resourceType, String providerKey) {
+
+    Map<String, Set<PropertyId>> propertyIds = PROPERTY_IDS.get(resourceType);
+    if (propertyIds != null) {
+      return propertyIds.get(providerKey);
+    }
+    return Collections.emptySet();
+  }
+
+  public static Map<Resource.Type, PropertyId> getKeyPropertyIds(Resource.Type resourceType) {
+    return KEY_PROPERTY_IDS.get(resourceType);
+  }
+
+  public static Map<PropertyId, String> getProperties(Resource resource) {
+    Map<PropertyId, String> properties = new HashMap<PropertyId, String>();
+
+    Map<String, Map<String, String>> categories = resource.getCategories();
+
+    for (Map.Entry<String, Map<String, String>> categoryEntry : categories.entrySet()) {
+      for (Map.Entry<String, String>  propertyEntry : categoryEntry.getValue().entrySet()) {
+
+        properties.put(PropertyHelper.getPropertyId(propertyEntry.getKey(), categoryEntry.getKey()), propertyEntry.getValue());
+      }
+    }
+    return properties;
+  }
+
+  /**
+   * Factory method to create a create request from the given set of property maps.
+   * Each map contains the properties to be used to create a resource.  Multiple maps in the
+   * set should result in multiple creates.
+   *
+   * @param properties   the properties associated with the request; may be null
+   */
+  public static Request getCreateRequest(Set<Map<PropertyId, String>> properties) {
+    return new RequestImpl(null,  properties);
+  }
+
+  /**
+   * Factory method to create a read request from the given set of property ids.  The set of
+   * property ids represents the properties of interest for the query.
+   *
+   * @param propertyIds  the property ids associated with the request; may be null
+   */
+  public static Request getReadRequest(Set<PropertyId> propertyIds) {
+    return new RequestImpl(propertyIds,  null);
+  }
+
+  /**
+   * Factory method to create an update request from the given map of properties.
+   * The properties values in the given map are used to update the resource.
+   *
+   * @param properties   the properties associated with the request; may be null
+   */
+  public static Request getUpdateRequest(Map<PropertyId, String> properties) {
+    return new RequestImpl(null,  Collections.singleton(properties));
+  }
+
+  private static Map<Resource.Type, Map<String, Set<PropertyId>>> readPropertyIds(String filename) {
+    ObjectMapper mapper = new ObjectMapper();
+
+    try {
+      return mapper.readValue(ClassLoader.getSystemResourceAsStream(filename), new TypeReference<Map<Resource.Type, Map<String, Set<PropertyIdImpl>>>>() {
+      });
+    } catch (IOException e) {
+      throw new IllegalStateException("Can't read properties file " + filename, e);
+    }
+  }
+
+  private static Map<Resource.Type, Map<Resource.Type, PropertyId>> readKeyPropertyIds(String filename) {
+    ObjectMapper mapper = new ObjectMapper();
+
+    try {
+      return mapper.readValue(ClassLoader.getSystemResourceAsStream(filename), new TypeReference<Map<Resource.Type, Map<Resource.Type, PropertyIdImpl>>>() {
+      });
+    } catch (IOException e) {
+      throw new IllegalStateException("Can't read properties file " + filename, e);
+    }
+  }
+}

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/query/QueryImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/query/QueryImpl.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/query/QueryImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/query/QueryImpl.java Tue Oct  9 05:21:04 2012
@@ -21,6 +21,7 @@ package org.apache.ambari.api.query;
 import org.apache.ambari.api.controller.internal.PropertyIdImpl;
 import org.apache.ambari.api.controller.internal.RequestImpl;
 import org.apache.ambari.api.controller.utilities.ClusterControllerHelper;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.predicate.AndPredicate;
 import org.apache.ambari.server.controller.predicate.BasePredicate;
@@ -43,7 +44,7 @@ public class QueryImpl implements Query 
   ResourceDefinition m_resourceDefinition;
 
   /**
-   * Properties of the query which make up the select portion of the query.
+   * PropertyHelper of the query which make up the select portion of the query.
    */
   private Map<String, Set<String>> m_mapQueryProperties = new HashMap<String, Set<String>>();
 
@@ -220,7 +221,7 @@ public class QueryImpl implements Query 
         setProperties.add(new PropertyIdImpl(property, group, false));
       }
     }
-    return new RequestImpl(setProperties, null);
+    return PropertyHelper.getReadRequest(setProperties);
   }
 
   Result createResult() {

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/BaseResourceDefinition.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/BaseResourceDefinition.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/BaseResourceDefinition.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/BaseResourceDefinition.java Tue Oct  9 05:21:04 2012
@@ -57,7 +57,7 @@ public abstract class BaseResourceDefini
   private Map<Resource.Type, String> m_mapResourceIds = new HashMap<Resource.Type, String>();
 
   //TODO: Refactor out of this class when setProperties is moved.
-  private Map<PropertyId, Object> m_properties = new HashMap<PropertyId, Object>();
+  private Map<PropertyId, String> m_properties = new HashMap<PropertyId, String>();
 
 
   /**
@@ -121,17 +121,17 @@ public abstract class BaseResourceDefini
 
   //todo: refactor set/get property methods out of this class
   @Override
-  public void setProperty(PropertyId property, Object value) {
+  public void setProperty(PropertyId property, String value) {
     m_properties.put(property, value);
   }
 
   @Override
-  public void setProperties(Map<PropertyId, Object> mapProperties) {
+  public void setProperties(Map<PropertyId, String> mapProperties) {
     m_properties.putAll(mapProperties);
   }
 
   @Override
-  public Map<PropertyId, Object> getProperties() {
+  public Map<PropertyId, String> getProperties() {
     return m_properties;
   }
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/ResourceDefinition.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/ResourceDefinition.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/ResourceDefinition.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/resources/ResourceDefinition.java Tue Oct  9 05:21:04 2012
@@ -28,7 +28,6 @@ import org.apache.ambari.api.services.Re
 
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Resource Definition.
@@ -109,21 +108,21 @@ public interface ResourceDefinition {
    * @param property the property
    * @param value    the value
    */
-  public void setProperty(PropertyId property, Object value);
+  public void setProperty(PropertyId property, String value);
 
   /**
    * Set a map of properties on the resource.
    *
    * @param mapProperties a map of properties
    */
-  public void setProperties(Map<PropertyId, Object> mapProperties);
+  public void setProperties(Map<PropertyId, String> mapProperties);
 
   /**
    * Get the properties which have been set on this resource.
    *
    * @return the properties which have been set on this resource
    */
-  public Map<PropertyId, Object> getProperties();
+  public Map<PropertyId, String> getProperties();
 
   /**
    * Resource specific result processor.

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/BasePersistenceManager.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/BasePersistenceManager.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/BasePersistenceManager.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/BasePersistenceManager.java Tue Oct  9 05:21:04 2012
@@ -20,6 +20,7 @@ package org.apache.ambari.api.services;
 
 import org.apache.ambari.api.controller.internal.RequestImpl;
 import org.apache.ambari.api.controller.utilities.ClusterControllerHelper;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.ClusterController;
 import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.Request;
@@ -36,7 +37,7 @@ public abstract class BasePersistenceMan
     return ClusterControllerHelper.getClusterController();
   }
 
-  protected Request createControllerRequest(Map<PropertyId, Object> properties) {
-    return new RequestImpl(null, Collections.singleton(properties));
+  protected Request createControllerRequest(Map<PropertyId, String> properties) {
+    return PropertyHelper.getCreateRequest(Collections.singleton(properties));
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/Request.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/Request.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/Request.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/Request.java Tue Oct  9 05:21:04 2012
@@ -19,7 +19,6 @@
 package org.apache.ambari.api.services;
 
 import org.apache.ambari.api.resources.ResourceDefinition;
-import org.apache.ambari.api.services.parsers.RequestBodyParser;
 import org.apache.ambari.api.services.serializers.ResultSerializer;
 import org.apache.ambari.server.controller.spi.PropertyId;
 
@@ -120,7 +119,7 @@ public interface Request {
    *
    * @return a map containing the properties contained in the http body
    */
-  public Map<PropertyId, Object> getHttpBodyProperties();
+  public Map<PropertyId, String> getHttpBodyProperties();
 
     //TODO: refactor persistence mechanism
   /**

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/RequestImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/RequestImpl.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/RequestImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/RequestImpl.java Tue Oct  9 05:21:04 2012
@@ -126,8 +126,8 @@ public class RequestImpl implements Requ
   }
 
   @Override
-  public Map<PropertyId, Object> getHttpBodyProperties() {
-    return m_body == null ? Collections.<PropertyId, Object>emptyMap() :
+  public Map<PropertyId, String> getHttpBodyProperties() {
+    return m_body == null ? Collections.<PropertyId, String>emptyMap() :
         getHttpBodyParser().parse(getHttpBody());
   }
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/JsonPropertyParser.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/JsonPropertyParser.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/JsonPropertyParser.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/JsonPropertyParser.java Tue Oct  9 05:21:04 2012
@@ -18,7 +18,7 @@
 
 package org.apache.ambari.api.services.parsers;
 
-import org.apache.ambari.api.controller.utilities.Properties;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.PropertyId;
 import org.codehaus.jackson.JsonNode;
 import org.codehaus.jackson.map.ObjectMapper;
@@ -33,10 +33,10 @@ import java.util.Map;
  */
 public class JsonPropertyParser implements RequestBodyParser {
   //todo: change value type to String when it is supported in back end
-  private Map<PropertyId, Object> m_properties = new HashMap<PropertyId, Object>();
+  private Map<PropertyId, String> m_properties = new HashMap<PropertyId, String>();
 
   @Override
-  public Map<PropertyId, Object> parse(String s) {
+  public Map<PropertyId, String> parse(String s) {
     ObjectMapper mapper = new ObjectMapper();
 
     try {
@@ -57,7 +57,7 @@ public class JsonPropertyParser implemen
       if (child.isContainerNode()) {
         processNode(child, path.isEmpty() ? name : path + '.' + name);
       } else {
-        m_properties.put(Properties.getPropertyId(name, path), child.asText());
+        m_properties.put(PropertyHelper.getPropertyId(name, path), child.asText());
       }
     }
   }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/RequestBodyParser.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/RequestBodyParser.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/RequestBodyParser.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/main/java/org/apache/ambari/api/services/parsers/RequestBodyParser.java Tue Oct  9 05:21:04 2012
@@ -34,5 +34,5 @@ public interface RequestBodyParser {
    *
    * @return a map of properties or an empty map if no properties exist
    */
-  public Map<PropertyId, Object> parse(String s);
+  public Map<PropertyId, String> parse(String s);
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/ganglia/GangliaHelperTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/ganglia/GangliaHelperTest.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/ganglia/GangliaHelperTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/ganglia/GangliaHelperTest.java Tue Oct  9 05:21:04 2012
@@ -45,8 +45,6 @@ public class GangliaHelperTest {
 
     List<GangliaMetric> metrics = GangliaHelper.getGangliaMetrics(target, cluster, host, metric, startTime, endTime, step);
 
-    System.out.println("GangliaHelperTest.testGetMetrics : api = " + metrics);
-
     //TODO : assertions
   }
 }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ClusterControllerImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ClusterControllerImplTest.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ClusterControllerImplTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ClusterControllerImplTest.java Tue Oct  9 05:21:04 2012
@@ -20,6 +20,7 @@ package org.apache.ambari.api.controller
 
 import junit.framework.Assert;
 import org.apache.ambari.api.controller.ProviderModule;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.ClusterController;
 import org.apache.ambari.server.controller.spi.Predicate;
 import org.apache.ambari.server.controller.spi.PropertyId;
@@ -29,7 +30,6 @@ import org.apache.ambari.server.controll
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.spi.Schema;
 import org.apache.ambari.api.controller.utilities.PredicateBuilder;
-import org.apache.ambari.api.controller.utilities.Properties;
 import org.junit.Test;
 
 import java.util.HashMap;
@@ -47,10 +47,10 @@ public class ClusterControllerImplTest {
   private static final Set<PropertyId> propertyProviderProperties = new HashSet<PropertyId>();
 
   static {
-    propertyProviderProperties.add(Properties.getPropertyId("p5", "c3"));
-    propertyProviderProperties.add(Properties.getPropertyId("p6", "c3"));
-    propertyProviderProperties.add(Properties.getPropertyId("p7", "c4"));
-    propertyProviderProperties.add(Properties.getPropertyId("p8", "c4"));
+    propertyProviderProperties.add(PropertyHelper.getPropertyId("p5", "c3"));
+    propertyProviderProperties.add(PropertyHelper.getPropertyId("p6", "c3"));
+    propertyProviderProperties.add(PropertyHelper.getPropertyId("p7", "c4"));
+    propertyProviderProperties.add(PropertyHelper.getPropertyId("p8", "c4"));
   }
 
   private static final PropertyProvider propertyProvider = new PropertyProvider() {
@@ -59,10 +59,10 @@ public class ClusterControllerImplTest {
 
       int cnt = 0;
       for (Resource resource : resources){
-        resource.setProperty(Properties.getPropertyId("p5", "c3"), cnt + 100);
-        resource.setProperty(Properties.getPropertyId("p6", "c3"), cnt % 2);
-        resource.setProperty(Properties.getPropertyId("p7", "c4"), "monkey");
-        resource.setProperty(Properties.getPropertyId("p8", "c4"), "runner");
+        resource.setProperty(PropertyHelper.getPropertyId("p5", "c3"), cnt + 100);
+        resource.setProperty(PropertyHelper.getPropertyId("p6", "c3"), cnt % 2);
+        resource.setProperty(PropertyHelper.getPropertyId("p7", "c4"), "monkey");
+        resource.setProperty(PropertyHelper.getPropertyId("p8", "c4"), "runner");
         ++cnt;
       }
       return resources;
@@ -85,10 +85,10 @@ public class ClusterControllerImplTest {
   private static final Set<PropertyId> resourceProviderProperties = new HashSet<PropertyId>();
 
   static {
-    resourceProviderProperties.add(Properties.getPropertyId("p1", "c1"));
-    resourceProviderProperties.add(Properties.getPropertyId("p2", "c1"));
-    resourceProviderProperties.add(Properties.getPropertyId("p3", "c1"));
-    resourceProviderProperties.add(Properties.getPropertyId("p4", "c2"));
+    resourceProviderProperties.add(PropertyHelper.getPropertyId("p1", "c1"));
+    resourceProviderProperties.add(PropertyHelper.getPropertyId("p2", "c1"));
+    resourceProviderProperties.add(PropertyHelper.getPropertyId("p3", "c1"));
+    resourceProviderProperties.add(PropertyHelper.getPropertyId("p4", "c2"));
   }
 
   private static final ResourceProvider resourceProvider = new ResourceProvider() {
@@ -100,10 +100,10 @@ public class ClusterControllerImplTest {
       for (int cnt = 0; cnt < 4; ++ cnt) {
         ResourceImpl resource = new ResourceImpl(Resource.Type.Host);
 
-        resource.setProperty(Properties.getPropertyId("p1", "c1"), cnt);
-        resource.setProperty(Properties.getPropertyId("p2", "c1"), cnt % 2);
-        resource.setProperty(Properties.getPropertyId("p3", "c1"), "foo");
-        resource.setProperty(Properties.getPropertyId("p4", "c2"), "bar");
+        resource.setProperty(PropertyHelper.getPropertyId("p1", "c1"), cnt);
+        resource.setProperty(PropertyHelper.getPropertyId("p2", "c1"), cnt % 2);
+        resource.setProperty(PropertyHelper.getPropertyId("p3", "c1"), "foo");
+        resource.setProperty(PropertyHelper.getPropertyId("p4", "c2"), "bar");
         resources.add(resource);
       }
 
@@ -144,19 +144,19 @@ public class ClusterControllerImplTest {
   private static final Set<PropertyId> propertyIds = new HashSet<PropertyId>();
 
   static {
-    propertyIds.add(Properties.getPropertyId("p1", "c1"));
-    propertyIds.add(Properties.getPropertyId("p2", "c1"));
-    propertyIds.add(Properties.getPropertyId("p3", "c2"));
-    propertyIds.add(Properties.getPropertyId("p4", "c3"));
-    propertyIds.add(Properties.getPropertyId("p5", "c3"));
-    propertyIds.add(Properties.getPropertyId("p7", "c4"));
+    propertyIds.add(PropertyHelper.getPropertyId("p1", "c1"));
+    propertyIds.add(PropertyHelper.getPropertyId("p2", "c1"));
+    propertyIds.add(PropertyHelper.getPropertyId("p3", "c2"));
+    propertyIds.add(PropertyHelper.getPropertyId("p4", "c3"));
+    propertyIds.add(PropertyHelper.getPropertyId("p5", "c3"));
+    propertyIds.add(PropertyHelper.getPropertyId("p7", "c4"));
   }
 
   @Test
   public void testGetResources() throws Exception{
     ClusterController controller = new ClusterControllerImpl(new TestProviderModule());
 
-    Request request = new RequestImpl(propertyIds, null);
+    Request request = PropertyHelper.getReadRequest(propertyIds);
 
     Iterable<Resource> iterable = controller.getResources(Resource.Type.Host, request, null);
 
@@ -172,7 +172,7 @@ public class ClusterControllerImplTest {
   public void testGetResourcesWithPredicate() throws Exception{
     ClusterController controller = new ClusterControllerImpl(new TestProviderModule());
 
-    Request request = new RequestImpl(propertyIds, null);
+    Request request = PropertyHelper.getReadRequest(propertyIds);
 
     Predicate predicate = new PredicateBuilder().property("p2", "c1").equals(1).toPredicate();
 
@@ -226,10 +226,10 @@ public class ClusterControllerImplTest {
       for (int cnt = 0; cnt < 4; ++ cnt) {
         ResourceImpl resource = new ResourceImpl(Resource.Type.Host);
 
-        resource.setProperty(Properties.getPropertyId("p1", "c1"), cnt);
-        resource.setProperty(Properties.getPropertyId("p2", "c1"), cnt % 2);
-        resource.setProperty(Properties.getPropertyId("p3", "c1"), "foo");
-        resource.setProperty(Properties.getPropertyId("p4", "c2"), "bar");
+        resource.setProperty(PropertyHelper.getPropertyId("p1", "c1"), cnt);
+        resource.setProperty(PropertyHelper.getPropertyId("p2", "c1"), cnt % 2);
+        resource.setProperty(PropertyHelper.getPropertyId("p3", "c1"), "foo");
+        resource.setProperty(PropertyHelper.getPropertyId("p4", "c2"), "bar");
         resources.add(resource);
       }
 

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/RequestImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/RequestImplTest.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/RequestImplTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/RequestImplTest.java Tue Oct  9 05:21:04 2012
@@ -19,9 +19,9 @@
 package org.apache.ambari.api.controller.internal;
 
 import junit.framework.Assert;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.Request;
-import org.apache.ambari.api.controller.utilities.Properties;
 import org.junit.Test;
 
 import java.util.HashSet;
@@ -35,15 +35,15 @@ public class RequestImplTest {
   private static final Set<PropertyId> propertyIds = new HashSet<PropertyId>();
 
   static {
-    propertyIds.add(Properties.getPropertyId("p1", "c1"));
-    propertyIds.add(Properties.getPropertyId("p2", "c1"));
-    propertyIds.add(Properties.getPropertyId("p3", "c2"));
-    propertyIds.add(Properties.getPropertyId("p4", "c3"));
+    propertyIds.add(PropertyHelper.getPropertyId("p1", "c1"));
+    propertyIds.add(PropertyHelper.getPropertyId("p2", "c1"));
+    propertyIds.add(PropertyHelper.getPropertyId("p3", "c2"));
+    propertyIds.add(PropertyHelper.getPropertyId("p4", "c3"));
   }
 
   @Test
   public void testGetPropertyIds() {
-    Request request = new RequestImpl(propertyIds, null);
+    Request request = PropertyHelper.getReadRequest(propertyIds);
 
     Assert.assertEquals(propertyIds, request.getPropertyIds());
   }

Modified: incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceImplTest.java?rev=1395862&r1=1395861&r2=1395862&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceImplTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-api/src/test/java/org/apache/ambari/api/controller/internal/ResourceImplTest.java Tue Oct  9 05:21:04 2012
@@ -19,9 +19,9 @@
 package org.apache.ambari.api.controller.internal;
 
 import junit.framework.Assert;
+import org.apache.ambari.api.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.api.controller.utilities.Properties;
 import org.junit.Test;
 
 /**
@@ -51,7 +51,7 @@ public class ResourceImplTest {
   public void testSetGetProperty() {
     Resource resource = new ResourceImpl(Resource.Type.Cluster);
 
-    PropertyId propertyId = Properties.getPropertyId("p1", "c1");
+    PropertyId propertyId = PropertyHelper.getPropertyId("p1", "c1");
     resource.setProperty(propertyId, "foo");
     Assert.assertEquals("foo", resource.getPropertyValue(propertyId));