You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2015/04/01 01:46:04 UTC

ambari git commit: AMBARI-10262. Provide ability to filter enhanced configs (Richard Zang via srimanth)

Repository: ambari
Updated Branches:
  refs/heads/trunk d7fcd258d -> 9b4c5a2e6


AMBARI-10262. Provide ability to filter enhanced configs (Richard Zang via srimanth)


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

Branch: refs/heads/trunk
Commit: 9b4c5a2e6de047d36535e1b0ad96bd585f742e08
Parents: d7fcd25
Author: Srimanth Gunturi <sg...@hortonworks.com>
Authored: Tue Mar 31 16:45:44 2015 -0700
Committer: Srimanth Gunturi <sg...@hortonworks.com>
Committed: Tue Mar 31 16:45:44 2015 -0700

----------------------------------------------------------------------
 .../templates/common/configs/service_config.hbs |  8 +-
 .../configs/service_config_layout_tab.hbs       |  7 +-
 .../configs/widgets/list_config_widget.hbs      |  2 +-
 .../configs/widgets/slider_config_widget.hbs    |  3 +-
 .../configs/service_config_layout_tab_view.js   | 90 ++++++++++++++++++++
 .../views/common/configs/service_config_view.js | 10 ++-
 6 files changed, 111 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/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 26c7c2f..e2da5ee 100644
