http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/data/PHD/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/PHD/site_properties.js 
b/ambari-web/app/data/PHD/site_properties.js
index 9a2aa4b..733e8f4 100644
--- a/ambari-web/app/data/PHD/site_properties.js
+++ b/ambari-web/app/data/PHD/site_properties.js
@@ -79,7 +79,7 @@ module.exports =
       "name": "dfs.datanode.data.dir.mount.file",
       "displayName": "File that stores mount point for each data dir",
       "description": "File path that contains the last known mount point for 
each data dir. This file is used to avoid creating a DFS data dir on the root 
drive (and filling it up) if a path was previously mounted on a drive.",
-      "defaultValue": "/etc/hadoop/conf/dfs_data_dir_mount.hist",
+      "recommendedValue": "/etc/hadoop/conf/dfs_data_dir_mount.hist",
       "displayType": "directory",
       "isVisible": true,
       "category": "DATANODE",
@@ -530,7 +530,7 @@ module.exports =
       "name": "hive.server2.thrift.port",
       "displayName": "Hive Server Port",
       "description": "TCP port number to listen on, default 10000.",
-      "defaultValue": "10000",
+      "recommendedValue": "10000",
       "displayType": "int",
       "isReconfigurable": true,
       "isOverridable": false,
@@ -542,7 +542,7 @@ module.exports =
       "id": "site property",
       "name": "hive.server2.support.dynamic.service.discovery",
       "displayName": "hive.server2.support.dynamic.service.discovery",
-      "defaultValue": true,
+      "recommendedValue": true,
       "displayType": "checkbox",
       "category": "Advanced hive-site",
       "serviceName": "HIVE"
@@ -551,7 +551,7 @@ module.exports =
       "id": "site property",
       "name": "hive.zookeeper.quorum",
       "displayName": "hive.zookeeper.quorum",
-      "defaultValue": "localhost:2181",
+      "recommendedValue": "localhost:2181",
       "displayType": "multiLine",
       "isVisible": true,
       "serviceName": "HIVE",
@@ -1622,7 +1622,7 @@ module.exports =
       "name": "content",
       "displayName": "content",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "pig properties",
       "displayType": "content",
       "isRequired": false,
@@ -1649,7 +1649,7 @@ module.exports =
       "name": "namenode_host",
       "displayName": "NameNode hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that has been assigned to run NameNode",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -1665,7 +1665,7 @@ module.exports =
       "name": "namenode_heapsize",
       "displayName": "NameNode Java heap size",
       "description": "Initial and maximum Java heap size for NameNode (Java 
options -Xms and -Xmx).  This also applies to the Secondary NameNode.",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": false,
@@ -1680,7 +1680,7 @@ module.exports =
       "name": "namenode_opt_newsize",
       "displayName": "NameNode new generation size",
       "description": "Default size of Java new generation for NameNode (Java 
option -XX:NewSize).  This also applies to the Secondary NameNode.",
-      "defaultValue": "200",
+      "recommendedValue": "200",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": false,
@@ -1695,7 +1695,7 @@ module.exports =
       "name": "namenode_opt_maxnewsize",
       "displayName": "NameNode maximum new generation size",
       "description": "Maximum size of Java new generation for NameNode (Java 
option -XX:MaxnewSize).",
-      "defaultValue": "200",
+      "recommendedValue": "200",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": false,
@@ -1710,7 +1710,7 @@ module.exports =
       "name": "snamenode_host",
       "displayName": "SNameNode host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run 
SecondaryNameNode",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -1726,7 +1726,7 @@ module.exports =
       "name": "datanode_hosts", //not in the schema. For UI purpose
       "displayName": "DataNode hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run DataNode",
       "displayType": "slaveHosts",
       "isRequired": false,
@@ -1743,7 +1743,7 @@ module.exports =
       "name": "dtnode_heapsize",
       "displayName": "DataNode maximum Java heap size",
       "description": "Maximum Java heap size for DataNode (Java option -Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
@@ -1757,7 +1757,7 @@ module.exports =
       "name": "hadoop_heapsize",
       "displayName": "Hadoop maximum Java heap size",
       "description": "Maximum Java heap size for daemons such as Balancer 
