ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From onechipore...@apache.org
Subject ambari git commit: AMBARI-10429. Create Hive and Tez theme based enhanced configs (onechiporenko)
Date Fri, 10 Apr 2015 09:51:37 GMT
Repository: ambari
Updated Branches:
  refs/heads/trunk 4aae04801 -> 747c3b88c


AMBARI-10429. Create Hive and Tez theme based enhanced configs (onechiporenko)


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

Branch: refs/heads/trunk
Commit: 747c3b88cc13386734a6e886da0e626049bf453a
Parents: 4aae048
Author: Oleg Nechiporenko <onechiporenko@apache.org>
Authored: Fri Apr 10 12:49:01 2015 +0300
Committer: Oleg Nechiporenko <onechiporenko@apache.org>
Committed: Fri Apr 10 12:49:15 2015 +0300

----------------------------------------------------------------------
 .../HIVE/0.12.0.2.0/configuration/hive-site.xml |  26 +-
 .../services/HIVE/configuration/hive-site.xml   |  14 +-
 .../services/HIVE/configuration/hive-env.xml    |  85 ++-
 .../services/HIVE/configuration/hive-site.xml   | 121 +++-
 .../HIVE/configuration/hiveserver2-site.xml     | 103 +++-
 .../stacks/HDP/2.2/services/HIVE/metainfo.xml   |   7 +
 .../HDP/2.2/services/HIVE/themes/theme.json     | 609 +++++++++++++++++++
 .../HDP/2.2/services/YARN/themes/theme.json     | 102 ++--
 .../controllers/main/service/info/configs.js    |   4 +-
 .../main/service/configs/config_overridable.js  |   2 +-
 .../convert_unit_widget_view_mixin.js           |   2 +-
 ambari-web/app/styles/application.less          |   6 +-
 ambari-web/app/templates.js                     |   1 +
 .../templates/common/configs/service_config.hbs |   2 +-
 .../configs/service_config_layout_tab.hbs       |   5 +-
 .../configs/widgets/checkbox_config_widget.hbs  |  41 +-
 .../configs/widgets/combo_config_widget.hbs     |  46 +-
 .../common/configs/widgets/controls.hbs         |  69 +++
 .../configs/widgets/directory_config_widget.hbs |  21 +-
 .../configs/widgets/list_config_widget.hbs      |  16 +-
 .../configs/widgets/radio_button_config.hbs     |  13 +-
 .../configs/widgets/slider_config_widget.hbs    |  52 +-
 .../configs/widgets/textfield_config_widget.hbs |  22 +-
 .../configs/widgets/time_interval_spinner.hbs   |  33 +-
 .../configs/widgets/toggle_config_widget.hbs    |  19 +-
 ambari-web/app/utils/helper.js                  |   1 +
 .../configs/service_config_layout_tab_view.js   |  12 +-
 .../configs/widgets/combo_config_widget_view.js |   9 +-
 .../configs/widgets/config_widget_view.js       |  23 +
 .../widgets/slider_config_widget_view.js        |   9 +-
 .../widgets/time_interval_spinner_view.js       |   6 +-
 .../widgets/toggle_config_widget_view.js        |  22 +-
 ambari-web/app/views/common/controls_view.js    |   2 +-
 33 files changed, 1178 insertions(+), 327 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-site.xml b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-site.xml
index 63fc457..6cfb4ec 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-site.xml
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-site.xml
@@ -354,14 +354,24 @@ limitations under the License.
     <display-name>Default File Format</display-name>
     <value-attributes>
       <type>value-list</type>
-      <entries>ORCFile</entries>
-      <entries>TextFile</entries>
-      <entries>SequenceFile</entries>
-      <entries>RCfile</entries>      
-      <entry_descriptions>The Optimized Row Columnar (ORC) file format provides a highly efficient way to store Hive data. It was designed to overcome limitations of the other Hive file formats. Using ORC files improves performance when Hive is reading, writing, and processing data.</entry_descriptions>
-      <entry_descriptions>Text file format saves Hive data as normal text.</entry_descriptions>
-      <entry_descriptions>Compressed text file format saves Hive data in CompressedStorage.</entry_descriptions>
-      <entry_descriptions>Short of Record Columnar File, are flat files consisting of binary key/value pairs</entry_descriptions>      
+      <entries>
+        <entry>
+          <value>ORCFile</value>
+          <description>The Optimized Row Columnar (ORC) file format provides a highly efficient way to store Hive data. It was designed to overcome limitations of the other Hive file formats. Using ORC files improves performance when Hive is reading, writing, and processing data.</description>
+        </entry>
+        <entry>
+          <value>TextFile</value>
+          <description>Text file format saves Hive data as normal text.</description>
+        </entry>
+        <entry>
+          <value>SequenceFile</value>
+          <description>Compressed text file format saves Hive data in CompressedStorage.</description>
+        </entry>
+        <entry>
+          <value>RCfile</value>
+          <description>Short of Record Columnar File, are flat files consisting of binary key/value pairs.</description>
+        </entry>
+      </entries>
     </value-attributes>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/configuration/hive-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/configuration/hive-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/configuration/hive-site.xml
index e033096..d22176d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/configuration/hive-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1/services/HIVE/configuration/hive-site.xml
@@ -365,7 +365,7 @@ limitations under the License.
     <value-attributes>
       <type>int</type>
       <minimum>682</minimum>
-      <minimum>6820</minimum>
+      <maximum>6820</maximum>
       <unit>MB</unit>
       <increment-step>682</increment-step>
     </value-attributes>
@@ -469,6 +469,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -482,6 +488,12 @@ limitations under the License.
       <maximum>20</maximum>
       <increment-step>1</increment-step>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
index 7a657ab..66c0b66 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
@@ -61,5 +61,88 @@ fi
 export METASTORE_PORT={{hive_metastore_port}}
     </value>
   </property>
-  
+
+  <property>
+    <name>hive_exec_orc_storage_strategy</name>
+    <display-name>ORC Storage Strategy</display-name>
+    <value>SPEED</value>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>SPEED</value>
+          <label>Speed</label>
+        </entry>
+        <entry>
+          <value>COMPRESSION</value>
+          <label>Compression</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive_txn_acid</name>
+    <display-name>ACID Transactions</display-name>
+    <value>true</value>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>On</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>Off</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive_security_authorization</name>
+    <display-name>Choose Authorization</display-name>
+    <value>None</value>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>None</value>
+          <label>None</label>
+        </entry>
+        <entry>
+          <value>SQLStdAuth</value>
+          <label>SQLStdAuth</label>
+        </entry>
+        <entry>
+          <value>Ranger</value>
+          <label>Ranger</label>
+        </entry>
+      </entries>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive_timeline_logging_enabled</name>
+    <display-name>Use ATS Logging</display-name>
+    <value>true</value>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>True</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>False</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-site.xml
index 13513b5..74cae89 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-site.xml
@@ -175,6 +175,14 @@ limitations under the License.
     <name>hive.exec.reducers.bytes.per.reducer</name>
     <value>67108864</value>
     <description>size per reducer.The default is 256Mb, i.e if the input size is 1G, it will use 4 reducers.</description>
