You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ni...@apache.org on 2017/01/03 11:43:11 UTC

[06/20] ambari git commit: AMBARI-19321 : Hive View 2.0 - Minimal view for Hive which includes new UI changes. Also made changes in poms as required (nitirajrathore)

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/services/alert-messages.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/alert-messages.js b/contrib/views/hive20/src/main/resources/ui/app/services/alert-messages.js
new file mode 100644
index 0000000..ed4cff1
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/alert-messages.js
@@ -0,0 +1,144 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+
+/**
+  Shows alert flash and also creates `alert` objects in store. If creation of
+  `alert` objects in store pass `options.flashOnly` as `true`. The options
+  required for creating the `alert` objects are:
+  ```
+    options.message: message field returned by the API server.
+    options.status : Status XHR request if the message is a response to XHR request. Defaults to -1.
+    options.error: Detailed error to be displayed.
+  ```
+  Options required for ember-cli-flash can also be passed in the alertOptions to override the
+  default behaviour.
+*/
+export default Ember.Service.extend({
+  flashMessages: Ember.inject.service('flash-messages'),
+  store: Ember.inject.service('store'),
+  alertsChanged: false,
+
+  currentUnreadMessages: function() {
+   return this.get('store').peekAll('alert').filter((entry) => {
+     return entry.get('read') === false;
+   });
+  },
+
+  setUnreadMessagesToRead: function() {
+    this.currentUnreadMessages().forEach((entry) => {
+      entry.set('read', true);
+    });
+    this.toggleProperty('alertsChanged');
+  },
+
+  currentMessagesCount: Ember.computed('alertsChanged', function() {
+    return this.currentUnreadMessages().get('length');
+  }),
+
+  success: function(message, options = {}, alertOptions = {}) {
+    this._processMessage('success', message, options, alertOptions);
+  },
+
+  warn: function(message, options = {}, alertOptions = {}) {
+    this._processMessage('warn', message, options, alertOptions);
+  },
+
+  info: function(message, options = {}, alertOptions = {}) {
+    this._processMessage('info', message, options, alertOptions);
+  },
+
+  danger: function(message, options = {}, alertOptions = {}) {
+    this._processMessage('danger', message, options, alertOptions);
+  },
+
+  clearMessages: function() {
+    this.get('flashMessages').clearMessages();
+  },
+
+  _processMessage: function(type, message, options, alertOptions) {
+    this._clearMessagesIfRequired(alertOptions);
+    let alertRecord = this._createAlert(message, type, options, alertOptions);
+    if(alertRecord) {
+      this.toggleProperty('alertsChanged');
+      message = this._addDetailsToMessage(message, alertRecord);
+    }
+    switch (type) {
+      case 'success':
+        this.get('flashMessages').success(message, this._getOptions(alertOptions));
+        break;
+      case 'warn':
+        this.get('flashMessages').warning(message, this._getOptions(alertOptions));
+        break;
+      case 'info':
+        this.get('flashMessages').info(message, this._getOptions(alertOptions));
+        break;
+      case 'danger':
+        this.get('flashMessages').danger(message, this._getOptions(alertOptions));
+    }
+  },
+
+  _addDetailsToMessage: function(message, record) {
+    let id = record.get('id');
+    let suffix = `<a href="#/messages/${id}">(details)</a>`;
+    return message + "  " + suffix;
+  },
+
+  _createAlert: function(message, type, options, alertOptions) {
+    var data = {};
+    data.message = message;
+    data.responseMessage = options.message || '';
+    data.id = this._getNextAlertId();
+    data.type = type;
+    data.status = options.status || -1;
+    data.trace = this._getDetailedError(options.trace);
+    delete options.status;
+    delete options.error;
+
+    if(alertOptions.flashOnly === true) {
+      return;
+    }
+    return this.get('store').createRecord('alert', data);
+  },
+
+  _getDetailedError: function(error) {
+    return error || '';
+  },
+
+  _getOptions: function(options = {}) {
+    var defaultOptions = {
+      priority: 100,
+      showProgress: true,
+      timeout: 6000
+    };
+    return Ember.merge(defaultOptions, options);
+  },
+
+  _getNextAlertId: function() {
+    return this.get('store').peekAll('alert').get('length') + 1;
+  },
+
+  _clearMessagesIfRequired: function(options = {}) {
+    var stackMessages = options.stackMessages || false;
+    if(stackMessages !== true) {
+      this.clearMessages();
+    }
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/services/create-table.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/create-table.js b/contrib/views/hive20/src/main/resources/ui/app/services/create-table.js
new file mode 100644
index 0000000..135f96a
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/create-table.js
@@ -0,0 +1,182 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+  store: Ember.inject.service(),
+
+  submitCreateTable(database, settings) {
+    let detailedInfo = this._getDetailedInfo(settings);
+    let storageInfo = this._getStorageInfo(settings);
+    let columns = this._getColumns(settings);
+    let partitionColumns = this._getPartitionColumns(settings);
+
+    let tableInfo = Ember.Object.create({
+      database: database,
+      table: settings.name,
+      columns: columns,
+      partitionInfo: { columns: partitionColumns },
+      detailedInfo: detailedInfo,
+      storageInfo: storageInfo
+    });
+    return new Promise((resolve, reject) => {
+      this.get('store').adapterFor('table').createTable(tableInfo).then((data) => {
+        this.get('store').pushPayload({job: data});
+        resolve(this.get('store').peekRecord('job', data.id));
+      }, (err) => {
+        reject(err);
+      });
+    });
+  },
+
+  waitForJobToComplete(jobId, after) {
+    return new Ember.RSVP.Promise((resolve, reject) => {
+      Ember.run.later(() => {
+        this.get('store').findRecord('job', jobId, {reload: true})
+          .then((job) => {
+            let status = job.get('status').toLowerCase();
+            if (status === 'succeeded') {
+              this._fetchDummyResult(jobId);
+              resolve();
+            } else if (status === 'error') {
+              reject()
+            } else {
+              resolve(this.waitForJobToComplete(jobId, after));
+            }
+          }, (error) => {
+            reject(error);
+          });
+      }, after);
+    });
+  },
+
+  _fetchDummyResult(jobId) {
+    this.get('store').adapterFor('job').fetchResult(jobId);
+  },
+
+  _getDetailedInfo(settings) {
+    let detailedInfo = {};
+    detailedInfo['parameters'] = this._getTableProperties(settings);
+
+    if (!Ember.isEmpty(settings.settings.location)) {
+      detailedInfo['location'] = settings.settings.location;
+    }
+
+    return detailedInfo;
+
+  },
+
+  _getStorageInfo(settings) {
+    const storageSettings = settings.settings;
+    let storageInfo = {};
+    let parameters = {};
+
+
+
+    if (!(Ember.isEmpty(storageSettings.fileFormat) || Ember.isEmpty(storageSettings.fileFormat.type))) {
+      storageInfo.fileFormat = storageSettings.fileFormat.type;
+      if (storageSettings.fileFormat.type === 'CUSTOM Serde') {
+        storageInfo.inputFormat = storageSettings.inputFormat;
+        storageInfo.outputFormat = storageSettings.outputFormat;
+      }
+    }
+
+    if (!Ember.isEmpty(storageSettings.rowFormat)) {
+      let addParameters = false;
+      if (!Ember.isEmpty(storageSettings.rowFormat.fieldTerminatedBy)) {
+        parameters['field.delim'] = String.fromCharCode(storageSettings.rowFormat.fieldTerminatedBy.id);
+        addParameters = true;
+      }
+
+      if (!Ember.isEmpty(storageSettings.rowFormat.linesTerminatedBy)) {
+        parameters['line.delim'] = String.fromCharCode(storageSettings.rowFormat.linesTerminatedBy.id);
+        addParameters = true;
+      }
+
+      if (!Ember.isEmpty(storageSettings.rowFormat.nullDefinedAs)) {
+        parameters['serialization.null.format'] = String.fromCharCode(storageSettings.rowFormat.fieldTerminatedBy.id);
+        addParameters = true;
+      }
+
+      if (!Ember.isEmpty(storageSettings.rowFormat.escapeDefinedAs)) {
+        parameters['escape.delim'] = String.fromCharCode(storageSettings.rowFormat.linesTerminatedBy.id);
+        addParameters = true;
+      }
+
+      if (addParameters) {
+        storageInfo.parameters = parameters;
+      }
+    }
+
+    if (!Ember.isEmpty(settings.settings.numBuckets)) {
+      storageInfo['numBuckets'] = settings.settings.numBuckets;
+    }
+
+    let clusteredColumnNames =  settings.columns.filterBy('isClustered', true).map((column) => {
+      return column.get('name');
+    });
+
+    if (clusteredColumnNames.length > 0) {
+      storageInfo['bucketCols'] = clusteredColumnNames;
+    }
+
+    return storageInfo;
+  },
+
+  _getColumns(settings) {
+    return settings.columns.filterBy('isPartitioned', false).map((column) => {
+      return {
+        name: column.get('name'),
+        type: column.get('type.label'),
+        comment: column.get('comment'),
+        precision: column.get('precision'),
+        scale: column.get('scale')
+      }
+    });
+  },
+
+  _getPartitionColumns(settings) {
+    return settings.columns.filterBy('isPartitioned', true).map((column) => {
+      return {
+        name: column.get('name'),
+        type: column.get('type.label'),
+        comment: column.get('comment'),
+        precision: column.get('precision'),
+        scale: column.get('scale')
+      }
+    });
+  },
+
+  _getTableProperties(settings) {
+    let properties = {};
+    settings.properties.forEach(function (property) {
+      properties[property.key] = property.value;
+    });
+
+    if (settings.settings.transactional) {
+      if (Ember.isEmpty(properties['transactional'])) {
+        properties['transactional'] = true;
+      }
+    }
+
+    return properties;
+  }
+
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js b/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
new file mode 100644
index 0000000..4928e5c
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/jobs.js
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+  store: Ember.inject.service(),
+  getQuery(jobId) {
+    return this.get('store').findRecord('job', jobId).then((job) => {
+      return this.get('store').findRecord('file', job.get('queryFile'));
+    })
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/services/keep-alive.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/keep-alive.js b/contrib/views/hive20/src/main/resources/ui/app/services/keep-alive.js
new file mode 100644
index 0000000..6bb12fb
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/keep-alive.js
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+  store: Ember.inject.service(),
+  initialize: function() {
+    this.schedulePing();
+  },
+
+  schedulePing() {
+    this.get('store').adapterFor('ping').ping();
+    Ember.run.later(this.schedulePing.bind(this), 60000);
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/services/query.js
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/query.js b/contrib/views/hive20/src/main/resources/ui/app/services/query.js
new file mode 100644
index 0000000..5a2f62d
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/services/query.js
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+
+  store: Ember.inject.service(),
+
+  createJob(payload){
+    return new Promise( (resolve, reject) => {
+      this.get('store').adapterFor('query').createJob(payload).then(function(data) {
+        resolve(data);
+      }, function(err) {
+        reject(err);
+      });
+    });
+  },
+  getJob(jobId, dateSubmitted, firstCall){
+    let self = this;
+    return new Promise( (resolve, reject) => {
+      this.get('store').adapterFor('query').getJob(jobId, dateSubmitted, firstCall).then(function(data) {
+        resolve(data);
+      }, function(err) {
+          reject(err);
+      });
+    });
+  }
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
new file mode 100644
index 0000000..812ae92
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/app.scss
@@ -0,0 +1,774 @@
+/**
+ * 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.
+ */
+
+@import 'bootstrap-overrides';
+@import 'fonts';
+
+@import "ember-modal-dialog/ember-modal-structure";
+@import "ember-modal-dialog/ember-modal-appearance";
+
+@import "power-select-overrides";
+
+
+.ember-modal-dialog {
+  box-shadow: 0 0 5px grey;
+  padding: 0;
+}
+.ember-modal-overlay.translucent {
+  z-index: 110;
+  background-color: rgba(#808080, .77);
+}
+
+
+.main-wrapper {
+  padding: 5px 0;
+  background-color: #fff;
+  height: 100%;
+}
+
+.fa-2 {
+  font-size: 2em;
+}
+
+$database-search-background: lighten($body-bg, 10%);
+$database-search-text-color: $gray;
+.database-search, .multiple-database-search {
+  color:  $database-search-text-color;
+  padding: 10px;
+  border: 1px solid darken($database-search-background, 25%);
+  background-color: $database-search-background;
+  border-collapse: collapse;
+  margin-bottom: 10px;
+
+  p {
+    margin-bottom: 5px;
+  }
+
+  .btn {
+    color: $database-search-text-color;
+  }
+
+  .ember-power-select-trigger{
+    border: 1px solid darken($database-search-background, 25%);
+    line-height: 3.2em;
+  }
+
+  .ember-power-select-trigger-multiple-input {
+    font-size: 18px;
+    padding: 0 16px;
+  }
+}
+
+.ember-power-select-option[aria-current="true"]{
+  color: #555;
+  background-color: #f5f5f5;
+}
+
+.ember-power-select-multiple-option {
+  border-radius: 3px;
+  border: 1px solid #ddd;
+  color: #555;
+  background-color: #e4e4e4;
+  padding: 0 4px;
+  display: inline-block;
+  line-height: 2;
+  float: left;
+  margin: 5px 0 2px 3px;
+}
+
+.ember-power-select-dropdown.ember-basic-dropdown-content--below, .ember-power-select-dropdown.ember-basic-dropdown-content--in-place {
+  border-top: none;
+  border-bottom: 1px solid #64A5ED;
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+  border: 1px solid darken($database-search-background, 25%);
+}
+
+
+.database-search-drawer {
+  position: absolute;
+  max-height: 300px;
+  width: calc(100% - 157px);
+  z-index: 1000;
+  background-color: $database-search-background;
+  border: 1px solid darken($database-search-background, 25%);
+  overflow-y: auto;
+  border-top: none;
+
+  .list-group {
+    margin: 0;
+    font-size: 1.2em;
+    .list-group-item {
+      border-color: darken($database-search-background, 10%);
+      i {
+        &.noshow {
+          visibility: hidden;
+        }
+      }
+    }
+  }
+}
+
+$list-filter-header-background: lighten($body-bg, 10%);
+$list-filter-text-color: $gray;
+
+.list-filter {
+  color:  $list-filter-text-color;
+  .list-header {
+    p {
+      margin: 0;
+    }
+    padding: 15px 10px;
+    background-color: $list-filter-header-background;
+    border: 1px solid darken($list-filter-header-background, 15%);
+  }
+  .am-view-list-item {
+    &.active {
+      color: inherit;
+      background-color: #FEF5DD;
+      border: 1px solid darken($list-filter-header-background, 15%);
+    }
+  }
+}
+
+.table-list {
+  .list-group-item {
+    background-color: lighten($body-bg, 10%);
+  }
+}
+
+.search-bar {
+  padding: 0 10px;
+  background-color: darken($list-filter-header-background, 10%);
+  position: relative;
+  input {
+    width: calc(100% - 2.5em);
+    height: 2.8em;
+    background-color: transparent;
+    border: none;
+    margin-right: 10px;
+    outline: none;
+  }
+
+  a {
+    color: inherit;
+  }
+}
+
+$table-info-background: lighten($body-bg, 10%);
+.table-info {
+
+  background-color: $body-bg;
+  .table-header {
+    border: 1px solid darken($table-info-background, 15%);
+    p {
+      margin: 0;
+    }
+    padding: 15px 15px;
+    background-color: $table-info-background;
+  }
+  .table-body {
+    table {
+      background-color: $table-info-background;
+      margin: 0;
+      border: none;
+
+      thead {
+        background-color: $gray-dark;
+        color: #fff;
+      }
+    }
+  }
+}
+
+.table-name-input {
+  padding-top: 10px;
+  margin-bottom: -1px;
+  border-bottom: 1px solid darken($table-info-background, 25%);
+}
+
+pre {
+  &.table-info-json {
+    border: none;
+    background-color: inherit;
+  }
+}
+
+.dipayan {
+  .CodeMirror {
+    height: 100vh;
+  }
+}
+
+.dipayan123 {
+  background-color: lighten($body-bg, 5%);
+  height: calc(100vh - 180px);
+  overflow-y: scroll;
+}
+
+.hv-dropdown {
+  position: absolute;
+  .dropdown-menu {
+    margin-top: -1px;
+    padding: 0;
+    min-width: 200px;
+    a {
+      line-height: 1.5em;
+      font-size: 1em;
+      padding: 5px 15px 5px 15px;
+      &:hover {
+        background-color: #FEF5DD;
+      }
+      i {
+        padding-right: 10px;
+      }
+    }
+  }
+
+  &.tables-dropdown {
+    z-index: 100;
+    top: 8px;
+    right: 15px;
+  }
+
+  &.database-dropdown {
+    top: 18px;
+    right: 30px;
+  }
+}
+
+.new-settings {
+  background-color: #FEF5DD;
+  a {
+    text-decoration: none;
+    display: block;
+    width: 100%
+  }
+}
+
+.create-table-inner {
+  //min-height: 400px;
+}
+
+.create-table-controls {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+
+.column-precision {
+  width: 100%;
+  padding-top: 5px;
+  input {
+    width: 50%;
+    //padding-right: 5px;
+  }
+}
+
+.query-editor {
+  border: 1px solid darken($database-search-background, 25%);
+  margin-right: 0;
+}
+
+.query-editor-controls {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+
+.database-panel{
+
+  .panel-heading {
+    border: 1px solid #ddd;
+  }
+  .panel-default{
+    border: 0;
+    .panel-body{
+      padding: 0;
+    }
+  }
+
+  .list-header{
+    display: none;
+  }
+
+  .empty {
+    border: 1px solid #ddd;
+    border-top: none;
+    padding: 10px 15px;
+  }
+}
+
+.hdfs-viewer {
+  .modal-header {
+    p {
+      margin-top: 10px;
+      margin-bottom: 0;
+    }
+  }
+  .hdfs-viewer-wrap {
+    max-height: 300px;
+    border: 1px solid darken($table-info-background, 15%);
+    overflow-y: scroll;
+  }
+}
+
+.create-table-advanced-wrap {
+  padding: 10px;
+}
+
+.fileformat-custom-row {
+  margin-top: 10px;
+  border-top: 1px solid darken($table-info-background, 15%);
+  padding-top: 10px;
+}
+
+.rowformat-custom-row {
+  a {
+    i {
+      margin-top: 10px;
+    }
+  }
+}
+
+.alert {
+  &.create-table-error {
+    margin: 0;
+  }
+}
+
+
+.query-result-table{
+
+  .spinner,
+  .tip {
+    text-align: center
+  }
+
+  .spinner {
+    margin: 15px auto;
+    width: 50px;
+    height: 50px;
+    font-size: 10px
+  }
+
+  .spinner>div {
+    background-color: #dd6a58;
+    height: 100%;
+    width: 4px;
+    display: inline-block;
+    animation: sk-stretchdelay 1.2s infinite ease-in-out
+  }
+
+  .spinner .rect2 {
+    animation-delay: -1.1s
+  }
+
+  .spinner .rect3 {
+    animation-delay: -1s
+  }
+
+  .spinner .rect4 {
+    animation-delay: -.9s
+  }
+
+  .spinner .rect5 {
+    animation-delay: -.8s
+  }
+
+  @keyframes sk-stretchdelay {
+    0%,
+    100%,
+    40% {
+      transform: scaleY(.4);
+      -webkit-transform: scaleY(.4)
+    }
+    20% {
+      transform: scaleY(1);
+      -webkit-transform: scaleY(1)
+    }
+  }
+
+  .ember-light-table {
+    width: 95%;
+    margin: 0 auto;
+    border-collapse: collapse
+  }
+
+  .ember-light-table .multi-select {
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none
+  }
+
+  .ember-light-table tfoot .lt-column {
+    border-top: 1px solid #DADADA
+  }
+
+  .ember-light-table thead .lt-column {
+    border-bottom: 1px solid #DADADA
+  }
+
+  .ember-light-table tfoot th.is-dragging,
+  .ember-light-table thead th.is-dragging {
+    opacity: .75;
+    background: #eee
+  }
+
+  .ember-light-table tfoot th.is-drag-target.drag-right,
+  .ember-light-table thead th.is-drag-target.drag-right {
+    border-right: 1px dotted #DADADA
+  }
+
+  .ember-light-table tfoot th.is-drag-target.drag-left,
+  .ember-light-table thead th.is-drag-target.drag-left {
+    border-left: 1px dotted #DADADA
+  }
+
+  .ember-light-table .lt-column {
+    font-weight: 200;
+    font-size: 12px;
+    padding: 10px
+  }
+
+  .ember-light-table .lt-column .lt-sort-icon {
+    width: 15px
+  }
+
+  .ember-light-table .lt-column.lt-group-column {
+    border: none!important;
+    padding-bottom: 10px
+  }
+
+  .ember-light-table .lt-column .lt-column-resizer {
+    border-right: 1px dashed #ccc;
+    border-left: 1px dashed #ccc
+  }
+
+  .ember-light-table .lt-row {
+    height: 50px
+  }
+
+  .ember-light-table .lt-row.is-selected {
+    background-color: #DEDEDE!important
+  }
+
+  .ember-light-table .lt-row:not(.is-selected):hover {
+    background-color: #F5F4F4!important
+  }
+
+  .ember-light-table .lt-row:last-of-type td {
+    border-bottom-width: 0
+  }
+
+  .ember-light-table .lt-row.lt-expanded-row:hover,
+  .ember-light-table .lt-row.lt-no-data:hover {
+    background-color: transparent!important
+  }
+
+  .ember-light-table .lt-row.lt-expanded-row td,
+  .ember-light-table .lt-row.lt-no-data td {
+    padding: 15px
+  }
+
+  .ember-light-table .lt-row td {
+    border-color: #DADADA;
+    border-width: 0 0 1px;
+    border-style: solid;
+    font-size: 13px;
+    padding: 0 10px
+  }
+
+  tfoot tr>td {
+    border-top: 1px solid #DADADA;
+    padding: 10px 10px 0;
+    font-size: 13px
+  }
+
+  tfoot form {
+    display: -ms-flexbox;
+    display: flex;
+    -ms-flex-pack: justify;
+    justify-content: space-between
+  }
+
+  body,
+  html {
+    min-height: 100%;
+    min-width: 100%;
+    background-color: #F3F3F3;
+    height: 100%
+  }
+
+  label {
+    font-weight: 600
+  }
+
+  .navbar.navbar-default {
+    background-color: #fff;
+    margin: 0
+  }
+
+  .navbar.navbar-default .navbar-brand {
+    color: #797979;
+    font-size: 16px;
+    font-weight: 400
+  }
+
+  .navbar.navbar-default .navbar-brand img {
+    height: 32px;
+    display: inline-block;
+    margin-top: -15px
+  }
+
+  .navbar.navbar-default .navbar-brand span {
+    font-size: 12px;
+    vertical-align: super;
+    text-transform: uppercase;
+    color: #444
+  }
+
+  .navbar.navbar-default .navbar-nav>li>a {
+    font-size: 14px;
+    font-weight: 200
+  }
+
+  .navbar.navbar-default .navbar-nav>li>a.github {
+    font-size: 24px
+  }
+
+  .navbar.navbar-default .navbar-nav>li>a:focus,
+  .navbar.navbar-default .navbar-nav>li>a:hover {
+    color: #dd6a58
+  }
+
+  .navbar.navbar-default .navbar-nav>.active>a,
+  .navbar.navbar-default .navbar-nav>.active>a:focus,
+  .navbar.navbar-default .navbar-nav>.active>a:hover {
+    color: #dd6a58;
+    background-color: transparent
+  }
+
+  .panel {
+    width: 75%;
+    margin: 2.5% auto;
+    position: relative
+  }
+
+  .panel .table-actions {
+    position: absolute;
+    left: -41px;
+    width: 40px;
+    background-color: #fff;
+    border-bottom-left-radius: 5px;
+    border-top-left-radius: 5px;
+    border: 1px solid #ccc;
+    border-right-width: 0;
+    top: 35%;
+    cursor: pointer
+  }
+
+  .panel .table-actions .table-action {
+    font-size: 20px;
+    text-align: center;
+    display: block;
+    margin: 10px;
+    color: #191919;
+    opacity: .8
+  }
+
+  .panel .table-actions .table-action:active,
+  .panel .table-actions .table-action:hover {
+    opacity: 1
+  }
+
+  .panel .table-actions .table-action.delete {
+    color: #dd6a58
+  }
+
+  .panel .panel-heading {
+    background-color: #dd6a58;
+    padding: 0
+  }
+
+  .panel .panel-heading a {
+    color: #F9F9F9;
+    text-decoration: none
+  }
+
+  .panel .panel-heading a .panel-title {
+    font-weight: 200;
+    padding: 15px
+  }
+
+  .panel .code-snippet {
+    background-color: #f8f8f8;
+    max-height: 500px;
+    overflow: auto
+  }
+
+  .panel .code-snippet .nav-tabs li>a {
+    color: #8A8A8A;
+    border-radius: 2px 2px 0 0;
+    font-size: 12px
+  }
+
+  .panel .code-snippet .nav-tabs li.active>a {
+    background-color: #f8f8f8;
+    color: #696969
+  }
+
+  .panel .code-snippet .tab-content>.active {
+    padding: 15px 15px 0
+  }
+
+  .panel .code-snippet pre {
+    border: none;
+    margin: 0;
+    padding: 0
+  }
+
+  .table-container {
+    overflow-y: auto
+  }
+
+  .table-container.fixed-header {
+    overflow-y: hidden;
+    margin-bottom: 15px
+  }
+
+  .user-actions a {
+    color: #dd6a58;
+    padding-right: 10px;
+    font-size: 18px;
+    width: 30px;
+    text-decoration: none;
+    cursor: pointer;
+    padding-top: 10px
+  }
+
+  .user-actions a:active,
+  .user-actions a:focus,
+  .user-actions a:hover {
+    color: #d95743
+  }
+
+  .user-avatar {
+    border-radius: 50%;
+    border: 1px solid #ccc
+  }
+
+  .row-toggle {
+    color: #dd6a58;
+    cursor: pointer
+  }
+
+  .row-toggle:active,
+  .row-toggle:focus,
+  .row-toggle:hover {
+    color: #d95743
+  }
+
+  .tip {
+    font-size: 13px;
+    color: #4E4E4E
+  }
+
+  .tip .icon-info {
+    color: #dd6a58;
+    margin-right: 3px
+  }
+
+  form .form-group input,
+  form .form-group select {
+    outline: 0;
+    display: block;
+    width: 100%;
+    padding: 0 15px;
+    border: 1px solid #d9d9d9;
+    color: #6E6E6E;
+    font-family: Roboto, sans-serif;
+    -webkti-box-sizing: border-box;
+    box-sizing: border-box;
+    font-size: 14px;
+    font-weight: 400;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    transition: all .3s linear 0s;
+    box-shadow: none
+  }
+
+  form .form-group input:focus,
+  form .form-group select:focus {
+    color: #333;
+    border-color: #b9b9b9;
+    outline: 0;
+    box-shadow: none;
+    -webkit-box-shadow: none
+  }
+
+}
+
+.flash-messages-wrap {
+  position: absolute;
+  width: 40%;
+  min-width: 575px;
+  left: 50%;
+  margin-left: -20%;
+  z-index: 1000;
+}
+
+.flash-messages {
+  border-radius: $border-radius-large;
+  .alert-icon {
+    float: left;
+    margin-right: 15px;
+  }
+
+  .alert-message-wrap {
+    display: table;
+    min-height: 56px;
+    .alert-message {
+      display: table-cell;
+      vertical-align: middle;
+    }
+  }
+
+}
+
+.jobs-status {
+  border-top: 1px solid darken($body-bg, 10%);
+  border-bottom: 1px solid darken($body-bg, 10%);
+  .strip {
+    margin-top: 25px;
+  }
+}
+
+.jobs-table {
+  margin-top: 10px;
+}
+
+
+
+
+
+
+
+
+
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
new file mode 100644
index 0000000..ee9d373
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/bootstrap-overrides.scss
@@ -0,0 +1,51 @@
+/**
+ * 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.
+ */
+
+$font-family-sans-serif: 'Roboto', "Helvetica Neue", Helvetica, Arial, sans-serif;
+
+$body-bg: #e1e1e0;
+$border-radius-base:        3px;
+$border-radius-large:       4px;
+$border-radius-small:       2px;
+
+
+// nav-tabs
+$nav-link-padding:                          10px 20px !default;
+$nav-tabs-border-color:                     darken($body-bg, 15%);
+$nav-tabs-link-hover-border-color:          darken($body-bg, 15%);
+$nav-tabs-active-link-hover-bg:             #fff;
+$nav-tabs-active-link-hover-border-color:   darken($body-bg, 15%);
+
+@import 'bootstrap';
+
+.nav-tabs {
+  &.inverse {
+    li.active {
+       a {
+         background-color: $gray-dark;
+         color: #fff;
+       }
+    }
+  }
+  li {
+    a {
+      font-weight: bold;
+      color: darken($body-bg, 50%);
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/styles/fonts.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/fonts.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/fonts.scss
new file mode 100644
index 0000000..c22e38b
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/fonts.scss
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+
+/* roboto-regular - latin */
+@font-face {
+  font-family: 'Roboto';
+  font-style: normal;
+  font-weight: 400;
+  src: url('../fonts/roboto/roboto-v15-latin-regular.eot'); /* IE9 Compat Modes */
+  src: local('Roboto'), local('Roboto-Regular'),
+  url('../fonts/roboto/roboto-v15-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
+  url('../fonts/roboto/roboto-v15-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */
+  url('../fonts/roboto/roboto-v15-latin-regular.woff') format('woff'), /* Modern Browsers */
+  url('../fonts/roboto/roboto-v15-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */
+  url('../fonts/roboto/roboto-v15-latin-regular.svg#Roboto') format('svg'); /* Legacy iOS */
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/styles/power-select-overrides.scss
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/styles/power-select-overrides.scss b/contrib/views/hive20/src/main/resources/ui/app/styles/power-select-overrides.scss
new file mode 100644
index 0000000..5a52887
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/styles/power-select-overrides.scss
@@ -0,0 +1,24 @@
+/**
+ * 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.
+ */
+
+$ember-power-select-border-color: #64A5ED;
+$ember-power-select-border-radius: 0;
+$ember-power-select-line-height: 2.25;
+
+
+@import 'ember-power-select';

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
new file mode 100644
index 0000000..7d6259c
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/application.hbs
@@ -0,0 +1,42 @@
+{{!
+* 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.
+}}
+
+<div class="container-fluid">
+  <div class="flash-messages-wrap">
+    {{#each flashMessages.queue as |flash|}}
+      {{alert-message flash=flash}}
+    {{/each}}
+  </div>
+  <div class="row">
+    <div class="col-md-12">
+      {{top-application-bar}}
+      {{#tabs-pane tabs=tabs as |tab|}}
+        {{tabs-item tab=tab tabs=tabs}}
+      {{/tabs-pane}}
+    </div>
+  </div>
+  <div class="row">
+    <div class="main-wrapper clearfix">
+      <div class="col-md-12">
+        {{outlet}}
+      </div>
+
+    </div>
+  </div>
+
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/.gitkeep
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/.gitkeep b/contrib/views/hive20/src/main/resources/ui/app/templates/components/.gitkeep
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message-display.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message-display.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message-display.hbs
new file mode 100644
index 0000000..8dfa913
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message-display.hbs
@@ -0,0 +1,34 @@
+{{!
+* 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.
+}}
+
+
+<p><strong>{{{title}}}</strong></p>
+<div>
+  <pre class="prettyprint">
+    <small>
+      {{shortenedValue}}
+      {{#if shorten}}
+        {{#unless expanded}}
+          <a href="#" {{action "toggleExpanded"}}>(more...)</a>
+        {{else}}
+          <a href="#" {{action "toggleExpanded"}}>(less...)</a>
+        {{/unless}}
+      {{/if}}
+    </small>
+  </pre>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message.hbs
new file mode 100644
index 0000000..ce8d941
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/alert-message.hbs
@@ -0,0 +1,34 @@
+{{!
+* 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.
+}}
+
+<div class={{alert-message-context-class flash.type "clearfix alert alert-dismissible alert-"}}>
+  <button type="button" class="close" {{action "closeAlert"}}><span aria-hidden="true">&times;</span></button>
+  <div class="alert-icon wrap-message">
+    {{#fa-stack size=2}}
+      {{fa-icon "circle-thin" stack=2}}
+      {{fa-icon (alert-message-icon-class flash.type) stack=1}}
+    {{/fa-stack}}
+  </div>
+  <div class="alert-message-wrap wrap-message">
+    <div class="alert-message">
+      {{{flash.message}}}
+    </div>
+  </div>
+
+</div>
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/column-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/column-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/column-item.hbs
new file mode 100644
index 0000000..96cf5ab
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/column-item.hbs
@@ -0,0 +1,124 @@
+{{!
+* 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.
+}}
+
+<td>
+  <div class="{{if column.nameError 'has-error'}}">
+    {{input type="text" class="form-control" value=column.name disabled=(not column.editing)}}
+    {{#if column.nameError}}
+      <span class="help-block">{{column.nameError.error}}</span>
+    {{/if}}
+  </div>
+
+</td>
+<td>
+  {{#power-select
+    disabled=notEditing
+    selected=column.type
+    options=datatypes
+    searchField="label"
+    searchPlaceholder="Enter data type"
+    onchange=(action "typeSelectionMade") as |parameter|}}
+    {{parameter.label}}
+  {{/power-select}}
+</td>
+<td>
+  {{#if (or hasPrecision hasScale)}}
+    <div class="row">
+      {{#if hasPrecision}}
+        <div class="{{if hasScale 'col-md-6' 'col-md-12'}}">
+          <div class="{{if column.precisionError 'has-error'}}">
+            {{input type="text" class="form-control" placeholder="Precision" value=column.precision disabled=(not column.editing)}}
+            {{#if column.precisionError}}
+              <span class="help-block">{{column.precisionError.error}}</span>
+            {{/if}}
+          </div>
+        </div>
+      {{/if}}
+      {{#if hasScale}}
+        <div class="{{if hasPrecision 'col-md-6' 'col-md-12'}}">
+          <div class="{{if column.scaleError 'has-error'}}">
+            {{input type="text" class="form-control" placeholder="Scale" value=column.scale disabled=(not column.editing)}}
+            {{#if column.scaleError}}
+              <span class="help-block">{{column.scaleError.error}}</span>
+            {{/if}}
+          </div>
+        </div>
+      {{/if}}
+    </div>
+  {{/if}}
+
+</td>
+<td>
+  <div class="text-center">
+    <a {{action "advanceOptionToggle"}}>{{fa-icon "cog" size="lg"}}</a>
+  </div>
+  {{#if advancedOption}}
+    {{#modal-dialog
+      close="advanceOptionToggle"
+      translucentOverlay=true
+      clickOutsideToClose=true
+      container-class="modal-dialog"}}
+      <div class="modal-content">
+        <div class="modal-header text-danger">
+          <button type="button" class="close" {{action "advanceOptionToggle"}}><span aria-hidden="true">&times;</span></button>
+          <h4 class="modal-title">{{fa-icon "cog" size="lg"}} Advance Column Options</h4>
+        </div>
+        <div class="modal-body">
+          <div class="form-horizontal">
+            <div class="form-group">
+              <label for="inputPassword3" class="col-sm-2 control-label">Comment</label>
+              <div class="col-sm-10">
+                {{input type="text" class="form-control" placeholder="Comment" value=column.comment disabled=(not column.editing)}}
+              </div>
+            </div>
+
+            <div class="form-group">
+              <div class="col-sm-offset-2 col-sm-10">
+                <div class="checkbox">
+                  <label>
+                    {{input type="checkbox" checked=column.isPartitioned disabled=(not column.editing)}} Partitioned
+                  </label>
+                </div>
+              </div>
+              <div class="col-sm-offset-2 col-sm-10">
+                <div class="checkbox">
+                  <label>
+                    {{input type="checkbox" checked=column.isClustered disabled=(not column.editing)}} Clustering
+                  </label>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="modal-footer">
+          <button type="button" class="btn btn-success" {{action "advanceOptionToggle"}}>{{fa-icon "check"}} Done</button>
+        </div>
+      </div>
+    {{/modal-dialog}}
+  {{/if}}
+</td>
+<td>
+  <div class="text-center">
+    {{#unless column.editing}}
+      <button class="btn btn-success" {{action "edit"}}>{{fa-icon "check"}} Edit</button>
+    {{/unless}}
+    <button class="btn btn-danger" {{action "delete"}}>{{fa-icon "times"}} Delete</button>
+  </div>
+
+
+</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/create-table.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/create-table.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/create-table.hbs
new file mode 100644
index 0000000..f369783
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/create-table.hbs
@@ -0,0 +1,63 @@
+{{!
+* 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.
+}}
+
+<div class="row">
+  <div class="col-md-12 form-horizontal table-name-input">
+    <div class="form-group {{if hasTableNameError 'has-error'}}">
+      <label class="col-md-1 control-label">Name</label>
+      <div class="col-md-11">
+        {{input type="text" class="form-control" placeholder="Table name" value=tableName}}
+        {{#if hasTableNameError}}
+          <span class="help-block">Name cannot be empty</span>
+        {{/if}}
+      </div>
+    </div>
+  </div>
+</div>
+
+{{#tabs-pane tabs=tabs inverse=true as |tab|}}
+  {{tabs-item tab=tab tabs=tabs activate="activate"}}
+{{/tabs-pane}}
+
+<div class="create-table-inner">
+  <div class="row">
+    {{#each tabs as |tab|}}
+      {{#if tab.active}}
+        {{#if (eq tab.link "create.table.columns")}}
+          {{#if hasEmptyColumnsError}}
+            <div class="alert alert-danger create-table-error">
+              {{emptyColumnsErrorText}}
+            </div>
+          {{/if}}
+          {{table-columns columns=columns shouldAddBuckets=shouldAddBuckets}}
+        {{/if}}
+        {{#if (eq tab.link "create.table.properties")}}
+          {{table-properties properties=properties}}
+        {{/if}}
+        {{#if (eq tab.link "create.table.advanced")}}
+          {{table-advanced-settings settings=settings shouldAddBuckets=shouldAddBuckets errors=settingErrors}}
+        {{/if}}
+      {{/if}}
+    {{/each}}
+  </div>
+
+</div>
+<div class="create-table-controls">
+  <button class="btn btn-success" {{action "create"}}>{{fa-icon "plus"}} Create</button>
+  <button class="btn btn-warning" {{action "cancel"}}>{{fa-icon "times"}} Cancel</button>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-drop-confirm.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-drop-confirm.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-drop-confirm.hbs
new file mode 100644
index 0000000..efb54ac
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-drop-confirm.hbs
@@ -0,0 +1,37 @@
+{{!
+* 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.
+}}
+
+{{#modal-dialog
+close="cancel"
+translucentOverlay=true
+clickOutsideToClose=true
+container-class="modal-dialog"}}
+  <div class="modal-content">
+    <div class="modal-header text-danger">
+      <button type="button" class="close" {{action "cancel"}}><span aria-hidden="true">&times;</span></button>
+      <h4 class="modal-title">{{fa-icon "exclamation-triangle" size="lg"}} Confirm</h4>
+    </div>
+    <div class="modal-body text-center">
+      <p class="">Are you sure you want to drop <span class="text-uppercase"><strong>'{{name}}'</strong></span> database?</p>
+    </div>
+    <div class="modal-footer">
+      <button type="button" class="btn btn-default" {{action "cancel"}}>{{fa-icon "times"}} Cancel</button>
+      <button type="button" class="btn btn-primary" {{action "confirm"}}>{{fa-icon "check"}} Confirm</button>
+    </div>
+  </div><!-- /.modal-content -->
+{{/modal-dialog}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-not-empty.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-not-empty.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-not-empty.hbs
new file mode 100644
index 0000000..e11e898
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-not-empty.hbs
@@ -0,0 +1,38 @@
+{{!
+* 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.
+}}
+
+{{#modal-dialog
+close="close"
+translucentOverlay=true
+clickOutsideToClose=true
+container-class="modal-dialog"}}
+  <div class="modal-content">
+    <div class="modal-header text-danger">
+      <button type="button" class="close" {{action "close"}}><span aria-hidden="true">&times;</span></button>
+      <h4 class="modal-title">{{fa-icon "exclamation-triangle" size="lg"}} Error</h4>
+    </div>
+    <div class="modal-body text-center">
+      <p class="">Cannot drop database. Database <span class="text-uppercase"><strong>'{{name}}'</strong></span> is not empty !</p>
+      <div class="clearfix">
+        <div class="col-md-offset-4 col-md-4">
+          <button type="button" class="btn btn-warning btn-block" {{action "close"}}>{{fa-icon "times"}} Ok</button>
+        </div>
+      </div>
+    </div>
+  </div><!-- /.modal-content -->
+{{/modal-dialog}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-search-bar.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-search-bar.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-search-bar.hbs
new file mode 100644
index 0000000..d4ac704
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/database-search-bar.hbs
@@ -0,0 +1,57 @@
+{{!
+* 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.
+}}
+
+<div class="col-md-2">
+  <p class="text-left text-uppercase"><strong>{{heading}}</strong></p>
+  <p class="text-left text-muted"><small>{{subHeading}}</small></p>
+</div>
+<div class="col-md-9">
+  <div class="input-group input-group-lg">
+    {{#unless extendDrawer }}
+      {{input type="text" class="form-control display" value=selectedDatabase.name}}
+    {{else}}
+      {{input type="text" class="form-control search" value=filterText placeholder="Search Databases"}}
+    {{/unless}}
+
+    {{#if enableSecondaryAction}}
+      <div class="input-group-btn">
+        <button type="button" class="btn btn-default {{if extendDrawer 'active'}}" {{action 'secondaryActionClicked'}}>{{fa-icon secondaryActionFaIcon}} {{secondaryActionText}} <span class="caret"></span></button>
+      </div>
+    {{/if}}
+  </div>
+  {{#if extendDrawer }}
+    <div class="database-search-drawer">
+      <div class="list-group">
+        {{#each filteredDatabases as |database|}}
+            <a {{action "databaseClicked" database}} class="list-group-item {{if database.selected 'selected'}}">
+              {{#if database.selected}}
+                <div class="pull-right">
+                  {{fa-icon "check" size="lg"}}
+                </div>
+              {{/if}}
+
+              &nbsp;&nbsp;
+              {{fa-icon "database" size="lg"}}&nbsp;&nbsp;{{database.name}}
+            </a>
+        {{/each}}
+      </div>
+
+    </div>
+  {{/if}}
+</div>
+{{yield}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/edit-setting-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/edit-setting-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/edit-setting-item.hbs
new file mode 100644
index 0000000..5138696
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/edit-setting-item.hbs
@@ -0,0 +1,42 @@
+{{!
+* 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.
+}}
+
+<td>
+  {{#power-select
+    selected=selectedParam
+    options=hiveParameters
+    search=(action "searchAction")
+    searchField="name"
+    searchPlaceholder="Type the paramter"
+    onchange=(action "selectionMade") as |parameter|}}
+    {{parameter.name}}
+  {{/power-select}}
+</td>
+<td>
+  <div class="{{if invalid 'has-error'}}">
+    {{input type="text" class="form-control" value=selectedValue}}
+    {{#if invalid}}
+      <span class="help-block">{{currentError}}</span>
+    {{/if}}
+
+  </div>
+</td>
+<td>
+  <button class="btn btn-success" {{action "update"}}>{{fa-icon "save"}} update</button>
+  <button class="btn btn-danger" {{action "cancel"}}>{{fa-icon "times"}} cancel</button>
+</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/hdfs-viewer-modal.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/hdfs-viewer-modal.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/hdfs-viewer-modal.hbs
new file mode 100644
index 0000000..f3dce67
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/hdfs-viewer-modal.hbs
@@ -0,0 +1,50 @@
+{{!
+* 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.
+}}
+
+{{#modal-dialog
+  close="closeDirectoryViewer"
+  translucentOverlay=true
+  clickOutsideToClose=false
+  container-class="modal-dialog"}}
+  <div class="modal-content hdfs-viewer">
+    <div class="modal-header">
+      <div class="text-info">
+        <button type="button" class="close" {{action "closeDirectoryViewer"}}><span aria-hidden="true">&times;</span></button>
+        <h4 class="modal-title">{{fa-icon "database" size="lg"}} Select location</h4>
+      </div>
+      {{#if (and showSelectedPath hdfsLocation)}}
+        <p><strong>Current path:</strong> {{hdfsLocation}}</p>
+      {{/if}}
+
+    </div>
+    <div class="modal-body">
+      <div class="hdfs-viewer-wrap">
+        {{directory-viewer
+          config=config
+          errorAction="viewerError"
+          pathSelectAction="viewerSelectedPath"
+        }}
+      </div>
+    </div>
+
+    <div class="modal-footer">
+      <button type="button" class="btn btn-default" {{action "closeDirectoryViewer"}}>{{fa-icon "times"}} Close</button>
+      <button type="button" class="btn btn-primary" {{action "pathSelected"}}>{{fa-icon "check"}} Select</button>
+    </div>
+  </div><!-- /.modal-content -->
+{{/modal-dialog}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
new file mode 100644
index 0000000..291def6
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/job-item.hbs
@@ -0,0 +1,33 @@
+{{!
+* 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.
+}}
+
+<tr>
+  <td>{{job.id}}</td>
+  <td>{{job.title}}</td>
+  <td>{{job.status}}</td>
+  <td>{{moment-from-now job.dateSubmitted}}</td>
+  <td>{{job.duration}}</td>
+  <td><a {{action "toggleExpandJob" job.id}}>{{fa-icon "expand"}}</a></td>
+</tr>
+
+{{#if expanded}}
+  <tr>
+    <td colspan="6">{{queryFile.fileContent}}</td>
+  </tr>
+{{/if}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
new file mode 100644
index 0000000..84f16a7
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/jobs-browser.hbs
@@ -0,0 +1,62 @@
+{{!
+* 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.
+}}
+
+<div class="row jobs-status">
+  <div class="col-md-12 ">
+    <div class="col-md-9">
+      <div class="strip">
+        <ul class="list-inline">
+          {{#each-in statusCounts as |status count|}}
+            <li>{{count}} <span class="text-uppercase">{{status}}</span></li>
+          {{/each-in}}
+        </ul>
+      </div>
+    </div>
+    <div class="col-md-3">
+      {{date-range-picker
+        start=startTime
+        end=endTime
+        opens="left"
+        applyAction=(action "setDateRange")
+      }}
+    </div>
+  </div>
+
+</div>
+
+<div class="row jobs-table">
+  <div class="col-md-12">
+    <table class="table table-striped">
+      <thead>
+        <tr>
+          <th width="10%">Job Id</th>
+          <th width="30%">Title <span class="pull-right">Dipayan</span> </th>
+          <th width="10%">status</th>
+          <th width="25%">Start time</th>
+          <th width="20%" >Duration</th>
+          <th>Action</th>
+        </tr>
+      </thead>
+      <tbody>
+        {{#each jobs as |job| }}
+          {{job-item job=job}}
+        {{/each}}
+      </tbody>
+    </table>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-filter.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-filter.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-filter.hbs
new file mode 100644
index 0000000..6ab731a
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-filter.hbs
@@ -0,0 +1,33 @@
+{{!
+* 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.
+}}
+
+<div class="list-header clearfix">
+  <div>
+    <p class="text-uppercase"><strong>{{header}}&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;{{items.length}}</strong></p>
+  </div>
+</div>
+
+<div class="search-bar">
+  {{input value=filterText class="search-query" placeholder=placeholder}}
+  {{#if emptyFilterText}}
+    <a {{action "enableFilter"}}>{{fa-icon "search" class="fa-flip-horizontal" size="lg"}}</a>
+  {{else}}
+    <a {{action "disableFilter"}}>{{fa-icon "times" class="fa-flip-horizontal" size="lg"}}</a>
+  {{/if}}
+</div>
+{{yield filteredItems}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-group.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-group.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-group.hbs
new file mode 100644
index 0000000..bd88dbd
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-group.hbs
@@ -0,0 +1,22 @@
+{{!
+* 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.
+}}
+
+{{#each items as |item|}}
+  {{yield item items}}
+{{/each}}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-item.hbs
new file mode 100644
index 0000000..4fbd86b
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/list-item.hbs
@@ -0,0 +1,22 @@
+{{!
+* 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 item.icon}}
+  {{fa-icon item.icon size="lg"}}&nbsp;&nbsp;
+{{/if}}
+{{item.name}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/multiple-database-search-bar.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/multiple-database-search-bar.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/multiple-database-search-bar.hbs
new file mode 100644
index 0000000..57001ed
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/multiple-database-search-bar.hbs
@@ -0,0 +1,45 @@
+{{!
+* 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.
+}}
+
+<div class="col-md-2">
+  <p class="text-left text-uppercase"><strong>{{heading}}</strong></p>
+  <p class="text-left text-muted"><small>{{subHeading}}</small></p>
+</div>
+<div class="col-md-9">
+  <div class="input-group-lg">
+
+    {{#power-select-multiple
+    placeholder="Search databases"
+    options=allDbs
+    selected=selectedDbs
+    onchange=(pipe-action (action (mut selectedDbs)) (action "updateTables"))
+    onkeydown=(action "createOnEnter")
+    as |number|}}
+      {{fa-icon "database"}} {{number}}
+    {{/power-select-multiple}}
+
+
+    <span class="input-group-btn" style="top: 0;right: 130px;position: absolute;">
+      <button type="button" class="btn btn-default">{{fa-icon "folder"}} Browse <span class="caret"></span></button>
+    </span>
+
+
+  </div>
+</div>
+
+{{yield}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/property-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/property-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/property-item.hbs
new file mode 100644
index 0000000..e0ba696
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/property-item.hbs
@@ -0,0 +1,45 @@
+{{!
+* 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.
+}}
+
+<td>
+  <div class="{{if property.keyError 'has-error'}}">
+    {{input type="text" class="form-control" value=property.key disabled=(not property.editing)}}
+    {{#if property.keyError}}
+      <span class="help-block">{{property.keyError.error}}</span>
+    {{/if}}
+  </div>
+
+</td>
+
+<td>
+  <div class="{{if property.valueError 'has-error'}}">
+    {{input type="text" class="form-control" value=property.value disabled=(not property.editing)}}
+    {{#if property.valueError}}
+      <span class="help-block">{{property.valueError.error}}</span>
+    {{/if}}
+  </div>
+</td>
+
+<td>
+  <div class="text-center">
+    {{#unless property.editing}}
+      <button class="btn btn-success" {{action "edit"}}>{{fa-icon "check"}} Edit</button>
+    {{/unless}}
+    <button class="btn btn-danger" {{action "delete"}}>{{fa-icon "times"}} Delete</button>
+  </div>
+</td>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-editor.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-editor.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-editor.hbs
new file mode 100644
index 0000000..d9b9018
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-editor.hbs
@@ -0,0 +1,21 @@
+{{!
+* 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.
+}}
+
+{{textarea id="code-mirror" rows="15" cols="20" value=currentQuery}}
+
+{{yield}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-result-table.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-result-table.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-result-table.hbs
new file mode 100644
index 0000000..5001c99
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/query-result-table.hbs
@@ -0,0 +1,53 @@
+{{!
+* 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 columns.length}}
+  <div class="clearfix" style="text-align: right">
+    {{#if showPreviousButton}}
+        <button class="btn btn-success" {{action "goPrevPage" }}>{{fa-icon "arrow-left"}} </button>
+    {{/if}}
+    <button class="btn btn-success" {{action "goNextPage" }}>{{fa-icon "arrow-right"}} </button>
+  </div>
+{{/if}}
+
+<div class="clearfix">
+{{#light-table table height='65vh' as |t|}}
+  {{#if columns.length}}
+      {{t.head
+      onColumnClick=(action 'onColumnClick')
+      iconAscending='fa fa-sort-asc'
+      iconDescending='fa fa-sort-desc'
+      fixed=true
+      }}
+
+      {{#t.body
+      canSelect=false
+      onScrolledToBottom=(action 'onScrolledToBottom')
+      as |body|
+      }}
+        {{#if isLoading}}
+          {{#body.loader}}
+            {{table-loader}}
+          {{/body.loader}}
+        {{/if}}
+      {{/t.body}}
+  {{/if}}
+{{/light-table}}
+</div>
+
+{{yield}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-item.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-item.hbs
new file mode 100644
index 0000000..bc22b74
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-item.hbs
@@ -0,0 +1,28 @@
+{{!
+* 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.
+}}
+
+<td>
+  {{setting.key}}
+</td>
+<td>
+  {{setting.value}}
+</td>
+<td>
+  <button class="btn btn-success" {{action "edit"}}>{{fa-icon "edit"}} Edit</button>
+  <button class="btn btn-danger" {{action "delete"}}>{{fa-icon "trash"}} Delete</button>
+</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/853a1ce7/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-list.hbs
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-list.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-list.hbs
new file mode 100644
index 0000000..c3f9c76
--- /dev/null
+++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/setting-list.hbs
@@ -0,0 +1,37 @@
+{{!
+* 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.
+}}
+
+<table class="table table-bordered table-hover">
+  <thead>
+  <tr>
+    <th width="40%">KEY</th>
+    <th width="40%">VALUE</th>
+    <th width="20%">ACTIONS</th>
+  </tr>
+  </thead>
+  <tbody>
+  {{#each settings as |setting|}}
+    {{yield setting}}
+  {{/each}}
+  <tr class="new-settings text-center">
+    <td colspan="3">
+      <a {{action "addNewSettings"}}>{{fa-icon "plus"}} Add New</a>
+    </td>
+  </tr>
+  </tbody>
+</table>