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">×</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">×</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">×</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">×</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}}
+
+
+ {{fa-icon "database" size="lg"}} {{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">×</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}} | {{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"}}
+{{/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>