+    <display-name>Memory</display-name>
+    <value-attributes>
+      <type>int</type>
+      <minimum>64</minimum>
+      <maximum>4398046511104</maximum>
+      <unit>B</unit>
+      <step-increment></step-increment>
+    </value-attributes>
   </property>
 
   <property>
@@ -194,6 +202,12 @@ limitations under the License.
       A pre-execution hook is specified as the name of a Java class which implements the
       org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext interface.
     </description>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_timeline_logging_enabled </name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -204,6 +218,12 @@ limitations under the License.
       A post-execution hook is specified as the name of a Java class which implements the
       org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext interface.
     </description>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_timeline_logging_enabled </name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -214,6 +234,12 @@ limitations under the License.
       An on-failure hook is specified as the name of Java class which implements the
       org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext interface.
     </description>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_timeline_logging_enabled </name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -253,16 +279,22 @@ limitations under the License.
       <type>value-list</type>
       <entries>
         <entry>
-          <value>true</value>
-          <label>True</label>
+          <value>nonstrict</value>
+          <label>On</label>
         </entry>
         <entry>
-          <value>false</value>
-          <label>False</label>
+          <value>strict</value>
+          <label>Off</label>
         </entry>
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -508,16 +540,6 @@ limitations under the License.
   </property>
 
   <property>
-    <name>hive.exec.orc.compression.strategy</name>
-    <value>SPEED</value>
-    <description>
-      Expects one of [speed, compression].
-      Define the compression strategy to use while writing data.
-      This changes the compression level of higher level compression codec (like ZLIB).
-    </description>
-  </property>
-
-  <property>
     <name>hive.orc.splits.include.file.footer</name>
     <value>false</value>
     <description>
@@ -586,6 +608,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
   <property>
     <name>hive.enforce.sorting</name>
@@ -783,6 +811,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -817,6 +851,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_txn_acid</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -902,6 +942,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_security_authorization</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -914,12 +960,19 @@ limitations under the License.
   </property>
   <property>
     <name>hive.security.metastore.authorization.manager</name>
+    <display-name>Hive Authorization Manager</display-name>
     <value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider,org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly</value>
     <description>
       authorization manager class name to be used in the metastore for authorization.
       The user defined authorization class should implement interface
       org.apache.hadoop.hive.ql.security.authorization.HiveMetastoreAuthorizationProvider.
     </description>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_security_authorization</name>
+      </property>
+    </depends-on>
   </property>
   <property>
     <name>hive.security.metastore.authorization.auth.reads</name>
@@ -1167,16 +1220,6 @@ limitations under the License.
   </property>
 
   <property>
-    <name>hive.server2.tez.default.queues</name>
-    <value>default</value>
-    <description>
-      A list of comma separated values corresponding to YARN queues of the same name.
-      When HiveServer2 is launched in Tez mode, this configuration needs to be set
-      for multiple Tez sessions to run in parallel on the cluster.
-    </description>
-  </property>
-
-  <property>
     <name>hive.convert.join.bucket.mapjoin.tez</name>
     <value>false</value>
     <description>
@@ -1324,12 +1367,20 @@ limitations under the License.
   </property>
 
   <property>
-    <name>hive.vectorized.execution.reduce.enabled</name>
-    <value>false</value>
-    <description>
-      This flag should be set to true to enable vectorized mode of the reduce-side of query execution.
-      The default value is true.
+    <name>hive.auto.convert.join.noconditionaltask.size</name>
+    <value>2147483648</value>
+    <description>If hive.auto.convert.join.noconditionaltask is off, this parameter does not take affect. However, if it
+      is on, and the sum of size for n-1 of the tables/partitions for a n-way join is smaller than this size, the join is directly
+      converted to a mapjoin(there is no conditional task). The default is 10MB.
     </description>
+    <display-name>For Map Join, per Map memory threshold</display-name>
+    <value-attributes>
+      <type>int</type>
+      <minimum>1073741824</minimum>
+      <maximum>17179869184</maximum>
+      <unit>B</unit>
+      <step-increment></step-increment>
+    </value-attributes>
   </property>
 
   <property>
@@ -1486,6 +1537,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_exec_orc_storage_strategy</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>
@@ -1510,6 +1567,12 @@ limitations under the License.
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>hive-env</type>
+        <name>hive_exec_orc_storage_strategy</name>
+      </property>
+    </depends-on>
   </property>
 
   <property>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hiveserver2-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hiveserver2-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hiveserver2-site.xml
index 8acc3ef..0032b6f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hiveserver2-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hiveserver2-site.xml
@@ -31,5 +31,106 @@ limitations under the License.
     <description>the hive client authorization manager class name.
     The user defined authorization class should implement interface org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider.  </description>
   </property>
-  
+
+  <property>
+    <name>tez.session.am.dag.submit.timeout.secs</name>
+    <value>600</value>
+    <description></description>
+    <display-name>Max idle tez session length</display-name>
+    <value-attributes>
+      <type>int</type>
+      <minimum>600</minimum>
+      <maximum>86400</maximum>
+      <unit>seconds</unit>
+      <step-increment>600</step-increment>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive.server2.enable.doAs</name>
+    <value>true</value>
+    <description>
+      Setting this property to true will have HiveServer2 execute
+      Hive operations as the user making the calls to it.
+    </description>
+    <display-name>Run as end user instead of Hive user</display-name>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>True</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>False</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive.server2.tez.sessions.per.default.queue</name>
+    <value>1</value>
+    <description>
+      A positive integer that determines the number of Tez sessions that should be
+      launched on each of the queues specified by "hive.server2.tez.default.queues".
+      Determines the parallelism on each queue.
+    </description>
+    <display-name>Session per queue</display-name>
+    <value-attributes>
+      <type>int</type>
+      <minimum>1</minimum>
+      <maximum>10</maximum>
+      <step-increment>1</step-increment>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive.server2.tez.default.queues</name>
+    <display-name>Default query queues</display-name>
+    <value>default</value>
+    <description>
+      A list of comma separated values corresponding to YARN queues of the same name.
+      When HiveServer2 is launched in Tez mode, this configuration needs to be set
+      for multiple Tez sessions to run in parallel on the cluster.
+    </description>
+    <value-attributes>
+      <type>combo</type>
+      <entries>
+        <entry>
+          <value>default</value>
+          <label>Default</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1+</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>hive.server2.tez.initialize.default.sessions</name>
+    <value>false</value>
+    <description>
+      This flag is used in HiveServer2 to enable a user to use HiveServer2 without
+      turning on Tez for HiveServer2. The user could potentially want to run queries
+      over Tez without the pool of sessions.
+    </description>
+    <display-name>Start Tez session at Initialization</display-name>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>True</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>False</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
 </configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
index e190f45..fb9a596 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/metainfo.xml
@@ -108,6 +108,13 @@
         </osSpecific>
       </osSpecifics>
 
