AMBARI-20357. [Hive2] JS error in udf delete (pallavkul)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/63dad097 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/63dad097 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/63dad097 Branch: refs/heads/branch-dev-logsearch Commit: 63dad097a730d6403f052e0083fa0e665de26f25 Parents: 60095bc Author: pallavkul <pallav....@gmail.com> Authored: Wed Mar 8 20:50:09 2017 +0530 Committer: pallavkul <pallav....@gmail.com> Committed: Wed Mar 8 20:51:44 2017 +0530 ---------------------------------------------------------------------- .../resources/ui/app/components/udf-item.js | 148 +++++++++++++------ .../resources/ui/app/routes/queries/query.js | 4 +- .../src/main/resources/ui/app/routes/udfs.js | 18 ++- .../main/resources/ui/app/routes/udfs/new.js | 138 ++++++++++------- .../resources/ui/app/services/auto-refresh.js | 2 +- .../ui/app/templates/components/udf-item.hbs | 26 ++-- .../main/resources/ui/app/templates/udfs.hbs | 3 + 7 files changed, 221 insertions(+), 118 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js index 44f56e5..3e6e623 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js +++ b/contrib/views/hive20/src/main/resources/ui/app/components/udf-item.js @@ -17,8 +17,9 @@ */ import Ember from 'ember'; +import UILoggerMixin from '../mixins/ui-logger'; -export default Ember.Component.extend({ +export default Ember.Component.extend(UILoggerMixin, { store: Ember.inject.service(), @@ -30,10 +31,43 @@ export default Ember.Component.extend({ showDeleteUdfModal: false, expandedValue: null, udfId: null, + editUdfId: Ember.computed('udf', function () { + return this.get('udf.id'); + }), + editUdfName: Ember.computed('udf', function () { + return this.get('udf.name'); + }), + editUdfClassName: Ember.computed('udf', function () { + return this.get('udf.classname'); + }), + editOwner: Ember.computed('udf', function () { + return this.get('udf.owner'); + }), + editFileResource: Ember.computed('udf', function () { + return this.get('udf.fileResource'); + }), fileResourceList:[], selectedFileResource: null, isAddingNewFileResource: false, + validate(udfName, udfClassName, resourceName, resourcePath){ + if (Ember.isEmpty(udfName)) { + this.get('logger').danger('UDF Name can not be empty.'); + return false; + } + + if (Ember.isEmpty(udfClassName)) { + this.get('logger').danger('UDF Class Name can not be empty.'); + return false; + } + + if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) { + this.get('logger').danger('File Resource can not be empty.'); + return false; + } + return true; + }, + actions: { toggleExpandUdf(fileResourceId) { @@ -59,14 +93,30 @@ export default Ember.Component.extend({ this.set('expandedEdit', true); this.set('valueLoading', true); - this.get('store').find('fileResource', fileResourceId).then((data) => { - this.set('udfFileResourceName', data.get('name')); - this.set('udfFileResourcePath', data.get('path')); - }); + this.get('store').findAll('file-resource').then((data) => { + let fileResourceList = []; + data.forEach(x => { + let localFileResource = {'id': x.get('id'), + 'name': x.get('name'), + 'path': x.get('path'), + 'owner': x.get('owner') + }; + fileResourceList.push(localFileResource); + }); + fileResourceList.filterBy('id', fileResourceId).map((data) => { + this.set('udfFileResourceName', data.name); + this.set('udfFileResourcePath', data.path); + this.get('store').find('udf', udfId).then((data) => { + this.set('editUdfId', udfId); + this.set('editUdfName', data.get('name')); + this.set('editUdfClassName', data.get('classname')); + this.set('editOwner', data.get('owner')); + }); + }); + }); this.send('setFileResource', fileResourceId); - } }, @@ -75,39 +125,38 @@ export default Ember.Component.extend({ }, saveUDf(name, classname, udfid, udfFileResourceName, udfFileResourcePath){ - let self = this; - - if(!Ember.isEmpty(this.get('selectedFileResource'))){ - this.get('store').findRecord('udf', udfid).then(function(resultUdf) { - resultUdf.set('name', name); - resultUdf.set('classname', classname); - resultUdf.set('fileResource', self.get('selectedFileResource').id); - resultUdf.save(); - self.set('expandedEdit', false); - }); - } else { - - let resourcePayload = {"name":udfFileResourceName,"path":udfFileResourcePath}; - - this.get('udfService').savefileResource(resourcePayload) - .then((data) => { - console.log('fileResource is', data.fileResource.id); - self.get('store').findRecord('udf', udfid).then(function(resultUdf) { - - resultUdf.set('name', name); - resultUdf.set('classname', classname); - resultUdf.set('fileResource', data.fileResource.id); - resultUdf.save(); - self.set('expandedEdit', false); - }); - }, (error) => { - console.log("Error encountered", error); + if (this.validate(name, classname, udfFileResourceName, udfFileResourcePath)) { + if (!Ember.isEmpty(this.get('selectedFileResource'))) { + this.get('store').findRecord('udf', udfid).then(function (resultUdf) { + resultUdf.set('name', name); + resultUdf.set('classname', classname); + resultUdf.set('fileResource', self.get('selectedFileResource').id); + resultUdf.save(); + self.set('expandedEdit', false); }); + } + else { + + let resourcePayload = {"name": udfFileResourceName, "path": udfFileResourcePath}; + + this.get('udfService').savefileResource(resourcePayload) + .then((data) => { + console.log('fileResource is', data.fileResource.id); + self.get('store').findRecord('udf', udfid).then(function (resultUdf) { + + resultUdf.set('name', name); + resultUdf.set('classname', classname); + resultUdf.set('fileResource', data.fileResource.id); + resultUdf.save(); + self.set('expandedEdit', false); + }); + }, (error) => { + console.log("Error encountered", error); + }); + } } - this.set('isAddingNewFileResource', false); - }, showRemoveUdfModal(udfId){ @@ -117,16 +166,7 @@ export default Ember.Component.extend({ }, removeUdf(){ - let self = this; - this.get('store').find('udf', this.get('udfId')).then(function(resultUdf) { - resultUdf.destroyRecord().then(function() { - self.send('cancelUdf'); - self.sendAction('refreshUdfList'); - }, function(response) { - console.log('UDF NOT deleted', response); - }); - return false; - }); + this.sendAction('removeUdf', this.get('udfId') ); }, cancelUdf(){ @@ -144,10 +184,22 @@ export default Ember.Component.extend({ }, setFileResource(fileResourceId){ - let localSelectedFileResource = this.get('fileResourceList').filterBy('id', fileResourceId); - this.set('selectedFileResource',localSelectedFileResource[0]); - } + this.get('store').findAll('file-resource').then((data) => { + let fileResourceList = []; + data.forEach(x => { + let localFileResource = {'id': x.get('id'), + 'name': x.get('name'), + 'path': x.get('path'), + 'owner': x.get('owner') + }; + fileResourceList.push(localFileResource); + }); + + let localSelectedFileResource = fileResourceList.filterBy('id', fileResourceId); + this.set('selectedFileResource',localSelectedFileResource.get('firstObject')); + }); + } } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js index 80116da..6b395ac 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js +++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js @@ -522,7 +522,7 @@ export default Ember.Route.extend(UILoggerMixin, { Ember.run.later(() => { if(this.get('controller.model').get('isQueryDirty')) { - this.get('controller.model').set('tabDataToClose', {index:index, id:id}) + this.get('controller.model').set('tabDataToClose', {index:index, id:id}); this.send('openWorksheetModal'); } else { this.send('closeWorksheet', index, id); @@ -627,7 +627,7 @@ export default Ember.Route.extend(UILoggerMixin, { closeWorksheetModal(){ this.get('controller').set('showWorksheetModal', false); this.closeWorksheetAfterSave(); - this.get('controller.model').set('tabDataToClose', null) + this.get('controller.model').set('tabDataToClose', null); }, expandQueryEdidorPanel(){ http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js index 138e85f..5733d5c 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js +++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs.js @@ -19,6 +19,9 @@ import Ember from 'ember'; export default Ember.Route.extend({ + + showDeleteUdfModal: false, + model() { return this.store.findAll('udf').then(udfs => udfs.toArray()); }, @@ -48,7 +51,6 @@ export default Ember.Route.extend({ actions:{ refreshUdfList(){ - this.get('store').findAll('udf').then((data) => { let udfList = []; data.forEach(x => { @@ -65,8 +67,20 @@ export default Ember.Route.extend({ this.controllerFor('udfs').set('udflist',udfList); this.transitionTo('udfs'); }); + }, - } + removeUdf(udfId){ + var self = this; + let record = this.get('store').peekRecord('udf', udfId ); + if(record){ + record.destroyRecord().then(function(){ + self.send('cancelUdf'); + self.send('refreshUdfList'); + })} + }, + cancelUdf(){ + this.set('showDeleteUdfModal', false); + } } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js index 84733e8..6207b77 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js +++ b/contrib/views/hive20/src/main/resources/ui/app/routes/udfs/new.js @@ -25,6 +25,26 @@ export default Ember.Route.extend(UILoggerMixin, { }, + validateUDF(udfName, udfClassName){ + if (Ember.isEmpty(udfName)) { + this.get('logger').danger('UDF Name can not be empty.'); + return false; + } + if (Ember.isEmpty(udfClassName)) { + this.get('logger').danger('UDF Class Name can not be empty.'); + return false; + } + return true; + }, + + validateFileResource(resourceName, resourcePath){ + if (Ember.isEmpty(resourceName) || Ember.isEmpty(resourcePath)) { + this.get('logger').danger('File Resource can not be empty.'); + return false; + } + return true; + }, + udf: Ember.inject.service(), store: Ember.inject.service(), @@ -41,7 +61,7 @@ export default Ember.Route.extend(UILoggerMixin, { }; fileResourceList.push(localFileResource); }); - fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'}) + fileResourceList.push({'name':'Add New File Resource', 'action':'addNewFileResource'}); controller.set('fileResourceList', fileResourceList); }); @@ -60,52 +80,19 @@ export default Ember.Route.extend(UILoggerMixin, { this.get('controller').set('udfName', udfName); this.get('controller').set('udfClassName', udfClassName); - if(!Ember.isEmpty( this.get('controller').get('resourceId'))){ - let newUDF = this.get('store').createRecord('udf', - {name:udfName, - classname:udfClassName, - fileResource: this.get('controller').get('resourceId') - }); - newUDF.save().then((data) => { - console.log('udf saved'); - - this.get('store').findAll('udf').then((data) => { - let udfList = []; - data.forEach(x => { - let localUdf = { - 'id': x.get('id'), - 'name': x.get('name'), - 'classname': x.get('classname'), - 'fileResource': x.get('fileResource'), - 'owner': x.get('owner') - }; - udfList.pushObject(localUdf); - }); - - this.controllerFor('udfs').set('udflist',udfList); - this.transitionTo('udfs'); - }) + if(!Ember.isEmpty( this.get('controller').get('resourceId'))){ - }); + if (this.validateUDF(udfName, udfClassName)) { - } else { - - let resourcePayload = {"name":resourceName,"path":resourcePath}; - - var newFileResource = this.get('store').createRecord('file-resource', - {name:resourceName, - path:resourcePath - }); - newFileResource.save().then((data) => { - console.log('fileResource is', data.get('id')); let newUDF = this.get('store').createRecord('udf', - {name:udfName, - classname:udfClassName, - fileResource: data.get('id') + { + name: udfName, + classname: udfClassName, + fileResource: this.get('controller').get('resourceId') }); newUDF.save().then((data) => { @@ -124,20 +111,66 @@ export default Ember.Route.extend(UILoggerMixin, { udfList.pushObject(localUdf); }); - this.controllerFor('udfs').set('udflist',udfList); + this.controllerFor('udfs').set('udflist', udfList); this.transitionTo('udfs'); - }) - }) - .catch((error) => { - this.get('logger').danger('Failed to create UDF.', this.extractError(error)); - this.transitionTo('udfs'); + }); }); - }) - .catch((error) => { - this.get('logger').danger('Failed to create File Resource.', this.extractError(error)); - this.transitionTo('udfs'); - }); + + } + + } else { + + let resourcePayload = {"name":resourceName,"path":resourcePath}; + + var newFileResource = this.get('store').createRecord('file-resource', + {name:resourceName, + path:resourcePath + }); + + + if (this.validateFileResource(resourceName, resourcePath) && this.validateUDF(udfName, udfClassName)) { + + newFileResource.save().then((data) => { + console.log('fileResource is', data.get('id')); + let newUDF = this.get('store').createRecord('udf', + {name:udfName, + classname:udfClassName, + fileResource: data.get('id') + }); + + newUDF.save().then((data) => { + console.log('udf saved'); + + this.get('store').findAll('udf').then((data) => { + let udfList = []; + data.forEach(x => { + let localUdf = { + 'id': x.get('id'), + 'name': x.get('name'), + 'classname': x.get('classname'), + 'fileResource': x.get('fileResource'), + 'owner': x.get('owner') + }; + udfList.pushObject(localUdf); + }); + + this.controllerFor('udfs').set('udflist',udfList); + this.transitionTo('udfs'); + }); + }) + .catch((error) => { + this.get('logger').danger('Failed to create UDF.', this.extractError(error)); + this.transitionTo('udfs'); + + }); + }) + .catch((error) => { + this.get('logger').danger('Failed to create File Resource.', this.extractError(error)); + this.transitionTo('udfs'); + }); + + } } }, @@ -153,10 +186,11 @@ export default Ember.Route.extend(UILoggerMixin, { handleFileResourceChange(filter){ console.log('filter', filter); - if(filter.action == "addNewFileResource"){ + if(filter.action === "addNewFileResource"){ this.get('controller').set('isAddingNewFileResource', true); this.get('controller').set('resourceName',''); this.get('controller').set('resourcePath',''); + this.get('controller').set('resourceId', null); this.get('controller').set('selectedFileResource',null); }else { http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js index 2e8ec62..b3276e7 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js +++ b/contrib/views/hive20/src/main/resources/ui/app/services/auto-refresh.js @@ -50,7 +50,7 @@ export default Ember.Service.extend({ databaseRefreshStartingCallback(); let oldDatabases = this.get('store').peekAll('database').mapBy('name'); this.get('store').query('database', {}).then((data) => { - let deletedDbCount = 0 + let deletedDbCount = 0; let newDatabases = data.mapBy('name'); oldDatabases.forEach((oldDB) => { if (!newDatabases.contains(oldDB)) { http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs index fec48fb..929b91a 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs +++ b/contrib/views/hive20/src/main/resources/ui/app/templates/components/udf-item.hbs @@ -39,19 +39,19 @@ {{#if expandedEdit}} {{udf-edit - udfid=udf.id - name=udf.name - classname=udf.classname - owner=udf.owner - fileResource=udf.fileResource - udfFileResourceName=udfFileResourceName - udfFileResourcePath=udfFileResourcePath - fileResourceList=fileResourceList - selectedFileResource=selectedFileResource - isAddingNewFileResource=isAddingNewFileResource - handleResourceChange='handleResourceChange' - cancelEditUdf='cancelEditUdf' - saveUDf='saveUDf' + udfid=editUdfId + name=editUdfName + classname=editUdfClassName + owner=editOwner + fileResource=editFileResource + udfFileResourceName=udfFileResourceName + udfFileResourcePath=udfFileResourcePath + fileResourceList=fileResourceList + selectedFileResource=selectedFileResource + isAddingNewFileResource=isAddingNewFileResource + handleResourceChange='handleResourceChange' + cancelEditUdf='cancelEditUdf' + saveUDf='saveUDf' }} {{/if}} http://git-wip-us.apache.org/repos/asf/ambari/blob/63dad097/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs index ef6a01c..ffb824e 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs +++ b/contrib/views/hive20/src/main/resources/ui/app/templates/udfs.hbs @@ -35,7 +35,10 @@ {{udf-item udf=udf fileResourceList=fileResourceList + showDeleteUdfModal=showDeleteUdfModal refreshUdfList='refreshUdfList' + removeUdf='removeUdf' + cancelUdf='cancelUdf' }} {{/each}} </tbody>