(Java option -Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
@@ -1771,7 +1771,7 @@ module.exports =
       "name": "hdfs_log_dir_prefix",
       "displayName": "Hadoop Log Dir Prefix",
       "description": "The parent directory for Hadoop log files.  The HDFS log 
directory will be ${hadoop_log_dir_prefix} / ${hdfs_user} and the MapReduce log 
directory will be ${hadoop_log_dir_prefix} / ${mapred_user}.",
-      "defaultValue": "/var/log/hadoop",
+      "recommendedValue": "/var/log/hadoop",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -1785,7 +1785,7 @@ module.exports =
       "name": "hadoop_pid_dir_prefix",
       "displayName": "Hadoop PID Dir Prefix",
       "description": "The parent directory in which the PID files for Hadoop 
processes will be created.  The HDFS PID directory will be 
${hadoop_pid_dir_prefix} / ${hdfs_user} and the MapReduce PID directory will be 
${hadoop_pid_dir_prefix} / ${mapred_user}.",
-      "defaultValue": "/var/run/hadoop",
+      "recommendedValue": "/var/run/hadoop",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -1799,7 +1799,7 @@ module.exports =
       "name": "hadoop_root_logger",
       "displayName": "Hadoop Root Logger",
       "description": "Hadoop logging options",
-      "defaultValue": "INFO,RFA",
+      "recommendedValue": "INFO,RFA",
       "displayType": "string",
       "isOverridable": false,
       "isVisible": true,
@@ -1814,7 +1814,7 @@ module.exports =
       "name": "hs_host",
       "displayName": "History Server",
       "description": "History Server",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "masterHost",
       "isRequiredByAgent": false,
@@ -1829,7 +1829,7 @@ module.exports =
       "name": "jobhistory_heapsize",
       "displayName": "History Server heap size",
       "description": "History Server heap size",
-      "defaultValue": "900",
+      "recommendedValue": "900",
       "unit": "MB",
       "isOverridable": true,
       "displayType": "int",
@@ -1844,7 +1844,7 @@ module.exports =
       "name": "mapred_log_dir_prefix",
       "displayName": "Mapreduce Log Dir Prefix",
       "description": "",
-      "defaultValue": "/var/log/hadoop-mapreduce",
+      "recommendedValue": "/var/log/hadoop-mapreduce",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -1858,7 +1858,7 @@ module.exports =
       "name": "mapred_pid_dir_prefix",
       "displayName": "Mapreduce PID Dir Prefix",
       "description": "",
-      "defaultValue": "/var/run/hadoop-mapreduce",
+      "recommendedValue": "/var/run/hadoop-mapreduce",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -1873,7 +1873,7 @@ module.exports =
       "name": "yarn_heapsize",
       "displayName": "YARN Java heap size",
       "description": "Max heapsize for all YARN components",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "isOverridable": true,
       "displayType": "int",
       "unit": "MB",
@@ -1888,7 +1888,7 @@ module.exports =
       "name": "rm_host",
       "displayName": "ResourceManager",
       "description": "ResourceManager",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "masterHost",
       "isRequiredByAgent": false,
@@ -1903,7 +1903,7 @@ module.exports =
       "name": "resourcemanager_heapsize",
       "displayName": "ResourceManager Java heap size",
       "description": "Max heapsize for ResourceManager",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "isOverridable": false,
       "displayType": "int",
       "unit": "MB",
@@ -1918,7 +1918,7 @@ module.exports =
       "name": "nm_hosts",
       "displayName": "NodeManager",
       "description": "List of NodeManager Hosts.",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "slaveHosts",
       "isRequiredByAgent": false,
@@ -1933,7 +1933,7 @@ module.exports =
       "name": "nodemanager_heapsize",
       "displayName": "NodeManager Java heap size",
       "description": "Max heapsize for NodeManager",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "isOverridable": true,
       "displayType": "int",
       "unit": "MB",
@@ -1948,7 +1948,7 @@ module.exports =
       "name": "yarn_log_dir_prefix",
       "displayName": "YARN Log Dir Prefix",
       "description": "",
-      "defaultValue": "/var/log/hadoop-yarn",
+      "recommendedValue": "/var/log/hadoop-yarn",
       "displayType": "directory",
       "isOverridable": false,
       "isReconfigurable": false,
@@ -1962,7 +1962,7 @@ module.exports =
       "name": "yarn_pid_dir_prefix",
       "displayName": "YARN PID Dir Prefix",
       "description": "",
-      "defaultValue": "/var/run/hadoop-yarn",
+      "recommendedValue": "/var/run/hadoop-yarn",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -1987,7 +1987,7 @@ module.exports =
       "name": "ats_host",
       "displayName": "App Timeline Server",
       "description": "Application Timeline Server Host",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "masterHost",
       "isRequiredByAgent": false,
@@ -2002,7 +2002,7 @@ module.exports =
       "name": "apptimelineserver_heapsize",
       "displayName": "AppTimelineServer Java heap size",
       "description": "AppTimelineServer Java heap size",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "isOverridable": false,
       "displayType": "int",
       "unit": "MB",
@@ -2018,7 +2018,7 @@ module.exports =
       "name": "hbasemaster_host",
       "displayName": "HBase Master hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run HBase Master",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -2034,7 +2034,7 @@ module.exports =
       "name": "hbase_master_heapsize",
       "displayName": "HBase Master Maximum Java heap size",
       "description": "Maximum Java heap size for HBase master (Java option 
-Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": true,
@@ -2049,7 +2049,7 @@ module.exports =
       "name": "regionserver_hosts",
       "displayName": "RegionServer hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run RegionServer",
       "displayType": "slaveHosts",
       "isOverridable": false,
@@ -2066,7 +2066,7 @@ module.exports =
       "name": "hbase_regionserver_heapsize",
       "displayName": "RegionServers maximum Java heap size",
       "description": "Maximum Java heap size for RegionServers (Java option 
-Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
@@ -2101,7 +2101,7 @@ module.exports =
       "name": "hbase_log_dir",
       "displayName": "HBase Log Dir",
       "description": "Directory for HBase logs",
-      "defaultValue": "/var/log/hbase",
+      "recommendedValue": "/var/log/hbase",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2115,7 +2115,7 @@ module.exports =
       "name": "hbase_pid_dir",
       "displayName": "HBase PID Dir",
       "description": "Directory in which the pid files for HBase processes 
will be created",
-      "defaultValue": "/var/run/hbase",
+      "recommendedValue": "/var/run/hbase",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2149,7 +2149,7 @@ module.exports =
       "name": "fs_glusterfs_default_name",
       "displayName": "GlusterFS default fs name 1.x Hadoop",
       "description": "GlusterFS default filesystem name 
(glusterfs://{MasterFQDN}:9000)",
-      "defaultValue": "glusterfs:///localhost:8020",
+      "recommendedValue": "glusterfs:///localhost:8020",
       "displayType": "string",
       "isVisible": true,
       "serviceName": "GLUSTERFS",
@@ -2161,7 +2161,7 @@ module.exports =
       "name": "glusterfs_defaultFS_name",
       "displayName": "GlusterFS default fs name 2.x Hadoop",
       "description": "GlusterFS default filesystem name (glusterfs:///)",
-      "defaultValue": "glusterfs:///localhost:8020",
+      "recommendedValue": "glusterfs:///localhost:8020",
       "displayType": "string",
       "isVisible": true,
       "serviceName": "GLUSTERFS",
@@ -2173,7 +2173,7 @@ module.exports =
       "name": "hadoop_heapsize",
       "displayName": "Hadoop maximum Java heap size",
       "description": "Maximum Java heap size for daemons such as Balancer 
(Java option -Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isVisible": true,
@@ -2187,7 +2187,7 @@ module.exports =
       "name": "hdfs_log_dir_prefix",
       "displayName": "Hadoop Log Dir Prefix",
       "description": "The parent directory for Hadoop log files.  The HDFS log 
directory will be ${hadoop_log_dir_prefix} / ${hdfs_user} and the MapReduce log 
directory will be ${hadoop_log_dir_prefix} / ${mapred_user}.",
-      "defaultValue": "/var/log/hadoop",
+      "recommendedValue": "/var/log/hadoop",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2201,7 +2201,7 @@ module.exports =
       "name": "hadoop_pid_dir_prefix",
       "displayName": "Hadoop PID Dir Prefix",
       "description": "The parent directory in which the PID files for Hadoop 
processes will be created.  The HDFS PID directory will be 
${hadoop_pid_dir_prefix} / ${hdfs_user} and the MapReduce PID directory will be 
${hadoop_pid_dir_prefix} / ${mapred_user}.",
-      "defaultValue": "/var/run/hadoop",
+      "recommendedValue": "/var/run/hadoop",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2215,7 +2215,7 @@ module.exports =
       "name": "namenode_heapsize",
       "displayName": "Name Node Heap Size",
       "description": "Name Node Heap Size, default jvm memory setting",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "isReconfigurable": false,
       "displayType": "int",
       "isOverridable": false,
@@ -2229,7 +2229,7 @@ module.exports =
       "name": "namenode_opt_newsize",
       "displayName": "NameNode new generation size",
       "description": "Default size of Java new generation for NameNode (Java 
option -XX:NewSize).  This also applies to the Secondary NameNode.",
-      "defaultValue": "200",
+      "recommendedValue": "200",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": false,
@@ -2243,7 +2243,7 @@ module.exports =
       "name": "namenode_opt_maxnewsize",
       "displayName": "NameNode maximum new generation size",
       "description": "Maximum size of Java new generation for NameNode (Java 
option -XX:MaxnewSize).",
-      "defaultValue": "200",
+      "recommendedValue": "200",
       "displayType": "int",
       "unit": "MB",
       "isOverridable": false,
@@ -2257,7 +2257,7 @@ module.exports =
       "name": "dtnode_heapsize",
       "displayName": "DataNode maximum Java heap size",
       "description": "Maximum Java heap size for DataNode (Java option -Xmx)",
-      "defaultValue": "1024",
+      "recommendedValue": "1024",
       "displayType": "int",
       "unit": "MB",
       "isVisible": false,
@@ -2270,7 +2270,7 @@ module.exports =
       "name": "glusterfs_user",
       "displayName": "glusterfs user",
       "description": "glusterfs user",
-      "defaultValue": "root",
+      "recommendedValue": "root",
       "displayType": "string",
       "isVisible": false,
       "serviceName": "GLUSTERFS",
@@ -2282,7 +2282,7 @@ module.exports =
       "name": "namenode_host",
       "displayName": "NameNode Host",
       "description": "NameNode Host.",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "string",
       "isVisible": false,
       "serviceName": "GLUSTERFS",
@@ -2294,7 +2294,7 @@ module.exports =
       "name": "snamenode_host",
       "displayName": "Secondary NameNode Host",
       "description": "Secondary NameNode Host.",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "string",
       "isVisible": false,
       "serviceName": "GLUSTERFS",
@@ -2307,7 +2307,7 @@ module.exports =
       "name": "hivemetastore_host",
       "displayName": "Hive Metastore hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run Hive Metastore",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -2321,7 +2321,7 @@ module.exports =
     {
       "name": "hive_master_hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "isRequiredByAgent": false,
       "isVisible": false,
@@ -2334,7 +2334,7 @@ module.exports =
       "name": "hive_existing_mysql_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "MySQL",
+      "recommendedValue": "MySQL",
       "description": "Using an existing MySQL database for Hive Metastore",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -2352,7 +2352,7 @@ module.exports =
       "name": "hive_existing_postgresql_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "PostgreSQL",
+      "recommendedValue": "PostgreSQL",
       "description": "Using an existing PostgreSQL database for Hive 
Metastore",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -2370,7 +2370,7 @@ module.exports =
       "name": "hive_existing_oracle_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "Oracle",
+      "recommendedValue": "Oracle",
       "description": "Using an existing Oracle database for Hive Metastore",
       "displayType": "masterHost",
       "isVisible": false,
@@ -2388,7 +2388,7 @@ module.exports =
       "name": "hive_ambari_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "PostgreSQL",
+      "recommendedValue": "PostgreSQL",
       "description": "PostgreSQL will be installed by Ambari",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -2403,7 +2403,7 @@ module.exports =
       "name": "hive_database",
       "displayName": "Hive Database",
       "value": "",
-      "defaultValue": "New PostgreSQL Database",
+      "recommendedValue": "New PostgreSQL Database",
       "options": [
         {
           displayName: 'New PostgreSQL Database',
@@ -2439,7 +2439,8 @@ module.exports =
       "name": "hive_hostname",
       "displayName": "Database Host",
       "description": "Specify the host on which the database is hosted",
-      "defaultValue": "",
+      "savedValue": "",
+      "recommendedValue": "",
       "isReconfigurable": true,
       "displayType": "host",
       "isOverridable": false,
@@ -2455,7 +2456,7 @@ module.exports =
       "name": "hive_existing_mysql_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "host",
       "isOverridable": false,
       "isVisible": false,
@@ -2470,7 +2471,7 @@ module.exports =
       "name": "hive_existing_postgresql_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "host",
       "isOverridable": false,
       "isVisible": false,
@@ -2485,7 +2486,7 @@ module.exports =
       "name": "hive_existing_oracle_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "host",
       "isOverridable": false,
       "isVisible": false,
@@ -2499,7 +2500,7 @@ module.exports =
       "id": "puppet var",
       "name": "hive_ambari_host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayName": "Database Host",
       "description": "Host on which the database will be created by Ambari",
       "isReconfigurable": false,
@@ -2517,7 +2518,7 @@ module.exports =
       "name": "hive_metastore_port",
       "displayName": "Hive metastore port",
       "description": "",
-      "defaultValue": "9083",
+      "recommendedValue": "9083",
       "isReconfigurable": false,
       "displayType": "int",
       "isOverridable": false,
@@ -2531,7 +2532,7 @@ module.exports =
       "name": "hive_lib",
       "displayName": "Hive library",
       "description": "",
-      "defaultValue": "/usr/lib/hive/lib/",
+      "recommendedValue": "/usr/lib/hive/lib/",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
@@ -2545,7 +2546,7 @@ module.exports =
       "name": "hive_dbroot",
       "displayName": "Hive db directory",
       "description": "",
-      "defaultValue": "/usr/lib/hive/lib",
+      "recommendedValue": "/usr/lib/hive/lib",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
@@ -2559,7 +2560,7 @@ module.exports =
       "name": "hive_log_dir",
       "displayName": "Hive Log Dir",
       "description": "Directory for Hive log files",
-      "defaultValue": "/var/log/hive",
+      "recommendedValue": "/var/log/hive",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2573,7 +2574,7 @@ module.exports =
       "name": "hive_pid_dir",
       "displayName": "Hive PID Dir",
       "description": "Directory in which the PID files for Hive processes will 
be created",
-      "defaultValue": "/var/run/hive",
+      "recommendedValue": "/var/run/hive",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2588,7 +2589,7 @@ module.exports =
       "name": "webhcatserver_host",
       "displayName": "WebHCat Server host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run WebHCat Server",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -2603,7 +2604,7 @@ module.exports =
       "name": "hcat_log_dir",
       "displayName": "WebHCat Log Dir",
       "description": "Directory for WebHCat log files",
-      "defaultValue": "/var/log/webhcat",
+      "recommendedValue": "/var/log/webhcat",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2617,7 +2618,7 @@ module.exports =
       "name": "hcat_pid_dir",
       "displayName": "WebHCat PID Dir",
       "description": "Directory in which the PID files for WebHCat processes 
will be created",
-      "defaultValue": "/var/run/webhcat",
+      "recommendedValue": "/var/run/webhcat",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2632,7 +2633,7 @@ module.exports =
       "name": "oozieserver_host",
       "displayName": "Oozie Server host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The hosts that have been assigned to run Oozie Server",
       "displayType": "masterHosts",
       "isOverridable": false,
@@ -2649,7 +2650,7 @@ module.exports =
       "name": "oozie_existing_oracle_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "Oracle",
+      "recommendedValue": "Oracle",
       "description": "Using an existing Oracle database for Oozie Metastore",
       "displayType": "masterHost",
       "isVisible": false,
@@ -2668,7 +2669,7 @@ module.exports =
       "name": "oozie_existing_postgresql_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "PostgreSQL",
+      "recommendedValue": "PostgreSQL",
       "description": "Using an existing PostgreSQL database for Oozie 
Metastore",
       "displayType": "masterHost",
       "isOverridable": false,
@@ -2686,7 +2687,7 @@ module.exports =
       "name": "oozie_ambari_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "MySQL",
+      "recommendedValue": "MySQL",
       "description": "MySQL will be installed by Ambari",
       "displayType": "masterHost",
       "isVisible": false,
@@ -2702,7 +2703,7 @@ module.exports =
       "name": "oozie_derby_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "Derby",
+      "recommendedValue": "Derby",
       "description": "Using current Derby database for Oozie Metastore",
       "displayType": "masterHost",
       "isVisible": false,
@@ -2719,7 +2720,7 @@ module.exports =
       "name": "oozie_existing_mysql_database",
       "displayName": "Database Type",
       "value": "",
-      "defaultValue": "MySQL",
+      "recommendedValue": "MySQL",
       "description": "Using an existing MySQL database for Oozie Metastore",
       "displayType": "masterHost",
       "isVisible": false,
@@ -2736,7 +2737,7 @@ module.exports =
       "name": "oozie_database",
       "displayName": "Oozie Database",
       "value": "",
-      "defaultValue": "New Derby Database",
+      "recommendedValue": "New Derby Database",
       "options": [
         {
           displayName: 'New Derby Database',
@@ -2779,7 +2780,7 @@ module.exports =
       "name": "oozie_data_dir",
       "displayName": "Oozie Data Dir",
       "description": "Data directory in which the Oozie DB exists",
-      "defaultValue": "",
+      "recommendedValue": "",
       "defaultDirectory": "/hadoop/oozie/data",
       "isReconfigurable": true,
       "displayType": "directory",
@@ -2794,7 +2795,8 @@ module.exports =
     {
       "id": "puppet var",
       "name": "oozie_hostname",
-      "defaultValue": "",
+      "savedValue": "",
+      "recommendedValue": "",
       "displayName": "Database Host",
       "description": "The host where the Oozie database is located",
       "isReconfigurable": true,
@@ -2811,7 +2813,7 @@ module.exports =
       "name": "oozie_existing_mysql_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "host",
       "isVisible": false,
@@ -2826,7 +2828,7 @@ module.exports =
       "name": "oozie_existing_postgresql_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "host",
       "isVisible": false,
@@ -2841,7 +2843,7 @@ module.exports =
       "name": "oozie_existing_oracle_host",
       "displayName": "Database Host",
       "description": "Specify the host on which the existing database is 
hosted",
-      "defaultValue": "",
+      "recommendedValue": "",
       "isOverridable": false,
       "displayType": "host",
       "isVisible": false,
@@ -2855,7 +2857,7 @@ module.exports =
       "id": "puppet var",
       "name": "oozie_ambari_host",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayName": "Database Host",
       "description": "Host on which the database will be created by Ambari",
       "isReconfigurable": false,
@@ -2872,7 +2874,7 @@ module.exports =
       "name": "oozie_log_dir",
       "displayName": "Oozie Log Dir",
       "description": "Directory for oozie logs",
-      "defaultValue": "/var/log/oozie",
+      "recommendedValue": "/var/log/oozie",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2886,7 +2888,7 @@ module.exports =
       "name": "oozie_pid_dir",
       "displayName": "Oozie PID Dir",
       "description": "Directory in which the pid files for oozie processes 
will be created",
-      "defaultValue": "/var/run/oozie",
+      "recommendedValue": "/var/run/oozie",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -2913,7 +2915,7 @@ module.exports =
       "name": "zookeeperserver_hosts",
       "displayName": "ZooKeeper Server hosts",
       "value": "",
-      "defaultValue": "",
+      "recommendedValue": "",
       "description": "The host that has been assigned to run ZooKeeper Server",
       "displayType": "masterHosts",
       "isVisible": true,
@@ -2930,7 +2932,7 @@ module.exports =
       "name": "zk_data_dir",
       "displayName": "ZooKeeper directory",
       "description": "Data directory for ZooKeeper",
-      "defaultValue": "",
+      "recommendedValue": "",
       "defaultDirectory": "/hadoop/zookeeper",
       "isReconfigurable": true,
       "displayType": "directory",
@@ -2945,7 +2947,7 @@ module.exports =
       "name": "tickTime",
       "displayName": "Length of single Tick",
       "description": "The length of a single tick in milliseconds, which is 
the basic time unit used by ZooKeeper",
-      "defaultValue": "2000",
+      "recommendedValue": "2000",
       "displayType": "int",
       "unit": "ms",
       "isOverridable": false,
@@ -2960,7 +2962,7 @@ module.exports =
       "name": "initLimit",
       "displayName": "Ticks to allow for sync at Init",
       "description": "Amount of time, in ticks to allow followers to connect 
and sync to a leader",
-      "defaultValue": "10",
+      "recommendedValue": "10",
       "displayType": "int",
       "isOverridable": false,
       "isVisible": true,
@@ -2974,7 +2976,7 @@ module.exports =
       "name": "syncLimit",
       "displayName": "Ticks to allow for sync at Runtime",
       "description": "Amount of time, in ticks to allow followers to connect",
-      "defaultValue": "5",
+      "recommendedValue": "5",
       "displayType": "int",
       "isOverridable": false,
       "isVisible": true,
@@ -2988,7 +2990,7 @@ module.exports =
       "name": "clientPort",
       "displayName": "Port for running ZK Server",
       "description": "Port for running ZooKeeper server",
-      "defaultValue": "2181",
+      "recommendedValue": "2181",
       "displayType": "int",
       "isOverridable": false,
       "isVisible": true,
@@ -3002,7 +3004,7 @@ module.exports =
       "name": "zk_log_dir",
       "displayName": "ZooKeeper Log Dir",
       "description": "Directory for ZooKeeper log files",
-      "defaultValue": "/var/log/zookeeper",
+      "recommendedValue": "/var/log/zookeeper",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -3017,7 +3019,7 @@ module.exports =
       "name": "zk_pid_dir",
       "displayName": "ZooKeeper PID Dir",
       "description": "Directory in which the pid files for zookeeper processes 
will be created",
-      "defaultValue": "/var/run/zookeeper",
+      "recommendedValue": "/var/run/zookeeper",
       "isReconfigurable": false,
       "displayType": "directory",
       "isOverridable": false,
@@ -3033,7 +3035,7 @@ module.exports =
       "name": "ganglia_conf_dir",
       "displayName": "Ganglia conf directory",
       "description": "",
-      "defaultValue": "/etc/ganglia/hdp",
+      "recommendedValue": "/etc/ganglia/hdp",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
@@ -3048,7 +3050,7 @@ module.exports =
       "name": "falconserver_host",
       "displayName": "Falcon Server",
       "description": "The host that has been assigned to run Falcon Server",
-      "defaultValue": "falcon",
+      "recommendedValue": "falcon",
       "displayType": "masterHost",
       "isVisible": true,
       "isRequiredByAgent": false,
@@ -3061,7 +3063,7 @@ module.exports =
       "name": "falcon_port",
       "displayName": "Falcon server port",
       "description": "Port the Falcon Server listens on",
-      "defaultValue": "15000",
+      "recommendedValue": "15000",
       "isReconfigurable": true,
       "displayType": "int",
       "isVisible": true,
@@ -3075,7 +3077,7 @@ module.exports =
       "name": "falcon_local_dir",
       "displayName": "Falcon data directory",
       "description": "Directory where Falcon data, such as activemq data, is 
stored",
-      "defaultValue": "/hadoop/falcon",
+      "recommendedValue": "/hadoop/falcon",
       "isReconfigurable": true,
       "displayType": "directory",
       "isVisible": true,
@@ -3089,7 +3091,7 @@ module.exports =
       "name": "falcon_store_uri",
       "displayName": "Falcon store URI",
       "description": "Directory where entity definitions are stored",
-      "defaultValue": "file:///hadoop/falcon/store",
+      "recommendedValue": "file:///hadoop/falcon/store",
       "isReconfigurable": true,
       "displayType": "string",
       "isVisible": true,
@@ -3103,7 +3105,7 @@ module.exports =
       "name": "falcon_log_dir",
       "displayName": "Falcon Log Dir",
       "description": "Directory for Falcon logs",
-      "defaultValue": "/var/log/falcon",
+      "recommendedValue": "/var/log/falcon",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -3118,7 +3120,7 @@ module.exports =
       "name": "falcon_pid_dir",
       "displayName": "Falcon PID Dir",
       "description": "Directory in which the pid files for Falcon processes 
will be created",
-      "defaultValue": "/var/run/falcon",
+      "recommendedValue": "/var/run/falcon",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -3133,7 +3135,7 @@ module.exports =
       "name": "falcon.embeddedmq",
       "displayName": "falcon.embeddedmq",
       "description": "Whether embeddedmq is enabled or not.",
-      "defaultValue": "true",
+      "recommendedValue": "true",
       "displayType": "string",
       "isOverridable": false,
       "isVisible": true,
@@ -3148,7 +3150,7 @@ module.exports =
       "name": "falcon.embeddedmq.data",
       "displayName": "falcon.embeddedmq.data",
       "description": "Directory in which embeddedmq data is stored.",
-      "defaultValue": "/hadoop/falcon/embeddedmq/data",
+      "recommendedValue": "/hadoop/falcon/embeddedmq/data",
       "displayType": "directory",
       "isOverridable": false,
       "isVisible": true,
@@ -3163,7 +3165,7 @@ module.exports =
       "name": "falcon.emeddedmq.port",
       "displayName": "falcon.emeddedmq.port",
       "description": "Port that embeddedmq will listen on.",
-      "defaultValue": "61616",
+      "recommendedValue": "61616",
       "displayType": "string",
       "isOverridable": false,
       "isVisible": true,
@@ -3179,7 +3181,7 @@ module.exports =
       "name": "storm_log_dir",
       "displayName": "storm_log_dir",
       "description": "Storm log directory",
-      "defaultValue": "/var/log/storm",
+      "recommendedValue": "/var/log/storm",
       "displayType": "directory",
       "isReconfigurable": true,
       "isVisible": true,
@@ -3193,7 +3195,7 @@ module.exports =
       "name": "storm_pid_dir",
       "displayName": "storm_pid_dir",
       "description": "Storm PID directory",
-      "defaultValue": "/var/run/storm",
+      "recommendedValue": "/var/run/storm",
       "displayType": "directory",
       "isReconfigurable": true,
       "isVisible": true,
@@ -3207,7 +3209,7 @@ module.exports =
       "name": "stormuiserver_host",
       "displayName": "Storm UI Server host",
       "description": "The host that has been assigned to run Storm UI Server",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "masterHost",
       "isReconfigurable": false,
       "isVisible": true,
@@ -3221,7 +3223,7 @@ module.exports =
       "name": "drpcserver_host",
       "displayName": "DRPC Server host",
       "description": "The host that has been assigned to run DRPC Server",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "masterHost",
       "isReconfigurable": false,
       "isVisible": true,
@@ -3235,7 +3237,7 @@ module.exports =
       "name": "supervisor_hosts",
       "displayName": "Supervisor hosts",
       "description": "The host that has been assigned to run Supervisor",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "slaveHosts",
       "isReconfigurable": false,
       "isVisible": true,
@@ -3250,7 +3252,7 @@ module.exports =
       "name": "storm_rest_api_host",
       "displayName": "Storm REST API host",
       "description": "The host that has been assigned to run Storm REST API 
Server",
-      "defaultValue": "",
+      "recommendedValue": "",
       "displayType": "masterHost",
       "isReconfigurable": false,
       "isVisible": true,
@@ -3266,7 +3268,7 @@ module.exports =
       "name": "hbase_conf_dir",
       "displayName": "HBase conf dir",
       "description": "",
-      "defaultValue": "/etc/hbase",
+      "recommendedValue": "/etc/hbase",
       "isRequired": false,
       "displayType": "directory",
       "isVisible": false,
@@ -3281,7 +3283,7 @@ module.exports =
       "name": "proxyuser_group",
       "displayName": "Proxy group for Hive, WebHCat, Oozie and Falcon",
       "description": "",
-      "defaultValue": "users",
+      "recommendedValue": "users",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3297,7 +3299,7 @@ module.exports =
       "name": "ganglia_runtime_dir",
       "displayName": "Ganglia runtime directory",
       "description": "",
-      "defaultValue": "/var/run/ganglia/hdp",
+      "recommendedValue": "/var/run/ganglia/hdp",
       "isReconfigurable": false,
       "displayType": "directory",
       "isVisible": false,
@@ -3311,7 +3313,7 @@ module.exports =
       "name": "hdfs_user",
       "displayName": "HDFS User",
       "description": "User to run HDFS as",
-      "defaultValue": "hdfs",
+      "recommendedValue": "hdfs",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3327,7 +3329,7 @@ module.exports =
       "name": "mapred_user",
       "displayName": "MapReduce User",
       "description": "User to run MapReduce as",
-      "defaultValue": "mapred",
+      "recommendedValue": "mapred",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3343,7 +3345,7 @@ module.exports =
       "name": "yarn_user",
       "displayName": "YARN User",
       "description": "User to run YARN as",
-      "defaultValue": "yarn",
+      "recommendedValue": "yarn",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3359,7 +3361,7 @@ module.exports =
       "name": "hbase_user",
       "displayName": "HBase User",
       "description": "User to run HBase as",
-      "defaultValue": "hbase",
+      "recommendedValue": "hbase",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3375,7 +3377,7 @@ module.exports =
       "name": "hive_user",
       "displayName": "Hive User",
       "description": "User to run Hive as",
-      "defaultValue": "hive",
+      "recommendedValue": "hive",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3391,7 +3393,7 @@ module.exports =
       "name": "hcat_user",
       "displayName": "HCat User",
       "description": "User to run HCatalog as",
-      "defaultValue": "hcat",
+      "recommendedValue": "hcat",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3407,7 +3409,7 @@ module.exports =
       "name": "webhcat_user",
       "displayName": "WebHCat User",
       "description": "User to run WebHCat as",
-      "defaultValue": "hcat",
+      "recommendedValue": "hcat",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3423,7 +3425,7 @@ module.exports =
       "name": "oozie_user",
       "displayName": "Oozie User",
       "description": "User to run Oozie as",
-      "defaultValue": "oozie",
+      "recommendedValue": "oozie",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3439,7 +3441,7 @@ module.exports =
       "name": "falcon_user",
       "displayName": "Falcon User",
       "description": "User to run Falcon as",
-      "defaultValue": "falcon",
+      "recommendedValue": "falcon",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3455,7 +3457,7 @@ module.exports =
       "name": "storm_user",
       "displayName": "Storm User",
       "description": "User to run Storm as",
-      "defaultValue": "storm",
+      "recommendedValue": "storm",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3471,7 +3473,7 @@ module.exports =
       "name": "zk_user",
       "displayName": "ZooKeeper User",
       "description": "User to run ZooKeeper as",
-      "defaultValue": "zookeeper",
+      "recommendedValue": "zookeeper",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3487,7 +3489,7 @@ module.exports =
       "name": "flume_user",
       "displayName": "Flume User",
       "description": "User to run Flume as",
-      "defaultValue": "flume",
+      "recommendedValue": "flume",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3503,7 +3505,7 @@ module.exports =
       "name": "gmetad_user",
       "displayName": "Ganglia User",
       "description": "The user used to run Ganglia",
-      "defaultValue": "nobody",
+      "recommendedValue": "nobody",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,
@@ -3519,7 +3521,7 @@ module.exports =
       "name": "gmond_user",
       "displayName": "Gmond User",
       "description": "The user used to run gmond for Ganglia",
-      "defaultValue": "nobody",
+      "recommendedValue": "nobody",
       "isReconfigurable": false,
       "displayType": "advanced",
       "isOverridable": false,
@@ -3534,7 +3536,7 @@ module.exports =
       "name": "tez_user",
       "displayName": "Tez User",
       "description": "User to run Tez as",
-      "defaultValue": "tez",
+      "recommendedValue": "tez",
       "isReconfigurable": false,
       "displayType": "user",
       "isOverridable": false,

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/mappers/configs/config_versions_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/config_versions_mapper.js 
b/ambari-web/app/mappers/configs/config_versions_mapper.js
index aad5a3b..7ad1e37 100644
--- a/ambari-web/app/mappers/configs/config_versions_mapper.js
+++ b/ambari-web/app/mappers/configs/config_versions_mapper.js
@@ -78,8 +78,8 @@ App.configVersionsMapper = App.QuickDataMapper.create({
                 config_version_id: parsedItem.id,
                 stack_config_property_id: key  + '_' + type
               };
-              property.value = property.default_value = config.properties[key];
-              property.is_final = property.default_is_final = 
!!item.properties_attributes && item.properties_attributes.final[key] === 
"true";
+              property.value = property.recommended_value = 
config.properties[key];
+              property.is_final = property.recommended_is_final = 
!!item.properties_attributes && item.properties_attributes.final[key] === 
"true";
 
               properties.push(property);
               requestedProperties.push(property.id);

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js 
b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 3d24df8..1f269c3 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -26,7 +26,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     file_name: 'StackConfigurations.type',
     description: 'StackConfigurations.property_description',
     value: 'StackConfigurations.property_value',
-    default_value: 'StackConfigurations.property_value',
+    recommended_value: 'StackConfigurations.property_value',
     type: 'StackConfigurations.property_type',
     service_name: 'StackConfigurations.service_name',
     stack_name: 'StackConfigurations.stack_name',
@@ -34,7 +34,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
     property_depended_by: 'StackConfigurations.property_depended_by',
     value_attributes: 'StackConfigurations.property_value_attributes',
     is_final: 'default_is_final',
-    default_is_final: 'default_is_final',
+    recommended_is_final: 'default_is_final',
     supports_final: 'supports_final',
     widget: 'widget',
     /**** ui properties ***/
@@ -52,7 +52,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
         stackItem.configurations.forEach(function(config) {
           var configType = 
App.config.getConfigTagFromFileName(config.StackConfigurations.type);
           config.id = config.StackConfigurations.property_name + '_' + 
configType;
-          config.default_is_final = config.StackConfigurations.final === 
"true";
+          config.recommended_is_final = config.StackConfigurations.final === 
"true";
           config.supports_final = !!configTypeInfo[configType] && 
configTypeInfo[configType].supports.final === "true";
           // Map from /dependencies to property_depended_by
           config.StackConfigurations.property_depended_by = [];

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index a93ab1f..410e849 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -265,6 +265,7 @@ Em.I18n.translations = {
   'common.preview': 'Preview',
   'common.scope': 'Scope',
   'common.clone': 'Clone',
+  'common.removed': 'Removed',
 
   'models.alert_instance.tiggered.verbose': "Occured on {0} <br> Checked on 
{1}",
   'models.alert_definition.triggered.verbose': "Occured on {0}",

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/mixins/common/configs/configs_saver.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js 
b/ambari-web/app/mixins/common/configs/configs_saver.js
index 944133b..acef483 100644
--- a/ambari-web/app/mixins/common/configs/configs_saver.js
+++ b/ambari-web/app/mixins/common/configs/configs_saver.js
@@ -312,13 +312,10 @@ App.ConfigsSaverMixin = Em.Mixin.create({
    * @method saveSiteConfigs
    */
   saveSiteConfigs: function (configs) {
-    //storedConfigs contains custom configs as well
     configs = this.setHiveHostName(configs);
     configs = this.setOozieHostName(configs);
     this.formatConfigValues(configs);
-    var mappedConfigs = 
App.config.excludeUnsupportedConfigs(this.get('configMapping').all(), 
App.Service.find().mapProperty('serviceName'));
-    var allUiConfigs = this.loadUiSideConfigs(mappedConfigs);
-    return configs.concat(allUiConfigs);
+    return configs;
   },
 
   /**
@@ -437,119 +434,6 @@ App.ConfigsSaverMixin = Em.Mixin.create({
     return configs;
   },
 
-  /*********************************** 2.2 ADD DYNAMIC CONFIGS 
********************************/
-  /**
-   * return configs from the UI side
-   * @param configMapping array with configs
-   * @return {Array}
-   * @private
-   * @method loadUiSideConfigs
-   */
-  loadUiSideConfigs: function (configMapping) {
-    var uiConfig = [];
-    var configs = configMapping.filterProperty('foreignKey', null);
-    this.addDynamicProperties(configs);
-    configs.forEach(function (_config) {
-      var valueWithOverrides = 
this.getGlobConfigValueWithOverrides(_config.templateName, _config.value, 
_config.name);
-      if (valueWithOverrides !== null) {
-        uiConfig.pushObject({
-          "id": "site property",
-          "name": _config.name,
-          "value": valueWithOverrides.value,
-          "filename": _config.filename,
-          "overrides": valueWithOverrides.overrides
-        });
-      }
-    }, this);
-    return uiConfig;
-  },
-
-  /**
-   * @param configs
-   * @private
-   * @method addDynamicProperties
-   */
-  addDynamicProperties: function (configs) {
-    var allConfigs = this.get('stepConfigs').findProperty('serviceName', 
this.get('content.serviceName')).get('configs');
-    var templetonHiveProperty = allConfigs.someProperty('name', 
'templeton.hive.properties');
-    if (!templetonHiveProperty && this.get('content.serviceName') === 'HIVE') {
-      configs.pushObject({
-        "name": "templeton.hive.properties",
-        "templateName": ["hive.metastore.uris"],
-        "foreignKey": null,
-        "value": 
"hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive.metastore.sasl.enabled=yes,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse",
-        "filename": "webhcat-site.xml"
-      });
-    }
-  },
-
-  /**
-   * return config value
-   * @param templateName
-   * @param expression
-   * @param name
-   * @return {Object}
-   * example: <code>{
-   *   value: '...',
-   *   overrides: {
-   *    'value1': [h1, h2],
-   *    'value2': [h3]
-   *   }
-   * }</code>
-   * @private
-   * @method getGlobConfigValueWithOverrides
-   */
-  getGlobConfigValueWithOverrides: function (templateName, expression, name) {
-    var express = expression.match(/<(.*?)>/g);
-    var value = expression;
-    var overrideHostToValue = {};
-    if (express != null) {
-      express.forEach(function (_express) {
-        var index = parseInt(_express.match(/\[([\d]*)(?=\])/)[1]);
-        var globalObj = this.get('allConfigs').findProperty('name', 
templateName[index]);
-        if (globalObj) {
-          var globOverride = globalObj.overrides;
-          if (globOverride != null) {
-            for (var ov in globOverride) {
-              globOverride[ov].forEach(function (host) {
-                var replacedVal = (host in overrideHostToValue) ? 
overrideHostToValue[host] : expression;
-                overrideHostToValue[host] = 
App.config.replaceConfigValues(name, _express, replacedVal, ov);
-              }, this);
-            }
-          }
-          value = App.config.replaceConfigValues(name, _express, expression, 
globalObj.value);
-        } else {
-          value = null;
-        }
-      }, this);
-    }
-    return this.getValueWithOverrides(value, overrideHostToValue)
-  },
-
-  /**
-   * @param value
-   * @param overrideHostToValue
-   * @returns {{value: *, overrides: {}}}
-   * @private
-   * @method getValueWithOverrides
-   */
-  getValueWithOverrides: function (value, overrideHostToValue) {
-    var valueWithOverrides = {
-      value: value,
-      overrides: {}
-    };
-    if (!jQuery.isEmptyObject(overrideHostToValue)) {
-      for (var host in overrideHostToValue) {
-        var hostVal = overrideHostToValue[host];
-        if (!(hostVal in valueWithOverrides.overrides)) {
-          valueWithOverrides.overrides[hostVal] = [];
-        }
-        valueWithOverrides.overrides[hostVal].push(host);
-      }
-    }
-    return valueWithOverrides;
-  },
-
   /*********************************** 3. GENERATING JSON TO SAVE 
*****************************/
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/mixins/common/configs/enhanced_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js 
b/ambari-web/app/mixins/common/configs/enhanced_configs.js
index 853a1ab..5d67ee7 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -33,10 +33,29 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
    * @type {boolean}
    */
   hasChangedDependencies: function() {
-    return App.get('isClusterSupportsEnhancedConfigs') && 
this.get('_dependentConfigValues.length') > 0;
+    return App.get('isClusterSupportsEnhancedConfigs') && 
this.get('isControllerSupportsEnhancedConfigs') && 
this.get('_dependentConfigValues.length') > 0;
   }.property('_dependentConfigValues.length'),
 
   /**
+   * defines is block with changed dependent configs should be shown
+   * rely on controller
+   * @type {boolean}
+   */
+  isControllerSupportsEnhancedConfigs: function() {
+    return 
['wizardStep7Controller','mainServiceInfoConfigsController'].contains(this.get('name'));
+  }.property('name'),
+
+  /**
+   * defines if initialValue of config can be used on current controller
+   * if not savedValue is used instead
+   * @type {boolean}
+   */
+  useInitialValue: function() {
+    ['wizardStep7Controller'].contains(this.get('name'));
+  }.property('name'),
+
+
+  /**
    * message fro alert box for dependent configs
    * @type {string}
    */
@@ -121,7 +140,11 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
   },
 
   onConfigGroupChangeForEnhanced: function() {
-    this.clearDependentConfigs();
+    if (this.get('name') === 'mainServiceInfoConfigsController') {
+      this.clearDependentConfigs();
+    } else {
+      this.set('groupsToSave', {});
+    }
     this.get('dependentServiceNames').forEach(function(serviceName) {
       var defaultGroup = 
this.get('dependentConfigGroups').filterProperty('service.serviceName', 
serviceName).findProperty('isDefault');
       this.get('groupsToSave')[serviceName] = defaultGroup.get('name');
@@ -389,7 +412,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
       var serviceName = service.get('serviceName');
       var stepConfig = this.get('stepConfigs').findProperty('serviceName', 
serviceName);
       if (stepConfig) {
-
+        var initialValue;
         var configProperties = stepConfig ? 
stepConfig.get('configs').filterProperty('filename', 
App.config.getOriginalFileName(key)) : [];
 
         var group = this.getGroupForService(serviceName);
@@ -401,14 +424,28 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
           var override = (notDefaultGroup && group && cp && 
cp.get('overrides')) ? cp.get('overrides').findProperty('group.name', 
group.get('name')) : null;
 
           var value = override ? override.get('value') : cp && cp.get('value');
-          var defaultValue = override ? override.get('defaultValue') : cp && 
cp.get('defaultValue');
+
+          if (this.get('useInitialValue')) {
+            initialValue = override ? override.get('initialValue') : cp && 
cp.get('initialValue');
+          } else {
+            initialValue = override ? override.get('savedValue') : cp && 
cp.get('savedValue');
+          }
+
+
+          initialValue = Em.isNone(initialValue) ? value : initialValue;
           var recommendedValue = configObject[key].properties[propertyName];
 
           var isNewProperty = (!notDefaultGroup && Em.isNone(cp)) || 
(notDefaultGroup && group && Em.isNone(override));
 
-          if (!updateOnlyBoundaries && 
!parentPropertiesNames.contains(propertyName) && defaultValue != 
recommendedValue) { //on first initial request we don't need to change values
+          var parsedInit = parseFloat(initialValue);
+          var parsedRecommended = parseFloat(recommendedValue);
+          if (!isNaN(parsedInit) && !isNaN(parsedRecommended)) {
+            initialValue = parsedInit.toString();
+            recommendedValue = parsedRecommended.toString();
+          }
+          if (!updateOnlyBoundaries && 
!parentPropertiesNames.contains(propertyName) && initialValue != 
recommendedValue) { //on first initial request we don't need to change values
             if (dependentProperty) {
-              Em.set(dependentProperty, 'value', defaultValue);
+              Em.set(dependentProperty, 'value', initialValue);
               Em.set(dependentProperty, 'recommendedValue', recommendedValue);
               Em.set(dependentProperty, 'toDelete', false);
               Em.set(dependentProperty, 'toAdd', isNewProperty);
@@ -423,7 +460,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 fileName: key,
                 propertyName: propertyName,
                 configGroup: group ? group.get('name') : 
service.get('displayName') + " Default",
-                value: defaultValue,
+                value: initialValue,
                 parentConfigs: parentPropertiesNames,
                 serviceName: serviceName,
                 allowChangeGroup: serviceName != 
this.get('content.serviceName') && !this.get('selectedConfigGroup.isDefault'),
@@ -448,21 +485,21 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
            * properties that wasn't changed while recommendations
            */
 
-          if ((defaultValue == recommendedValue) || (Em.isNone(defaultValue) 
&& Em.isNone(recommendedValue))) {
+          if ((initialValue == recommendedValue) || (Em.isNone(initialValue) 
&& Em.isNone(recommendedValue))) {
             /** if recommended value same as default we shouldn't show it in 
popup **/
             if (notDefaultGroup) {
               if (override) {
                 if (override.get('isNotSaved')) {
                   cp.get('overrides').removeObject(override);
                 } else {
-                  override.set('value', defaultValue);
+                  override.set('value', initialValue);
                 }
                 if (dependentProperty) {
                   
this.get('_dependentConfigValues').removeObject(dependentProperty);
                 }
               }
             } else {
-              cp.set('value', defaultValue);
+              cp.set('value', initialValue);
               if (dependentProperty) {
                 
this.get('_dependentConfigValues').removeObject(dependentProperty);
               }
@@ -508,7 +545,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
                 self.get('_dependentConfigValues').pushObject({
                   saveRecommended: true,
                   saveRecommendedDefault: true,
-                  propertyValue: cp && cp.get('defaultValue'),
+                  propertyValue: cp && (cp.get('useInitialValue') ? 
cp.get('initialValue') : cp.get('savedValue')),
                   toDelete: true,
                   toAdd: false,
                   isDeleted: true,
@@ -568,13 +605,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
             name: Em.get(propertyToAdd, 'propertyName'),
             displayName: Em.get(propertyToAdd, 'propertyName'),
             value: Em.get(propertyToAdd, 'recommendedValue'),
-            defaultValue: Em.get(propertyToAdd, 'recommendedValue'),
+            recommendedValue: Em.get(propertyToAdd, 'recommendedValue'),
+            savedValue: null,
             category: 'Advanced ' + Em.get(propertyToAdd, 'fileName'),
             serviceName: stepConfigs.get('serviceName'),
             filename: App.config.getOriginalFileName(Em.get(propertyToAdd, 
'fileName')),
             isNotSaved: !Em.get(propertyToAdd, 'isDeleted'),
-            isRequired: true,
-            forceUpdate: true
+            isRequired: true
           });
           stepConfigs.get('configs').pushObject(addedProperty);
           addedProperty.validate();
@@ -652,16 +689,23 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
         if (propertyToUpdate) {
           var valueToSave = propertyToUpdate.saveRecommended ? 
propertyToUpdate.recommendedValue : propertyToUpdate.value;
           if (!selectedGroup || selectedGroup.get('isDefault')) {
-            cp.set('value', valueToSave);
-            cp.set('forceUpdate', true);
+            if (propertyToUpdate.saveRecommended || cp.get('value') == 
propertyToUpdate.recommendedValue) {
+              cp.set('value', valueToSave);
+            }
+            cp.set('recommendedValue', propertyToUpdate.recommendedValue);
           } else {
             if (stepConfigs.get('serviceName') !== 
this.get('content.serviceName')) {
-              cp.set('value', cp.get('defaultValue'));
-              cp.set('forceUpdate', true);
+              if (propertyToUpdate.saveRecommended || cp.get('value') == 
propertyToUpdate.recommendedValue) {
+                cp.set('value', this.get('useInitialValue') ? 
cp.get('initialValue') : cp.get('savedValue'));
+              }
+              cp.set('recommendedValue', propertyToUpdate.recommendedValue);
             }
             var overriddenConfig = cp.get('overrides') && 
cp.get('overrides').findProperty('group.name', selectedGroup.get('name'));
             if (overriddenConfig) {
-              overriddenConfig.set('value', valueToSave);
+              if (propertyToUpdate.saveRecommended || 
overriddenConfig.get('value') == propertyToUpdate.recommendedValue) {
+                overriddenConfig.set('value', valueToSave);
+              }
+              overriddenConfig.set('recommendedValue', 
propertyToUpdate.recommendedValue);
             }
           }
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/models/configs/config_property.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/config_property.js 
b/ambari-web/app/models/configs/config_property.js
index facaaf4..31ba3f6 100644
--- a/ambari-web/app/models/configs/config_property.js
+++ b/ambari-web/app/models/configs/config_property.js
@@ -36,18 +36,19 @@ App.ConfigProperty = DS.Model.extend({
    * @property {string}
    */
   fileName: DS.attr('string'),
+
   /**
    * value of property
-   * by default is same as <code>defaultValue<code>
+   * by default is same as <code>savedValue<code>
    * @property {string}
    */
   value: DS.attr('string'),
 
   /**
-   * default value of property
+   * saved value of property
    * @property {string}
    */
-  defaultValue: DS.attr('string'),
+  savedValue: DS.attr('string'),
 
   /**
    * recommended value of property
@@ -62,11 +63,17 @@ App.ConfigProperty = DS.Model.extend({
    */
   isFinal: DS.attr('boolean', {defaultValue: false}),
 
+
+  /**
+   * value saved on cluster
+   */
+  savedIsFinal: DS.attr('boolean', {defaultValue: false}),
+
   /**
-   * defines if property is final by default
+   * value recommendedFrom Server
    * @property {boolean}
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
   /**
    * link to config version
@@ -224,9 +231,9 @@ App.ConfigProperty = DS.Model.extend({
    */
   isNotDefaultValue: function () {
     return this.get('isEditable')
-      && ((this.get('defaultValue') != null && this.get('value') !== 
this.get('defaultValue'))
-      || (this.get('supportsFinal') && this.get('isFinal') !== 
this.get('defaultIsFinal')));
-  }.property('value', 'defaultValue', 'isEditable', 'isFinal', 
'defaultIsFinal'),
+      && (!Em.isNone(this.get('savedValue') && this.get('value') !== 
this.get('savedValue'))
+      || (this.get('supportsFinal') && !Em.isNone(this.get('savedIsFinal')) && 
this.get('isFinal') !== this.get('savedIsFinal')));
+  }.property('value', 'savedValue', 'isEditable', 'isFinal', 'savedIsFinal'),
 
   /**
    * opposite to <code>hasErrors<code>

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/models/configs/objects/service_config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/objects/service_config.js 
b/ambari-web/app/models/configs/objects/service_config.js
index fe4c8f0..e852c56 100644
--- a/ambari-web/app/models/configs/objects/service_config.js
+++ b/ambari-web/app/models/configs/objects/service_config.js
@@ -66,8 +66,7 @@ App.ServiceConfig = Ember.Object.extend({
     return requiredByAgent.someProperty('isNotSaved') ||
            requiredByAgent.someProperty('isNotDefaultValue') ||
            requiredByAgent.someProperty('isOverrideChanged') ||
-           this.get('configs.length') !== this.get('initConfigsLength') ||
-           (this.get('configs.length') === this.get('initConfigsLength') && 
this.get('configs').someProperty('defaultValue', null));
+           this.get('configs.length') !== this.get('initConfigsLength');
   }.property('[email protected]', 
'[email protected]', 'configs.length', '[email protected]')
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/models/configs/objects/service_config_property.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/objects/service_config_property.js 
b/ambari-web/app/models/configs/objects/service_config_property.js
index c8971ec..6abf4ac 100644
--- a/ambari-web/app/models/configs/objects/service_config_property.js
+++ b/ambari-web/app/models/configs/objects/service_config_property.js
@@ -24,9 +24,61 @@ App.ServiceConfigProperty = Em.Object.extend({
   id: '', //either 'puppet var' or 'site property'
   name: '',
   displayName: '',
+
+  /**
+   * value that is shown on IU
+   * and is changing by user
+   * @type {String|null}
+   */
   value: '',
+
+  /**
+   * value that is saved on cluster configs
+   * and stored in /api/v1/clusters/{name}/configurations
+   * @type {String|null}
+   */
+  savedValue: null,
+
+  /**
+   * value that is returned from server as recommended
+   * or stored on stack
+   * @type {String|null}
+   */
+  recommendedValue: null,
+
+  /**
+   * initial value of config. if value is saved it will be initial
+   * otherwise first recommendedValue will be initial
+   * @type {String|null}
+   */
+  initialValue: null,
+
+  /**
+   * value that is shown on IU
+   * and is changing by user
+   * @type {boolean}
+   */
+  isFinal: false,
+
+  /**
+   * value that is saved on cluster configs api
+   * @type {boolean}
+   */
+  savedIsFinal: null,
+
+  /**
+   * value that is returned from server as recommended
+   * or stored on stack
+   * @type {boolean}
+   */
+  recommendedIsFinal: null,
+
+  /**
+   * @type {boolean}
+   */
+  supportsFinal: false,
+
   retypedPassword: '',
-  defaultValue: '',
   defaultDirectory: '',
   description: '',
   displayType: 'string', // string, digits, number, directories, custom
@@ -36,12 +88,9 @@ App.ServiceConfigProperty = Em.Object.extend({
   isReconfigurable: true, // by default a config property is reconfigurable
   isEditable: true, // by default a config property is editable
   isNotEditable: Ember.computed.not('isEditable'),
-  isFinal: false,
   hideFinalIcon: function () {
     return (!this.get('isFinal'))&& this.get('isNotEditable');
   }.property('isFinal', 'isNotEditable'),
-  defaultIsFinal: false,
-  supportsFinal: false,
   isVisible: true,
   isMock: false, // mock config created created only to displaying
   isRequiredByAgent: true, // Setting it to true implies property will be 
stored in configuration
@@ -84,18 +133,11 @@ App.ServiceConfigProperty = Em.Object.extend({
   rowStyleClass: null, // CSS-Class to be applied on the row showing this 
config
   showAsTextBox: false,
 
-  forceUpdate: false,
-  /**
-   * value that is returned from server as recommended
-   * @type {String}
-   */
-  recommendedValue: null,
-
   /**
    * @type {boolean}
    */
   recommendedValueExists: function () {
-    return !Em.isNone(this.get('recommendedValue'));
+    return !Em.isNone(this.get('recommendedValue')) && 
this.get('isRequiredByAgent') && !this.get('cantBeUndone');
   }.property('recommendedValue'),
 
   /**
@@ -148,9 +190,13 @@ App.ServiceConfigProperty = Em.Object.extend({
       this.set('retypedPassword', this.get('value'));
     }
     if ((this.get('id') === 'puppet var') && this.get('value') == '') {
-      this.set('value', this.get('defaultValue'));
+      if (this.get('savedValue')) {
+        this.set('value', this.get('savedValue'));
+      } else if (this.get('recommendedValue')) {
+        this.set('value', this.get('recommendedValue'));
+      }
     }
-    // TODO: remove mock data
+    this.set('initialValue', this.get('value'));
   },
 
   /**
@@ -159,18 +205,18 @@ App.ServiceConfigProperty = Em.Object.extend({
    */
   isNotDefaultValue: function () {
     var value = this.get('value');
-    var defaultValue = this.get('defaultValue');
+    var savedValue = this.get('savedValue');
     var supportsFinal = this.get('supportsFinal');
     var isFinal = this.get('isFinal');
-    var defaultIsFinal = this.get('defaultIsFinal');
+    var savedIsFinal = this.get('savedIsFinal');
     // ignore precision difference for configs with type of `float` which 
value may ends with 0
     // e.g. between 0.4 and 0.40
     if (this.get('stackConfigProperty') && 
this.get('stackConfigProperty.valueAttributes.type') == 'float') {
-      defaultValue = '' + parseFloat(defaultValue);
+      savedValue = !Em.isNone(savedValue) ? '' + parseFloat(savedValue) : null;
       value = '' + parseFloat(value);
     }
-    return (defaultValue != null && value !== defaultValue) || (supportsFinal 
&& isFinal !== defaultIsFinal);
-  }.property('value', 'defaultValue', 'isEditable', 'isFinal', 
'defaultIsFinal'),
+    return (savedValue != null && value !== savedValue) || (supportsFinal && 
!Em.isNone(savedIsFinal) && isFinal !== savedIsFinal);
+  }.property('value', 'savedValue', 'isEditable', 'isFinal', 'savedIsFinal'),
 
   /**
    * Don't show "Undo" for hosts on Installer Step7

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/models/configs/stack_config_property.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/stack_config_property.js 
b/ambari-web/app/models/configs/stack_config_property.js
index 5f66049..15dcfc2 100644
--- a/ambari-web/app/models/configs/stack_config_property.js
+++ b/ambari-web/app/models/configs/stack_config_property.js
@@ -62,7 +62,7 @@ App.StackConfigProperty = DS.Model.extend({
    * after cluster created is taken from cluster properties value
    * @property {string}
    */
-  defaultValue: DS.attr('string'),
+  recommendedValue: DS.attr('string'),
 
   /**
    * defines if property support usage <code>isFinal<code> flag
@@ -71,10 +71,10 @@ App.StackConfigProperty = DS.Model.extend({
   supportsFinal: DS.attr('boolean', {defaultValue: true}),
 
   /**
-   * defines the defaultValue value of <code>isFinal<code> value
+   * defines the recommended value of <code>isFinal<code> value
    * @property {boolean}
    */
-  defaultIsFinal: DS.attr('boolean', {defaultValue: false}),
+  recommendedIsFinal: DS.attr('boolean', {defaultValue: false}),
 
   /**
    * type of property
@@ -172,7 +172,7 @@ App.StackConfigProperty = DS.Model.extend({
   value: DS.attr('string'),
 
   /**
-   * config property isFinal value same as defaultIsFinal
+   * config property isFinal value same as recommendedIsFinal
    * @property {boolean}
    */
   isFinal: DS.attr('boolean', {defaultValue: false})

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs 
b/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
index c42d50d..d53a133 100644
--- a/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
+++ b/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
@@ -46,7 +46,13 @@
         </td>
         <td>{{config.fileName}}</td>
         <td>{{config.value}}</td>
-        <td>{{config.recommendedValue}}</td>
+        <td>
+          {{#if config.isDeleted}}
+            {{t common.removed}}
+          {{else}}
+            {{config.recommendedValue}}
+          {{/if}}
+        </td>
       </tr>
     {{/each}}
     </tbody>

http://git-wip-us.apache.org/repos/asf/ambari/blob/07616603/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index 5184051..d1df556 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -151,7 +151,6 @@ App.config = Em.Object.create({
                 "name": "content",
                 "displayName": type.endsWith('-env') ? type + ' template' : 
"content",
                 "value": "",
-                "defaultValue": "",
                 "description": type + " properties",
                 "displayType": "content",
                 "isOverridable": true,
@@ -231,7 +230,7 @@ App.config = Em.Object.create({
   handleSpecialProperties: function (config) {
     if (Em.get(config, 'displayType') === 'int' && /\d+m$/.test(Em.get(config, 
'value') )) {
       Em.set(config, 'value', Em.get(config, 'value').slice(0, Em.get(config, 
'value.length') - 1));
-      Em.set(config, 'defaultValue', Em.get(config, 'value'));
+      Em.set(config, 'savedValue', Em.get(config, 'value'));
     }
   },
 
@@ -311,7 +310,8 @@ App.config = Em.Object.create({
         var serviceConfigObj = App.ServiceConfig.create({
           name: index,
           value: value,
-          defaultValue: value,
+          savedValue: value,
+          recommendedValue: advancedConfig ? Em.get(advancedConfig, 
'recommencedValue') : null,
           filename: filename,
           isUserProperty: !advancedConfig,
           isVisible: !!service,
@@ -319,7 +319,8 @@ App.config = Em.Object.create({
           isReconfigurable: true,
           isRequired: isAdvanced,
           isFinal: finalAttributes[index] === "true",
-          defaultIsFinal: finalAttributes[index] === "true",
+          savedIsFinal: finalAttributes[index] === "true",
+          recommendedIsFinal: advancedConfig ? Em.get(advancedConfig, 
'recommendedIsFinal') : null,
           showLabel: true,
           serviceName: serviceName,
           belongsToService: [],
@@ -405,13 +406,13 @@ App.config = Em.Object.create({
     if (serviceConfigObj.get('displayType') == 'directories' && 
(serviceConfigObj.get('category') == 'DataNode' || 
serviceConfigObj.get('category') == 'NameNode')) {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs.join(','));
-      serviceConfigObj.set('defaultValue', dirs.join(','));
+      serviceConfigObj.set('savedValue', dirs.join(','));
     }
 
     if (serviceConfigObj.get('displayType') == 'directory' && 
serviceConfigObj.get('category') == 'SNameNode') {
       var dirs = serviceConfigObj.get('value').split(',').sort();
       serviceConfigObj.set('value', dirs[0]);
-      serviceConfigObj.set('defaultValue', dirs[0]);
+      serviceConfigObj.set('savedValue', dirs[0]);
     }
 
     if (serviceConfigObj.get('displayType') == 'masterHosts') {
@@ -515,7 +516,8 @@ App.config = Em.Object.create({
         if (preDefined && stored) {
           configData = preDefined;
           configData.value = stored.value;
-          configData.defaultValue = stored.defaultValue;
+          configData.savedValue = stored.savedValue;
+          configData.recommendedValue = stored.recommendedValue;
           configData.overrides = stored.overrides;
           configData.displayName = stored.displayName;
           configData.name = stored.name;
@@ -565,7 +567,8 @@ App.config = Em.Object.create({
           var storedCfg = storedCfgs.findProperty('filename', cfg.filename);
           if (storedCfg) {
             configData.value = storedCfg.value;
-            configData.defaultValue = storedCfg.defaultValue;
+            configData.recommendedValue = storedCfg.recommendedValue;
+            configData.savedValue = storedCfg.savedValue;
             configData.overrides = storedCfg.overrides;
             configData.filename = storedCfg.filename;
             configData.description = storedCfg.description;
@@ -599,7 +602,7 @@ App.config = Em.Object.create({
     } else {
       configData.value = advanced ? advanced.value : configData.value;
     }
-    configData.defaultValue = configData.value;
+    configData.recommendedValue = configData.value;
     configData.filename = advanced ? advanced.filename : configData.filename;
     configData.displayName = advanced && advanced.displayName ? 
advanced.displayName : configData.displayName;
     configData.name = advanced && advanced.name ? advanced.name : 
configData.name;
@@ -645,7 +648,7 @@ App.config = Em.Object.create({
             _config.id = "site property";
             _config.category = configCategory;
             _config.displayName = _config.displayName || _config.name;
-            _config.defaultValue = _config.value;
+            _config.recommendedValue = _config.value;
             // make all advanced configs optional and populated by default
             /*
              * if (/\${.*}/.test(_config.value) || (service.serviceName !==
@@ -685,10 +688,9 @@ App.config = Em.Object.create({
    * @param allSelectedServiceNames
    * @param installedServiceNames
    * @param localDB
-   * @param recommended
    * @return {Array}
    */
-  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, 
installedServiceNames, localDB, recommended) {
+  renderConfigs: function (configs, storedConfigs, allSelectedServiceNames, 
installedServiceNames, localDB) {
     var renderedServiceConfigs = [];
     var services = [];
 
@@ -713,15 +715,15 @@ App.config = Em.Object.create({
           var hiveMetastoreUrisConfig = configs.filterProperty('filename', 
'hive-site.xml').findProperty('name', 'hive.metastore.uris');
           var clientPortConfig = configs.filterProperty('filename', 
'zoo.cfg.xml').findProperty('name', 'clientPort');
           var dependencies = {
-            'hive.metastore.uris': hiveMetastoreUrisConfig && 
hiveMetastoreUrisConfig.defaultValue,
-            'clientPort': clientPortConfig && clientPortConfig.defaultValue
+            'hive.metastore.uris': hiveMetastoreUrisConfig && 
hiveMetastoreUrisConfig.recommendedValue,
+            'clientPort': clientPortConfig && clientPortConfig.recommendedValue
           };
           configPropertyHelper.initialValue(serviceConfigProperty, localDB, 
dependencies);
         }
         if (storedConfigs && storedConfigs.filterProperty('name', 
_config.name).length && !!_config.filename) {
           var storedConfig = storedConfigs.filterProperty('name', 
_config.name).findProperty('filename', _config.filename);
           if (storedConfig) {
-            serviceConfigProperty.set('defaultValue', 
storedConfig.defaultValue);
+            serviceConfigProperty.set('recommendedValue', 
storedConfig.recommendedValue);
             serviceConfigProperty.set('value', storedConfig.value);
           }
         }
@@ -731,28 +733,6 @@ App.config = Em.Object.create({
       }, this);
       var serviceConfig = this.createServiceConfig(service.get('serviceName'));
       serviceConfig.set('showConfig', service.get('showConfig'));
-
-      // Use calculated default values for some configs
-      var recommendedDefaults = {};
-      if (!storedConfigs && service.get('configTypes')) {
-        Object.keys(service.get('configTypes')).forEach(function (type) {
-          if (!recommended || !recommended[type]) {
-            return;
-          }
-          var defaults = recommended[type].properties;
-          for (var name in defaults) {
-            var config = configsByService.findProperty('name', name);
-            if (!config) {
-              continue;
-            }
-            recommendedDefaults[name] = defaults[name];
-            config.set('value', defaults[name]);
-            config.set('defaultValue', defaults[name]);
-            config.set('recommendedValue', defaults[name]);
-            config.set('forceUpdate', true);
-          }
-        });
-      }
       serviceConfig.set('configs', configsByService);
       renderedServiceConfigs.push(serviceConfig);
     }, this);
@@ -770,9 +750,9 @@ App.config = Em.Object.create({
       break;
     }
     try {
-      if (typeof(config.defaultValue) == "string" && 
config.defaultValue.indexOf("{firstHost}") >= 0) {
+      if (typeof(config.recommendedValue) == "string" && 
config.recommendedValue.indexOf("{firstHost}") >= 0) {
         serviceConfigProperty.set('value', 
serviceConfigProperty.value.replace(new RegExp("{firstHost}"), firstHost));
-        serviceConfigProperty.set('defaultValue', 
serviceConfigProperty.defaultValue.replace(new RegExp("{firstHost}"), 
firstHost));
+        serviceConfigProperty.set('recommendedValue', 
serviceConfigProperty.recommendedValue.replace(new RegExp("{firstHost}"), 
firstHost));
       }
     } catch (err) {
       // Nothing to worry about here, most likely trying indexOf on a 
non-string
@@ -989,7 +969,7 @@ App.config = Em.Object.create({
       description: item.property_description,
       isVisible: item.isVisible,
       isFinal: item.final === "true",
-      defaultIsFinal: item.final === "true",
+      recommendedIsFinal: item.final === "true",
       filename: item.filename || fileName
     };
 
@@ -1145,7 +1125,7 @@ App.config = Em.Object.create({
     var propertyObject = {
       name: propertyName,
       displayName: propertyName,
-      defaultValue: propertyValue,
+      savedValue: propertyValue,
       value: propertyValue,
       displayType: stringUtils.isSingleLine(propertyValue) ? 'advanced' : 
'multiLine',
       isSecureConfig: false,
@@ -1219,7 +1199,7 @@ App.config = Em.Object.create({
         if (Em.isNone(cFromMapped)) {
           var cFromAll = allConfigs.findProperty('name', cfk);
           if (!Em.isNone(cFromAll)) {
-            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 
'defaultValue') : Em.get(cFromAll, 'value');
+            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 
'recommendedValue') : Em.get(cFromAll, 'value');
             config.value = config.value.replace(_fkValue, globalValue);
           }
         }
@@ -1244,7 +1224,7 @@ App.config = Em.Object.create({
             config.noMatchSoSkipThisConfig = true;
           }
           else {
-            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 
'defaultValue') : Em.get(cFromAll, 'value');
+            globalValue = Em.get(cFromAll, 'value') === '' ? Em.get(cFromAll, 
'recommendedValue') : Em.get(cFromAll, 'value');
             config._name = config.name.replace(_fkName, globalValue);
           }
         }
@@ -1305,7 +1285,8 @@ App.config = Em.Object.create({
           this.getOriginalConfigAttribute(stored, 'displayName', 
advancedConfigs) : App.format.normalizeName(stored.name),
         serviceName: stored.serviceName,
         value: stored.value,
-        defaultValue: stored.defaultValue,
+        savedValue: stored.savedValue,
+        recommendedValue: stored.recommendedValue,
         displayType: skipAttributeChanges.displayType.contains(stored.name) ?
           this.getOriginalConfigAttribute(stored, 'displayType', 
advancedConfigs) :
           (stringUtils.isSingleLine(stored.value) ? 'advanced' : 'multiLine'),
@@ -1317,7 +1298,7 @@ App.config = Em.Object.create({
         isRequired: false,
         isVisible: stored.isVisible,
         isFinal: stored.isFinal,
-        defaultIsFinal: stored.defaultIsFinal,
+        savedIsFinal: stored.savedIsFinal,
         supportsFinal: stored.supportsFinal,
         showLabel: stored.showLabel !== false,
         category: stored.category
@@ -1341,7 +1322,6 @@ App.config = Em.Object.create({
       "name": "capacity-scheduler",
       "displayName": "Capacity Scheduler",
       "value": "",
-      "defaultValue": "",
       "description": "Capacity Scheduler properties",
       "displayType": "custom",
       "isOverridable": true,
@@ -1366,22 +1346,30 @@ App.config = Em.Object.create({
    */
   fileConfigsIntoTextarea: function (configs, filename, configsToSkip) {
     var fileConfigs = configs.filterProperty('filename', filename);
-    var value = '';
-    var defaultValue = '';
+    var value = '', savedValue = '', recommendedValue = '';
     var template = this.get('complexConfigsTemplate').findProperty('filename', 
filename);
     var complexConfig = $.extend({}, template);
     if (complexConfig) {
       fileConfigs.forEach(function (_config) {
         if (!(configsToSkip && configsToSkip.someProperty('name', 
_config.name))) {
           value += _config.name + '=' + _config.value + '\n';
-          defaultValue += _config.name + '=' + _config.defaultValue + '\n';
+          if (!Em.isNone(_config.savedValue)) {
+            savedValue += _config.name + '=' + _config.savedValue + '\n';
+          }
+          if (!Em.isNone(_config.recommendedValue)) {
+            recommendedValue += _config.name + '=' + _config.recommendedValue 
+ '\n';
+          }
         }
       }, this);
       var isFinal = fileConfigs.someProperty('isFinal', true);
+      var savedIsFinal = fileConfigs.someProperty('savedIsFinal', true);
+      var recommendedIsFinal = fileConfigs.someProperty('recommendedIsFinal', 
true);
       complexConfig.value = value;
-      complexConfig.defaultValue = defaultValue;
+      complexConfig.savedValue = savedValue;
+      complexConfig.recommendedValue = recommendedValue;
       complexConfig.isFinal = isFinal;
-      complexConfig.defaultIsFinal = isFinal;
+      complexConfig.savedIsFinal = savedIsFinal;
+      complexConfig.recommendedIsFinal = recommendedIsFinal;
       configs = configs.filter(function (_config) {
         return _config.filename !== filename || (configsToSkip && 
configsToSkip.someProperty('name', _config.name));
       });
@@ -1413,7 +1401,7 @@ App.config = Em.Object.create({
             id: configsTextarea.get('id'),
             name: name,
             value: value,
-            defaultValue: value,
+            savedValue: value,
             serviceName: configsTextarea.get('serviceName'),
             filename: filename,
             isFinal: configsTextarea.get('isFinal'),

Reply via email to