+      <themes>
+        <theme>
+          <fileName>theme.json</fileName>
+          <default>true</default>
+        </theme>
+      </themes>
+
       <requiredServices>
         <service>PIG</service>
       </requiredServices>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/themes/theme.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/themes/theme.json b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/themes/theme.json
new file mode 100644
index 0000000..0ba885f
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/themes/theme.json
@@ -0,0 +1,609 @@
+{
+  "Theme": {
+    "name": "default",
+    "description": "Default theme for HIVE service",
+    "configuration": {
+      "layouts": [
+        {
+          "name": "default",
+          "tabs": [
+            {
+              "name": "settings",
+              "display-name": "Settings",
+              "layout": {
+                "sections": [
+                  {
+                    "name": "optimization",
+                    "display-name": "Optimization",
+                    "row-index": "0",
+                    "column-index": "0",
+                    "row-span": "3",
+                    "column-span": "2",
+                    "section-columns": "2",
+                    "section-rows": "3",
+                    "subsections": [
+                      {
+                        "name": "optimization-row1-col1",
+                        "display-name": "Storage",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "optimization-row1-col2",
+                        "display-name": "",
+                        "row-index": "0",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "optimization-row2-col1",
+                        "display-name": "Optimization Vectorization",
+                        "row-index": "1",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "optimization-row2-col2",
+                        "display-name": "",
+                        "row-index": "1",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "optimization-row3-col1",
+                        "display-name": "Memory",
+                        "row-index": "2",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "optimization-row3-col2",
+                        "display-name": "",
+                        "row-index": "2",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
+                  },
+                  {
+                    "name": "acid-transactions",
+                    "display-name": "Acid Transactions",
+                    "row-index": "0",
+                    "column-index": "2",
+                    "row-span": "2",
+                    "column-span": "1",
+                    "section-columns": "1",
+                    "section-rows": "2",
+                    "subsections": [
+                      {
+                        "name": "acid-transactions-row1-col1",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
+                  },
+                  {
+                    "name": "performance",
+                    "display-name": "Performance",
+                    "row-index": "3",
+                    "column-index": "0",
+                    "row-span": "3",
+                    "column-span": "2",
+                    "section-columns": "2",
+                    "section-rows": "3",
+                    "subsections": [
+                      {
+                        "name": "performance-row1-col1",
+                        "display-name": "TEZ Engine",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "performance-row1-col2",
+                        "display-name": "",
+                        "row-index": "0",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "performance-row2-col1",
+                        "row-index": "1",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "performance-row2-col2",
+                        "row-index": "1",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
+                  },
+                  {
+                    "name": "interactive-query",
+                    "display-name": "Interactive Query",
+                    "row-index": "2",
+                    "column-index": "2",
+                    "row-span": "2",
+                    "column-span": "1",
+                    "section-columns": "1",
+                    "section-rows": "2",
+                    "subsections": [
+                      {
+                        "name": "interactive-query-row1-col1",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
+                  },
+                  {
+                    "name": "security",
+                    "display-name": "Security",
+                    "row-index": "4",
+                    "column-index": "2",
+                    "row-span": "2",
+                    "column-span": "1",
+                    "section-columns": "1",
+                    "section-rows": "2",
+                    "subsections": [
+                      {
+                        "name": "security-row1-col1",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
+                  }
+                ]
+              }
+            }
+          ]
+        }
+      ]
+    },
+    "placement": {
+      "configuration-layout": "default",
+      "configs": [
+        {
+          "config": "hive-site/hive.default.fileformat",
+          "subsection-name": "optimization-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.exec.orc.default.stripe.size",
+          "subsection-name": "optimization-row1-col1"
+        },
+        {
+          "config": "hive-env/hive_exec_orc_storage_strategy",
+          "subsection-name": "optimization-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.exec.orc.default.compress",
+          "subsection-name": "optimization-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.optimize.index.filter",
+          "subsection-name": "optimization-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.optimize.sort.dynamic.partition",
+          "subsection-name": "optimization-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.exec.orc.encoding.strategy",
+          "subsection-name": "optimization-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.exec.orc.compression.strategy",
+          "subsection-name": "optimization-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.vectorized.execution.enabled",
+          "subsection-name": "optimization-row2-col1"
+        },
+        {
+          "config": "hive-site/hive.vectorized.execution.reduce.enabled",
+          "subsection-name": "optimization-row2-col2"
+        },
+        {
+          "config": "hive-site/hive.auto.convert.join.noconditionaltask.size",
+          "subsection-name": "optimization-row3-col1"
+        },
+        {
+          "config": "hive-site/hive.exec.reducers.bytes.per.reducer",
+          "subsection-name": "optimization-row3-col2"
+        },
+        {
+          "config": "hive-env/hive_txn_acid",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.txn.manager",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.support.concurrency",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.compactor.initiator.on",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.compactor.worker.threads",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.enforce.bucketing",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.exec.dynamic.partition.mode",
+          "subsection-name": "acid-transactions-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.execution.engine",
+          "subsection-name": "performance-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.tez.container.size",
+          "subsection-name": "performance-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.prewarm.enabled",
+          "subsection-name": "performance-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.prewarm.numcontainers",
+          "subsection-name": "performance-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.tez.auto.reducer.parallelism",
+          "subsection-name": "performance-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.tez.dynamic.partition.pruning",
+          "subsection-name": "performance-row1-col2"
+        },
+        {
+          "config": "hive-site/hive.cbo.enable",
+          "subsection-name": "performance-row2-col1"
+        },
+        {
+          "config": "hive-site/hive.stats.fetch.partition.stats",
+          "subsection-name": "performance-row2-col1"
+        },
+        {
+          "config": "hive-site/hive.stats.fetch.column.stats",
+          "subsection-name": "performance-row2-col1"
+        },
+        {
+          "config": "hive-site/hive.compute.query.using.stats",
+          "subsection-name": "performance-row2-col2"
+        },
+        {
+          "config": "hiveserver2-site/hive.server2.tez.initialize.default.sessions",
+          "subsection-name": "interactive-query-row1-col1"
+        },
+        {
+          "config": "hiveserver2-site/hive.server2.tez.sessions.per.default.queue",
+          "subsection-name": "interactive-query-row1-col1"
+        },
+        {
+          "config": "hiveserver2-site/hive.server2.enable.doAs",
+          "subsection-name": "interactive-query-row1-col1"
+        },
+        {
+          "config": "hiveserver2-site/tez.session.am.dag.submit.timeout.secs",
+          "subsection-name": "interactive-query-row1-col1"
+        },
+        {
+          "config": "hive-env/hive_security_authorization",
+          "subsection-name": "security-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.security.authorization.enabled",
+          "subsection-name": "security-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.security.metastore.authorization.manager",
+          "subsection-name": "security-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.server2.authentication",
+          "subsection-name": "security-row1-col1"
+        },
+        {
+          "config": "hive-site/hive.server2.use.SSL",
+          "subsection-name": "security-row1-col1"
+        }
+      ]
+    },
+    "widgets": [
+      {
+        "config": "hive-site/hive.default.fileformat",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.orc.default.stripe.size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.orc.default.compress",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.optimize.index.filter",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.optimize.sort.dynamic.partition",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.orc.encoding.strategy",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-env/hive_exec_orc_storage_strategy",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.orc.compression.strategy",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.vectorized.execution.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.vectorized.execution.reduce.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.auto.convert.join.noconditionaltask.size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.reducers.bytes.per.reducer",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-env/hive_txn_acid",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.txn.manager",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.security.metastore.authorization.manager",
+        "widget": {
+          "type": "string"
+        }
+      },
+      {
+        "config": "hive-site/hive.support.concurrency",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.compactor.initiator.on",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.compactor.worker.threads",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "int"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-site/hive.enforce.bucketing",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.exec.dynamic.partition.mode",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.execution.engine",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.tez.container.size",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "MB"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-site/hive.prewarm.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.prewarm.numcontainers",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "int"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-site/hive.tez.auto.reducer.parallelism",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.tez.dynamic.partition.pruning",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.cbo.enable",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.stats.fetch.partition.stats",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.stats.fetch.column.stats",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.compute.query.using.stats",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hiveserver2-site/hive.server2.tez.initialize.default.sessions",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hiveserver2-site/hive.server2.tez.sessions.per.default.queue",
+        "widget": {
+          "type": "slider",
+          "units": [
+            {
+              "unit-name": "int"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hiveserver2-site/hive.server2.enable.doAs",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hiveserver2-site/tez.session.am.dag.submit.timeout.secs",
+        "widget": {
+          "type": "time-interval-spinner",
+          "units": [
+            {
+              "unit-name": "hours,minutes"
+            }
+          ]
+        }
+      },
+      {
+        "config": "hive-env/hive_security_authorization",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.security.authorization.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "hive-site/hive.server2.authentication",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "hive-site/hive.server2.use.SSL",
+        "widget": {
+          "type": "toggle"
+        }
+      }
+    ]
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/themes/theme.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/themes/theme.json b/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/themes/theme.json
index a671549..6074029 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/themes/theme.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/YARN/themes/theme.json
@@ -24,20 +24,21 @@
                     "section-columns": "2",
                     "section-rows": "1",
                     "subsections": [
-	                  {
-	                    "name": "subsection-nm-sizing-col1",
-	                    "row-index": "0",
-	                    "column-index": "0",
-	                    "row-span": "1",
-	                    "column-span": "1"
-	                  }, {
-	                    "name": "subsection-nm-sizing-col2",
-	                    "row-index": "0",
-	                    "column-index": "1",
-	                    "row-span": "1",
-	                    "column-span": "1"
-	                  }
-	                ]
+                      {
+                        "name": "subsection-nm-sizing-col1",
+                        "row-index": "0",
+                        "column-index": "0",
+                        "row-span": "1",
+                        "column-span": "1"
+                      },
+                      {
+                        "name": "subsection-nm-sizing-col2",
+                        "row-index": "0",
+                        "column-index": "1",
+                        "row-span": "1",
+                        "column-span": "1"
+                      }
+                    ]
                   },
                   {
                     "name": "section-yarn-platform-features",
@@ -74,7 +75,8 @@
                         "column-index": "0",
                         "row-span": "1",
                         "column-span": "1"
-                      }, {
+                      },
+                      {
                         "name": "subsection-container-sizing-col2",
                         "row-index": "0",
                         "column-index": "1",
@@ -139,14 +141,14 @@
         }
       ]
     },
-    "widgets":[
+    "widgets": [
       {
-        "config":"yarn-site/yarn.nodemanager.resource.memory-mb",
-        "widget":{
-          "type":"slider",
-          "units":[
+        "config": "yarn-site/yarn.nodemanager.resource.memory-mb",
+        "widget": {
+          "type": "slider",
+          "units": [
             {
-              "unit-name":"MB"
+              "unit-name": "MB"
             }
           ]
         }
@@ -185,65 +187,65 @@
         }
       },
       {
-        "config":"yarn-site/yarn.scheduler.minimum-allocation-mb",
-        "widget":{
-          "type":"slider",
-          "units":[
+        "config": "yarn-site/yarn.scheduler.minimum-allocation-mb",
+        "widget": {
+          "type": "slider",
+          "units": [
             {
-              "unit-name":"MB"
+              "unit-name": "MB"
             }
           ]
         }
       },
       {
-        "config":"yarn-site/yarn.scheduler.maximum-allocation-mb",
-        "widget":{
-          "type":"slider",
-          "units":[
+        "config": "yarn-site/yarn.scheduler.maximum-allocation-mb",
+        "widget": {
+          "type": "slider",
+          "units": [
             {
-              "unit-name":"MB"
+              "unit-name": "MB"
             }
           ]
         }
       },
       {
-        "config":"yarn-site/yarn.scheduler.minimum-allocation-vcores",
-        "widget":{
-          "type":"slider",
-          "units":[
+        "config": "yarn-site/yarn.scheduler.minimum-allocation-vcores",
+        "widget": {
+          "type": "slider",
+          "units": [
             {
-              "unit-name":"int"
+              "unit-name": "int"
             }
           ]
         }
       },
       {
-        "config":"yarn-site/yarn.scheduler.maximum-allocation-vcores",
-        "widget":{
-          "type":"slider",
-          "units":[
+        "config": "yarn-site/yarn.scheduler.maximum-allocation-vcores",
+        "widget": {
+          "type": "slider",
+          "units": [
             {
-              "unit-name":"int"
+              "unit-name": "int"
             }
           ]
         }
       },
       {
-        "config":"yarn-site/yarn.node-labels.enabled",
-        "widget":{
-          "type":"checkbox"
+        "config": "yarn-site/yarn.node-labels.enabled",
+        "widget": {
+          "type": "checkbox"
         }
       },
       {
-        "config":"yarn-site/yarn.log-aggregation-enable",
-        "widget":{
-          "type":"checkbox"
+        "config": "yarn-site/yarn.log-aggregation-enable",
+        "widget": {
+          "type": "checkbox"
         }
       },
       {
-        "config":"yarn-site/yarn.resourcemanager.work-preserving-recovery.enabled",
-        "widget":{
-          "type":"checkbox"
+        "config": "yarn-site/yarn.resourcemanager.work-preserving-recovery.enabled",
+        "widget": {
+          "type": "checkbox"
         }
       }
     ]

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index fb54278..e406d55 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -907,12 +907,14 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
    */
   checkOverrideProperty: function (componentConfig) {
     var overrideToAdd = this.get('overrideToAdd');
+    var value = Em.get(overrideToAdd, 'value');
+    var isEnhanced = !!this.get('overrideToAdd.widget');
     if (overrideToAdd) {
       overrideToAdd = componentConfig.configs.filter(function(c){
         return c.name == overrideToAdd.name && c.filename == overrideToAdd.filename;
       });
       if (overrideToAdd[0]) {
-        this.addOverrideProperty(overrideToAdd[0], this.get('selectedConfigGroup'));
+        this.addOverrideProperty(overrideToAdd[0], this.get('selectedConfigGroup'), isEnhanced ? value : null);
         this.set('overrideToAdd', null);
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/mixins/main/service/configs/config_overridable.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/main/service/configs/config_overridable.js b/ambari-web/app/mixins/main/service/configs/config_overridable.js
index 340ca5f..e7d858d 100644
--- a/ambari-web/app/mixins/main/service/configs/config_overridable.js
+++ b/ambari-web/app/mixins/main/service/configs/config_overridable.js
@@ -62,7 +62,7 @@ App.ConfigOverridable = Em.Mixin.create({
       );
     }
     else {
-      serviceConfigController.addOverrideProperty(serviceConfigProperty, selectedConfigGroup);
+      serviceConfigController.addOverrideProperty(serviceConfigProperty, selectedConfigGroup, serviceConfigProperty.get('widget') ? serviceConfigProperty.get('value') : null);
     }
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/mixins/unit_convert/convert_unit_widget_view_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/unit_convert/convert_unit_widget_view_mixin.js b/ambari-web/app/mixins/unit_convert/convert_unit_widget_view_mixin.js
index 2910a78..55797b7 100644
--- a/ambari-web/app/mixins/unit_convert/convert_unit_widget_view_mixin.js
+++ b/ambari-web/app/mixins/unit_convert/convert_unit_widget_view_mixin.js
@@ -37,8 +37,8 @@ App.ConvertUnitWidgetViewMixin = Em.Mixin.create(App.BaseUnitConvertMixin, {
    * Get converted value according to config property unit format from specified widget value.
    *
    * @param {String|Number|Object[]} value - widget value to convert
-   * @param {Boolean} returnObject - returned value should be an array of objects
    * @returns {Number}
+   * @method configValueByWidget
    */
   configValueByWidget: function(value) {
     return this.convertValue(value, this._converterGetWidgetUnits(), this._converterGetPropertyAttributes());

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index e943188..d4725f1 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -5618,7 +5618,6 @@ input[type="checkbox"].align-checkbox {
     width: ~"calc(100% + 40px)";
     .config-section-table {
       width: 100%;
-      height: 100%;
       border-spacing: 20px;
       border-collapse: separate;
       table-layout: fixed; // for width to be equally distributed
@@ -5633,6 +5632,11 @@ input[type="checkbox"].align-checkbox {
           font-weight: 400;
         }
 
+        h5 {
+          font-size: 18px;
+          font-weight: 400;
+        }
+
         td:not(:first-of-type) {
           border-left: 2px solid #ccc; // horizontal splitter
           padding-left: 20px;

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates.js b/ambari-web/app/templates.js
index 4b3efc1..0157613 100644
--- a/ambari-web/app/templates.js
+++ b/ambari-web/app/templates.js
@@ -22,3 +22,4 @@
 
 require('templates/main/service/info/summary/base');
 require('templates/common/progress');
+require('templates/common/configs/widgets/controls');

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/service_config.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/service_config.hbs b/ambari-web/app/templates/common/configs/service_config.hbs
index e2da5ee..ecbe283 100644
--- a/ambari-web/app/templates/common/configs/service_config.hbs
+++ b/ambari-web/app/templates/common/configs/service_config.hbs
@@ -111,7 +111,7 @@
             {{/each}}
           {{else}}
               {{! Render Enhanced Config Section }}
-              {{view App.ServiceConfigLayoutTabView contentBinding="tab"}}
+              {{view App.ServiceConfigLayoutTabView contentBinding="tab" canEditBinding="view.canEdit" }}
           {{/if}}
         </div>
       {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/service_config_layout_tab.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/service_config_layout_tab.hbs b/ambari-web/app/templates/common/configs/service_config_layout_tab.hbs
index e6878aa..12cdea3 100644
--- a/ambari-web/app/templates/common/configs/service_config_layout_tab.hbs
+++ b/ambari-web/app/templates/common/configs/service_config_layout_tab.hbs
@@ -28,10 +28,11 @@
                 <tr>
                   {{#each subsection in subRow}}
                     <td {{bindAttr class="subsection.isHiddenByFilter:invisible :config-subsection"}}>
+                      <h5>{{subsection.displayName}}&nbsp;</h5>
                       {{#each config in subsection.configs}}
-                        {{#if config.view}}
+                        {{#if config.widget}}
                           {{#unless config.isHiddenByFilter}}
-                            {{view config.widget configBinding="config"}}
+                            {{view config.widget configBinding="config" canEditBinding="view.canEdit"}}
                           {{/unless}}
                         {{/if}}
                       {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/checkbox_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/checkbox_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/checkbox_config_widget.hbs
index b515489..6429013 100644
--- a/ambari-web/app/templates/common/configs/widgets/checkbox_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/checkbox_config_widget.hbs
@@ -24,43 +24,4 @@
     {{/if}}
   </label>
 </div>
-<div {{bindAttr class="view.isHover:show:not-show :clearfix"}}>
-  {{#if view.isOriginalSCP}}
-    {{view App.RestoreConfigView visibleBinding="view.undoAllowed"}}
-  {{/if}}
-  {{#if view.overrideAllowed}}
-    {{#isAccessible ADMIN}}
-      <div class="pull-left action-button">
-        <a class="btn btn-small" href="#" data-toggle="tooltip"
-          {{action "createOverrideProperty" view.config target="view.parentView"}}
-          {{translateAttr data-original-title="common.override"}}>
-          <i class="icon-plus-sign"></i>
-        </a>
-      </div>
-    {{/isAccessible}}
-  {{/if}}
-</div>
-
-{{#if view.isComparison}}
-  {{#if controller.selectedConfigGroup.isDefault}}
-    <span
-        class="label label-info">{{t dashboard.configHistory.table.version.prefix}}{{controller.selectedVersion}}</span>
-    {{#if controller.isCurrentSelected}}
-      <span class="label label-success">{{t common.current}}</span>
-    {{/if}}
-  {{else}}
-    <span class="label label-info">{{t common.default}}
-      &nbsp;{{t services.service.config.configHistory.configGroup}}</span>
-  {{/if}}
-{{/if}}
-
-{{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-{{/if}}
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/combo_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/combo_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/combo_config_widget.hbs
index edddf0f..d69d613 100644
--- a/ambari-web/app/templates/common/configs/widgets/combo_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/combo_config_widget.hbs
@@ -15,32 +15,24 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-
-<p class="widget-config-label">{{view.configLabel}}</p>
-<div class="input-append pull-left">
-  {{view Em.TextField valueBinding="view.content.value" disabled="disabled"}}
-  <div class="dropdown btn-group">
-    <button class="btn dropdown-toggle" data-toggle="dropdown">
-      <span class="caret"></span>
-    </button>
-    <ul class="dropdown-menu">
-      {{#each item in view.content.valuesList}}
-        <li>
-          <a href="#" {{action setConfigValue item.configValue target="view"}}>{{item.widgetValue}}</a>
-        </li>
-      {{/each}}
-    </ul>
-  </div>
-</div>
-{{view App.RestoreConfigView}}
 {{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
+  <p class="widget-config-label">{{view.configLabel}}</p>
 {{/if}}
-<div class="clearfix"></div>
+<div {{bindAttr class="view.isOriginalSCP:original-widget"}}>
+  <div class="input-append">
+    {{view Em.TextField valueBinding="view.content.value" disabled="disabled"}}
+    <div class="dropdown btn-group">
+      <button {{bindAttr class="view.disabled:disabled :btn :dropdown-toggle"}} data-toggle="dropdown">
+        <span class="caret"></span>
+      </button>
+      <ul class="dropdown-menu">
+        {{#each item in view.content.valuesList}}
+          <li>
+            <a href="#" {{action setConfigValue item.configValue target="view"}}>{{item.widgetValue}}</a>
+          </li>
+        {{/each}}
+      </ul>
+    </div>
+  </div>
+</div>
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/controls.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/controls.hbs b/ambari-web/app/templates/common/configs/widgets/controls.hbs
new file mode 100644
index 0000000..89204e1
--- /dev/null
+++ b/ambari-web/app/templates/common/configs/widgets/controls.hbs
@@ -0,0 +1,69 @@
+{{!
+* 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.
+}}
+{{#if view.canEdit}}
+  <div class="clearfix">
+    {{#if view.config.supportsFinal}}
+      <a href="#" data-toggle="tooltip"
+        {{bindAttr class=":btn :btn-small :btn-final :pull-left view.config.isFinal:active view.showFinalConfig:show:not-show" disabled="view.config.isNotEditable"}}
+        {{action "toggleFinalFlag" view.config target="view"}}
+        {{translateAttr data-original-title="services.service.config.final"}}>
+        <i class="icon-lock"></i>
+      </a>
+    {{/if}}
+    {{#if view.overrideAllowed}}
+      {{#isAccessible ADMIN}}
+        <div {{bindAttr class=":pull-left :action-button view.isHover:show:not-show"}}>
+          <a class="btn btn-small" href="#" data-toggle="tooltip"
+            {{action "createOverrideProperty" view.config target="view.parentView"}}
+            {{translateAttr data-original-title="common.override"}}>
+            <i class="icon-plus-sign"></i>
+          </a>
+        </div>
+      {{/isAccessible}}
+    {{/if}}
+    {{#if view.isOriginalSCP}}
+      {{view App.RestoreConfigView visibleBinding="view.undoAllowed"}}
+    {{/if}}
+  </div>
+
+  {{#if view.isComparison}}
+    {{#if controller.selectedConfigGroup.isDefault}}
+      <span
+          class="label label-info">{{t dashboard.configHistory.table.version.prefix}}{{controller.selectedVersion}}</span>
+      {{#if controller.isCurrentSelected}}
+        <span class="label label-success">{{t common.current}}</span>
+      {{/if}}
+    {{else}}
+      <span class="label label-info">{{t common.default}}
+        &nbsp;{{t services.service.config.configHistory.configGroup}}</span>
+    {{/if}}
+  {{/if}}
+
+  {{#if view.isOriginalSCP}}
+    {{view App.ConfigWidgetOverrideView
+    serviceConfigPropertyBinding="view.config"
+    isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
+    }}
+  {{/if}}
+
+  {{#if view.isComparison}}
+    {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
+  {{/if}}
+{{else}}
+  <div class="clearfix"></div>
+{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/directory_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/directory_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/directory_config_widget.hbs
index 35095f5..0e4dcab 100644
--- a/ambari-web/app/templates/common/configs/widgets/directory_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/directory_config_widget.hbs
@@ -15,22 +15,11 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
+
 <div class="span10">
-  <span class="widget-config-label">{{view.config.displayName}}</span>
+  {{#if view.isOriginalSCP}}
+    <span class="widget-config-label">{{view.config.displayName}}</span>
+  {{/if}}
   {{view view.configView}}
 </div>
-{{view App.RestoreConfigView}}
-<div class="clearfix"></div>
-{{#if view.configErrorMessage}}
-  <p class="text-error">{{view.configErrorMessage}}</p>
-{{/if}}
-{{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-{{/if}}
\ No newline at end of file
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/list_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/list_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/list_config_widget.hbs
index 62bbfc9..f1cc7dc 100644
--- a/ambari-web/app/templates/common/configs/widgets/list_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/list_config_widget.hbs
@@ -17,7 +17,9 @@
 }}
 
 <div {{bindAttr class="view.config.isHiddenByFilter:hide :widget-config :list-widget"}}>
-  <p class="widget-config-label">{{view.configLabel}}</p>
+  {{#if view.isOriginalSCP}}
+    <p class="widget-config-label">{{view.configLabel}}</p>
+  {{/if}}
   <div class="btn-group">
     <a class="btn dropdown-toggle" data-toggle="dropdown">{{view.displayVal}} <span class="caret"></span></a>
     {{#if view.valueIsChanged}}
@@ -39,14 +41,4 @@
       {{/each}}
     </ul>
   </div>
-  {{#if view.isOriginalSCP}}
-    {{view App.ConfigWidgetOverrideView
-    serviceConfigPropertyBinding="view.config"
-    isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-    }}
-  {{/if}}
-
-  {{#if view.isComparison}}
-    {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-  {{/if}}
-</div>
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/radio_button_config.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/radio_button_config.hbs b/ambari-web/app/templates/common/configs/widgets/radio_button_config.hbs
index 89dab64..b9d18c9 100644
--- a/ambari-web/app/templates/common/configs/widgets/radio_button_config.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/radio_button_config.hbs
@@ -29,15 +29,4 @@
     </label>
   {{/each}}
 </div>
-{{view App.RestoreConfigView}}
-{{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-{{/if}}
-<div class="clearfix"></div>
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/slider_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/slider_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/slider_config_widget.hbs
index 5956230..7349e63 100644
--- a/ambari-web/app/templates/common/configs/widgets/slider_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/slider_config_widget.hbs
@@ -16,8 +16,7 @@
 * limitations under the License.
 }}
 
-
-<div {{bindAttr class="view.config.isHiddenByFilter:hide :widget-config :slider-widget"}}>
+<div class="widget-config slider-widget">
   {{#if view.isOriginalSCP}}
     <p class="widget-config-label">{{formatWordBreak view.configLabel}}</p>
   {{/if}}
@@ -25,52 +24,5 @@
     <div class="pull-left ui-slider-wrapper-inner">{{view Ember.TextField valueBinding="view.config.value" class="input-mini slider-input"}}</div>
     <div class="pull-right ui-slider-label">{{view.mirrorValue}} {{view.unitLabel}}</div>
   </div>
-  <div {{bindAttr class=":clearfix"}}>
-      {{#if view.config.supportsFinal}}
-        <a href="#" data-toggle="tooltip"
-          {{bindAttr class=":btn :btn-small :btn-final :pull-left view.config.isFinal:active view.showFinalConfig:show:not-show" disabled="view.config.isNotEditable"}}
-          {{action "toggleFinalFlag" view.config target="view"}}
-          {{translateAttr data-original-title="services.service.config.final"}}>
-          <i class="icon-lock"></i>
-        </a>
-      {{/if}}
-      {{#if view.overrideAllowed}}
-        {{#isAccessible ADMIN}}
-          <div {{bindAttr class=":pull-left :action-button view.isHover:show:not-show"}}>
-            <a class="btn btn-small" href="#" data-toggle="tooltip"
-              {{action "createOverrideProperty" view.config target="view.parentView"}}
-              {{translateAttr data-original-title="common.override"}}>
-              <i class="icon-plus-sign"></i>
-            </a>
-          </div>
-        {{/isAccessible}}
-      {{/if}}
-      {{#if view.isOriginalSCP}}
-        {{view App.RestoreConfigView visibleBinding="view.undoAllowed"}}
-      {{/if}}
-  </div>
-
-  {{#if view.isComparison}}
-    {{#if controller.selectedConfigGroup.isDefault}}
-      <span
-          class="label label-info">{{t dashboard.configHistory.table.version.prefix}}{{controller.selectedVersion}}</span>
-      {{#if controller.isCurrentSelected}}
-        <span class="label label-success">{{t common.current}}</span>
-      {{/if}}
-    {{else}}
-      <span class="label label-info">{{t common.default}}
-        &nbsp;{{t services.service.config.configHistory.configGroup}}</span>
-    {{/if}}
-  {{/if}}
-
-  {{#if view.isOriginalSCP}}
-    {{view App.ConfigWidgetOverrideView
-      serviceConfigPropertyBinding="view.config"
-      isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-    }}
-  {{/if}}
-
-  {{#if view.isComparison}}
-    {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-  {{/if}}
+  {{template "templates/common/configs/widgets/controls"}}
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/textfield_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/textfield_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/textfield_config_widget.hbs
index 57af194..4d1c251 100644
--- a/ambari-web/app/templates/common/configs/widgets/textfield_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/textfield_config_widget.hbs
@@ -16,22 +16,10 @@
 * limitations under the License.
 }}
 
-<div class="pull-left">
-  <p class="widget-config-label">{{view.configLabel}}</p>
+<div>
+  {{#if view.isOriginalSCP}}
+    <p class="widget-config-label">{{view.configLabel}}</p>
+  {{/if}}
   {{view view.configView}}
 </div>
-{{view App.RestoreConfigView}}
-<div class="clearfix"></div>
-{{#if view.configErrorMessage}}
-  <p class="text-error">{{view.configErrorMessage}}</p>
-{{/if}}
-{{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
-{{/if}}
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/time_interval_spinner.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/time_interval_spinner.hbs b/ambari-web/app/templates/common/configs/widgets/time_interval_spinner.hbs
index 54c606a..9769017 100644
--- a/ambari-web/app/templates/common/configs/widgets/time_interval_spinner.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/time_interval_spinner.hbs
@@ -15,29 +15,14 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-<p class="widget-config-label">{{view.configLabel}}</p>
-{{#each spinnerContent in view.content}}
-  {{view App.SpinnerInputView contentBinding="spinnerContent" disabledBinding="view.disabled"}}
-{{/each}}
-{{#if view.valueIsChanged}}
-  <div class="action-button">
-    <a class="btn btn-small" href="#" {{action "restoreValue" target="view"}}>
-      <i class="icon-undo"></i>
-    </a>
-  </div>
-{{/if}}
-{{#if view.errorMessage}}
-  <div class="clearfix"></div>
-  <p class="text-error">{{view.errorMessage}}</p>
-{{/if}}
-{{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
 
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
+{{#if view.isOriginalSCP}}
+  <p class="widget-config-label">{{view.configLabel}}</p>
 {{/if}}
-<div class="clearfix"></div>
+<div {{bindAttr class="view.isOriginalSCP:original-widget"}}>
+  {{#each spinnerContent in view.content}}
+    {{view App.SpinnerInputView contentBinding="spinnerContent" disabledBinding="view.disabled"}}
+  {{/each}}
+  <div class="clearfix"></div>
+</div>
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs b/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs
index 0c8f268..ff7ef2b 100644
--- a/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs
+++ b/ambari-web/app/templates/common/configs/widgets/toggle_config_widget.hbs
@@ -16,19 +16,10 @@
 * limitations under the License.
 }}
 
-<p class="widget-config-label">{{view.configLabel}}</p>
-<div class="pull-left">
-  {{view Ember.Checkbox checkedBinding="view.switcherValue"}}
-</div>
-{{view App.RestoreConfigView}}
 {{#if view.isOriginalSCP}}
-  {{view App.ConfigWidgetOverrideView
-  serviceConfigPropertyBinding="view.config"
-  isDefaultGroupSelectedBinding="controller.selectedConfigGroup.isDefault"
-  }}
-{{/if}}
-
-{{#if view.isComparison}}
-  {{view App.ConfigWidgetComparisonView serviceConfigPropertyBinding="view.config"}}
+  <p class="widget-config-label">{{view.configLabel}}</p>
 {{/if}}
-<div class="clearfix"></div>
+<div {{bindAttr class="view.isOriginalSCP:original-widget"}}>
+  {{view Ember.Checkbox checkedBinding="view.switcherValue"}}
+</div>
+{{template "templates/common/configs/widgets/controls"}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/utils/helper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js
index c7358c4..5606192 100644
--- a/ambari-web/app/utils/helper.js
+++ b/ambari-web/app/utils/helper.js
@@ -561,6 +561,7 @@ App.format = {
  * @param {object} options
  */
 App.popover = function (self, options) {
+  if (!self) return;
   self.popover(options);
   self.on("remove", function () {
     $(this).trigger('mouseleave');

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
index d67b970..98a0e8d 100644
--- a/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
+++ b/ambari-web/app/views/common/configs/service_config_layout_tab_view.js
@@ -21,6 +21,15 @@ var App = require('app');
 App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
 
   /**
+   * Determines if view is editable
+   * It true - show all control-elements (undo, override, finalize etc) for each widget
+   * If false - no widgets control-elements will be shown
+   * Bound from template
+   * @type {boolean}
+   */
+  canEdit: true,
+
+  /**
    * @type {App.Service}
    */
   service: function () {
@@ -46,7 +55,8 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
     'radio-buttons': App.RadioButtonConfigWidgetView,
     slider: App.SliderConfigWidgetView,
     'time-interval-spinner': App.TimeIntervalSpinnerView,
-    toggle: App.ToggleConfigWidgetView
+    toggle: App.ToggleConfigWidgetView,
+    string: App.StringConfigWidgetView
   },
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js
index 2997248..7e7c46f 100644
--- a/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/combo_config_widget_view.js
@@ -24,7 +24,7 @@ var App = require('app');
  */
 App.ComboConfigWidgetView = App.ConfigWidgetView.extend({
   templateName: require('templates/common/configs/widgets/combo_config_widget'),
-  classNames: ['widget', 'combo-widget'],
+  classNames: ['widget-config', 'combo-widget'],
 
   /**
    * Object with following structure:
@@ -40,6 +40,9 @@ App.ComboConfigWidgetView = App.ConfigWidgetView.extend({
 
   didInsertElement: function() {
     this.generateContent();
+    this.toggleWidgetState();
+    this.initPopover();
+    this._super();
   },
 
   /**
@@ -57,14 +60,14 @@ App.ComboConfigWidgetView = App.ConfigWidgetView.extend({
    * Generate values map according to widget/value format.
    *
    * @method convertToWidgetUnits
-   * @params {Object} valueAttributes
+   * @param {Object} valueAttributes
    * @returns {Object[]} - values list map @see content.valuesList
    */
   convertToWidgetUnits: function(valueAttributes) {
     return Em.get(valueAttributes, 'entries').map(function(item) {
       return Em.Object.create({
         configValue: item.value,
-        widgetValue: Em.getWithDefault(item, 'label', item.value)
+        widgetValue: item.label || item.value
       });
     });
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/widgets/config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/config_widget_view.js b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
index d75dd03..8598754 100644
--- a/ambari-web/app/views/common/configs/widgets/config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/config_widget_view.js
@@ -36,6 +36,21 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
   isHover: false,
 
   /**
+   * Determines if widget controls should be disabled
+   * @type {boolean}
+   */
+  disabled: false,
+
+  /**
+   * Determines if widget is editable
+   * It true - show all control-elements (undo, override, finalize etc) for widget
+   * If false - no widget control-elements will be shown
+   * Bound from template
+   * @type {boolean}
+   */
+  canEdit: true,
+
+  /**
    * Alias to <code>config.isOriginalSCP</code>
    * Should be used in the templates
    * Don't use original <code>config.isOriginalSCP</code> in the widget-templates!!!
@@ -77,6 +92,14 @@ App.ConfigWidgetView = Em.View.extend(App.SupportsDependentConfigs, App.WidgetPo
   }.property('config.value'),
 
   /**
+   * Enable/disable widget state
+   * @method toggleWidgetState
+   */
+  toggleWidgetState: function () {
+    this.set('disabled', !this.get('config.isEditable'));
+  }.observes('config.isEditable'),
+
+  /**
    * Reset config-value to its default
    * @method restoreValue
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
index 29c0ac7..6cb0602 100644
--- a/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/slider_config_widget_view.js
@@ -36,12 +36,6 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
   slider: null,
 
   /**
-   * Determines if widget controls should be disabled
-   * @type {boolean}
-   */
-  disabled: false,
-
-  /**
    * Mirror of the config-value shown in the input on the left of the slider
    * @type {number}
    */
@@ -85,7 +79,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
   toggleWidgetState: function () {
     var slider = this.get('slider');
     this.get('config.isEditable') ? slider.enable() : slider.disable();
-    this.set('disabled', !this.get('config.isEditable'));
+    this._super();
   }.observes('config.isEditable'),
 
   willInsertElement: function () {
@@ -181,6 +175,7 @@ App.SliderConfigWidgetView = App.ConfigWidgetView.extend({
   /**
    * Setup convert table according to widget unit-name and property type.
    * Set label for unit to display.
+   * @method prepareValueConverter
    */
   prepareValueConverter: function() {
     var widgetUnit = this._converterGetWidgetUnits();

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js b/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js
index 4e485d0..2bc5716 100644
--- a/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js
+++ b/ambari-web/app/views/common/configs/widgets/time_interval_spinner_view.js
@@ -20,7 +20,7 @@ var App = require('app');
 
 App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
   templateName: require('templates/common/configs/widgets/time_interval_spinner'),
-  classNames: ['spinner-input-widget'],
+  classNames: ['widget-config', 'spinner-input-widget'],
 
   /**
    * @property isValid
@@ -82,6 +82,8 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
   didInsertElement: function () {
     Em.run.once(this, 'prepareContent');
     this._super();
+    this.toggleWidgetState();
+    this.initPopover();
   },
 
   /**
@@ -126,7 +128,6 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
    */
   valueObserver: function() {
     if (!this.get('content')) return;
-    var self = this;
     Em.run.once(this, 'valueObserverCallback');
   }.observes('content.@each.value'),
 
@@ -138,6 +139,7 @@ App.TimeIntervalSpinnerView = App.ConfigWidgetView.extend({
 
   /**
    * Check for property modification.
+   * @method checkModified
    */
   checkModified: function() {
     this.set('valueIsChanged', this.configValueByWidget(this.get('content')) != parseInt(this.get('config.defaultValue')));

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js b/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js
index 5ee713c..0eb9ab9 100644
--- a/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js
+++ b/ambari-web/app/views/common/configs/widgets/toggle_config_widget_view.js
@@ -19,12 +19,12 @@
 var App = require('app');
 
 /**
- * Toggle wiget view for config property.
+ * Toggle widget view for config property.
  * @type {Em.View}
  */
 App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({
   templateName: require('templates/common/configs/widgets/toggle_config_widget'),
-  classNames: ['widget', 'toggle-widget'],
+  classNames: ['widget-config', 'toggle-widget'],
 
   /**
    * Saved switcher for current config.
@@ -68,8 +68,11 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({
     // plugin should be initiated after applying binding for switcherValue
     Em.run.later('sync', function() {
       this.initSwitcher();
+      this.toggleWidgetState();
+      this.initPopover();
     }.bind(this), 10);
     this.addObserver('switcherValue', this.updateConfigValue);
+    this._super();
   },
 
   /**
@@ -80,7 +83,7 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({
   initSwitcher: function () {
     var labels = this.get('config.stackConfigProperty.valueAttributes.entries'),
       self = this;
-    if (this.$("input")) {
+    if (this.$()) {
       var switcher = this.$("input").bootstrapSwitch({
         onText: labels[0].label,
         offText: labels[1].label,
@@ -105,6 +108,17 @@ App.ToggleConfigWidgetView = App.ConfigWidgetView.extend({
     var value = this.getNewSwitcherValue(this.get('config.value'));
     this.get('switcher').bootstrapSwitch('toggleState', value);
     this.set('switcherValue', value);
-  }
+  },
+
+  /**
+   * Enable/disable switcher basing on config isEditable value
+   * @method toggleWidgetState
+   */
+  toggleWidgetState: function () {
+    if (this.get('switcher')){
+      this.get('switcher').bootstrapSwitch('disabled', !this.get('config.isEditable'));
+    }
+    this._super();
+  }.observes('config.isEditable')
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/747c3b88/ambari-web/app/views/common/controls_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/controls_view.js b/ambari-web/app/views/common/controls_view.js
index 364cd92..b661a8b 100644
--- a/ambari-web/app/views/common/controls_view.js
+++ b/ambari-web/app/views/common/controls_view.js
@@ -679,7 +679,7 @@ App.ServiceConfigRadioButton = Ember.Checkbox.extend({
         components.forEach(function (_component) {
           if (_component.foreignKeys) {
             _component.foreignKeys.forEach(function (_componentName) {
-              if (this.get('parentView.parentView.serviceConfigs').someProperty('name', _componentName)) {
+              if (this.get('parentView.parentView.serviceConfigs') && this.get('parentView.parentView.serviceConfigs').someProperty('name', _componentName)) {
                 var component = this.get('parentView.parentView.serviceConfigs').findProperty('name', _componentName);
                 component.set('isVisible', _component.displayName === this.get('value'));
               }


Mime
View raw message