--- a/ambari-web/app/templates/common/configs/service_config.hbs
+++ b/ambari-web/app/templates/common/configs/service_config.hbs
@@ -91,7 +91,9 @@
   {{#if view.supportsConfigLayout}}
     <ul class="nav nav-tabs">
       {{#each tab in view.tabs}}
-        <li {{bindAttr class="tab.isActive:active" }}><a href="#" {{bindAttr data-target="tab.headingClass"}} data-toggle="tab">{{tab.displayName}}</a></li>
+        {{#unless tab.isHiddenByFilter}}
+          <li {{bindAttr class="tab.isActive:active" }}><a href="#" {{action "setActiveTab" tab target="view"}} {{bindAttr data-target="tab.headingClass"}} data-toggle="tab">{{tab.displayName}}</a></li>
+        {{/unless}}
       {{/each}}
     </ul>
     <div class="tab-content">
@@ -108,8 +110,8 @@
               </div>
             {{/each}}
           {{else}}
-            {{! Render Enhanced Config Section }}
-            {{view App.ServiceConfigLayoutTabView contentBinding="tab"}}
+              {{! Render Enhanced Config Section }}
+              {{view App.ServiceConfigLayoutTabView contentBinding="tab"}}
           {{/if}}
         </div>
       {{/each}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/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 9e3d601..ecf2e23 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
@@ -15,19 +15,19 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 }}
-
+{{#unless tab.isHiddenByFilter}}
 <div class="section-layout-container">
   <table class="config-section-table">
     {{#each row in tab.sectionRows}}
       <tr>
         {{#each section in row}}
-          <td class="config-section" {{bindAttr colspan="section.columnSpan" rowspan="section.rowSpan"}}>
+          <td {{bindAttr class="section.isHiddenByFilter:invisible :config-section" colspan="section.columnSpan" rowspan="section.rowSpan"}}>
             <h3>{{section.displayName}}</h3>
             <table class="config-subsection-table">
               {{#each subRow in section.subsectionRows}}
                 <tr>
                   {{#each subsection in subRow}}
-                    <td class="config-subsection">
+                    <td {{bindAttr class="subsection.isHiddenByFilter:invisible :config-subsection"}}>
                       {{#each config in subsection.configs}}
                         {{#if config.view}}
                           {{#unless config.isHiddenByFilter}}
@@ -46,3 +46,4 @@
     {{/each}}
   </table>
 </div>
+{{/unless}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/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 8f6e5da..91ebd15 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
@@ -16,7 +16,7 @@
 * limitations under the License.
 }}
 
-<div class="widget list-widget">
+<div {{bindAttr class="view.config.isHiddenByFilter:hide :widget :list-widget"}}>
   {{view.configLabel}}
   <div class="btn-group">
     <a class="btn dropdown-toggle" data-toggle="dropdown">{{view.displayVal}} <span class="caret"></span></a>

http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/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 537c349..e4e7f24 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,7 +16,8 @@
 * limitations under the License.
 }}
 
-<div class="widget slider-widget">
+
+<div {{bindAttr class="view.config.isHiddenByFilter:hide :widget :slider-widget"}}>
   {{#if view.isOriginalSCP}}
     <p>{{formatWordBreak view.configLabel}}</p>
   {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/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 a48dba9..866e9b6 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
@@ -103,6 +103,96 @@ App.ServiceConfigLayoutTabView = Em.View.extend(App.ConfigOverridable, {
     });
   },
 
+  /**
+   * Mark isHiddenByFilter flag for configs, sub-sections, and tab
+   */
+  filterEnhancedConfigs: function () {
+    var self = this;
+    this.get('content.sectionRows').forEach(function (row) {
+      row.forEach(function (section) {
+        section.get('subsectionRows').forEach(function (subRow) {
+          subRow.forEach(function (subsection) {
+            subsection.get('configs').forEach(function (config) {
+              $('.popover').remove();
+              var filter = self.get('parentView.filter');
+              var selectedFilters = self.get('parentView.columns').filterProperty('selected');
+
+              if (selectedFilters.length > 0 || filter.length > 0 || self.get('state') === 'inDOM') {
+                // process selected filters
+                var passesFilters = true;
+                selectedFilters.forEach(function (filter) {
+                  if (config.get(filter.attributeName) !== filter.attributeValue) {
+                    passesFilters = false;
+                  }
+                });
+
+                if (!passesFilters) {
+                  config.set('isHiddenByFilter', true);
+                  return false;
+                }
+
+                // process input filter
+                var searchString = config.get('defaultValue') + config.get('description') +
+                config.get('displayName') + config.get('name') + config.get('value');
+                if (config.get('overrides')) {
+                  config.get('overrides').forEach(function (overriddenConf) {
+                    searchString += overriddenConf.get('value') + overriddenConf.get('group.name');
+                  });
+                }
+
+                if (filter != null && typeof searchString === "string") {
+                  config.set('isHiddenByFilter', !(searchString.toLowerCase().indexOf(filter) > -1));
+                } else {
+                  config.set('isHiddenByFilter', false);
+                }
+              }
+            });
+            // check subsection
+            var allConfigs = subsection.get('configs');
+            var allHiddenConfigs = allConfigs.filterProperty('isHiddenByFilter');
+            var configsLength = allConfigs.get('length');
+            if (configsLength > 0 && configsLength == allHiddenConfigs.length) {
+              subsection.set('isHiddenByFilter', true);
+            } else {
+              subsection.set('isHiddenByFilter', false);
+            }
+          });
+        });
+        // check section
+        var allSubSections = section.get('subSections');
+        var allHiddenSubSections = allSubSections.filterProperty('isHiddenByFilter');
+        var subSectionsLength = allSubSections.get('length');
+        if (subSectionsLength > 0 && subSectionsLength == allHiddenSubSections.length) {
+          section.set('isHiddenByFilter', true);
+        } else {
+          section.set('isHiddenByFilter', false);
+        }
+      });
+    });
+    // process show/hide state for tab
+    var tab = this.get('content');
+    if (!tab.get('isAdvanced')) {
+      var allSections = tab.get('sections');
+      var allHiddenSections = allSections.filterProperty('isHiddenByFilter');
+      var sectionsLength = allSections.get('length');
+      // if all sections in tab are hidden by filter, do not show the tab
+      if (sectionsLength > 0 && sectionsLength == allHiddenSections.length) {
+        tab.set('isHiddenByFilter', true);
+        tab.set('isActive', false);
+      } else {
+        tab.set('isHiddenByFilter', false);
+      }
+    }
+    // no more active tab? pick the first non hidden tab and make it active
+    var activeTab = this.get('parentView.tabs').findProperty('isActive', true);
+    if (!activeTab) {
+      var nonHiddenTabs = this.get('parentView.tabs').filter(function (tab) {
+        return !(tab.get('isHiddenByFilter') === true);
+      });
+      nonHiddenTabs.get('firstObject').set('isActive', true);
+    }
+  }.observes('parentView.filter', 'parentView.columns.@each.selected'),
+
   willInsertElement: function () {
     this._super();
     this.prepareConfigProperties();

http://git-wip-us.apache.org/repos/asf/ambari/blob/9b4c5a2e/ambari-web/app/views/common/configs/service_config_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/service_config_view.js b/ambari-web/app/views/common/configs/service_config_view.js
index 3f06e15..97d74f3 100644
--- a/ambari-web/app/views/common/configs/service_config_view.js
+++ b/ambari-web/app/views/common/configs/service_config_view.js
@@ -90,6 +90,14 @@ App.ServiceConfigView = Em.View.extend({
       'App.router.wizardStep7Controller.selectedConfigGroup.name'
   ),
 
+  setActiveTab: function (event) {
+    this.get('tabs').forEach(function (tab) {
+      tab.set('isActive', false);
+    });
+    var currentTab = event.context;
+    currentTab.set('isActive', true);
+  },
+
   /**
    * Object that used for Twitter Bootstrap tabs markup.
    *
@@ -100,8 +108,8 @@ App.ServiceConfigView = Em.View.extend({
       return Em.A([]);
     }
     var tabs = App.Tab.find().filterProperty('serviceName', this.get('controller.selectedService.serviceName'));
-    // make first tab active
     this.processTabs(tabs);
+    // make first tab active
     tabs.get('firstObject').set('isActive', true);
     return tabs;
   }.property('controller.selectedService.serviceName'),