This is an automated email from the ASF dual-hosted git repository. nixon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 506ffc97ca641f86da4e90b821061162f15c0fef Author: kevalbhatt <kbh...@apache.org> AuthorDate: Thu Mar 12 21:41:25 2020 +0530 ATLAS-3662 : UI: Business Metadata validation improvements Signed-off-by: nixonrodrigues <ni...@apache.org> --- .../js/views/search/SearchResultLayoutView.js | 5 +- dashboardv3/public/css/scss/common.scss | 9 + .../BusinessMetadataAttributeItemView_tmpl.html | 6 +- .../CreateBusinessMetadataLayoutView_tmpl.html | 2 +- .../BusinessMetadataAttrTableLayoutView.js | 1 - .../BusinessMetadataAttributeItemView.js | 67 ++-- .../BusinessMetadataContainerLayoutView.js | 28 +- .../BusinessMetadataDetailLayoutView.js | 12 +- .../BusinessMetadataTableLayoutView.js | 38 +-- .../CreateBusinessMetadataLayoutView.js | 363 ++++++--------------- .../business_metadata/EnumCreateUpdateItemView.js | 14 +- .../js/views/search/SearchResultLayoutView.js | 11 +- 12 files changed, 180 insertions(+), 376 deletions(-) diff --git a/dashboardv2/public/js/views/search/SearchResultLayoutView.js b/dashboardv2/public/js/views/search/SearchResultLayoutView.js index 1d8b4ed..62c7ecd 100644 --- a/dashboardv2/public/js/views/search/SearchResultLayoutView.js +++ b/dashboardv2/public/js/views/search/SearchResultLayoutView.js @@ -157,6 +157,7 @@ define(['require', this.multiSelectEntity = []; this.searchType = 'Basic Search'; this.columnOrder = null; + this.defaultColumns = ["selected", "name", "description", "typeName", "owner", "tag", "term"]; if (this.value) { if (this.value.searchType && this.value.searchType == 'dsl') { this.searchType = 'Advanced Search'; @@ -221,7 +222,7 @@ define(['require', this.updateColumnList(state); var excludeDefaultColumn = []; if (this.value && this.value.type) { - excludeDefaultColumn = _.without(this.searchTableColumns[this.value.type], "selected", "name", "description", "typeName", "owner", "tag", "term"); + excludeDefaultColumn = _.difference(this.searchTableColumns[this.value.type], this.defaultColumns); if (this.searchTableColumns[this.value.type] === null) { this.ui.columnEmptyInfo.show(); } else { @@ -371,7 +372,7 @@ define(['require', } if (isPostMethod && isSearchTab) { - var excludeDefaultColumn = this.value.type && this.searchTableColumns ? _.without(this.searchTableColumns[this.value.type], "selected", "name", "description", "typeName", "owner", "tag") : null, + var excludeDefaultColumn = this.value.type && this.searchTableColumns ? _.difference(this.searchTableColumns[this.value.type], this.defaultColumns) : null, filterObj = { 'entityFilters': entityFilters, 'tagFilters': tagFilters, diff --git a/dashboardv3/public/css/scss/common.scss b/dashboardv3/public/css/scss/common.scss index a30057c..14ee1ce 100644 --- a/dashboardv3/public/css/scss/common.scss +++ b/dashboardv3/public/css/scss/common.scss @@ -276,4 +276,13 @@ pre { margin-bottom: 5px; margin-left: 5px; float: left; +} + +.errorValidate { + border-color: red !important; +} + +.errorValidate+span .select2-selection { + border-color: red !important; + } \ No newline at end of file diff --git a/dashboardv3/public/js/templates/business_metadata/BusinessMetadataAttributeItemView_tmpl.html b/dashboardv3/public/js/templates/business_metadata/BusinessMetadataAttributeItemView_tmpl.html index 2c3f57c..862a6b4 100644 --- a/dashboardv3/public/js/templates/business_metadata/BusinessMetadataAttributeItemView_tmpl.html +++ b/dashboardv3/public/js/templates/business_metadata/BusinessMetadataAttributeItemView_tmpl.html @@ -23,7 +23,7 @@ <div class="form-group"> <label class="control-label col-sm-3 required" for="name">Name</label> <div class="col-sm-8"> - <input class="form-control attributeInput" data-id="attributeInput" placeholder="Attribute name"> + <input class="form-control attributeInput require" data-id="attributeInput" placeholder="Attribute name"> </input> </div> </div> @@ -54,7 +54,7 @@ <div class=""> <label class="control-label col-sm-3 required" for="enumType">Enum Name</label> <div class="col-sm-5"> - <select class="form-control enumTypeSelector" data-id="enumTypeSelector" multiple="false"> + <select class="form-control enumTypeSelector require" data-id="enumTypeSelector" multiple="false"> </select> </div> <div class="col-sm-3"> @@ -75,7 +75,7 @@ <div class="stringlength-container"> <label class="control-label col-sm-3 required" for="name">Max length</label> <div class="col-sm-8"> - <input type="number" class="form-control stringLengthVal" data-id="stringLength" placeholder="Maximum length"> + <input type="number" class="form-control stringLengthVal require" data-id="stringLength" placeholder="Maximum length"> </div> </div> </div> diff --git a/dashboardv3/public/js/templates/business_metadata/CreateBusinessMetadataLayoutView_tmpl.html b/dashboardv3/public/js/templates/business_metadata/CreateBusinessMetadataLayoutView_tmpl.html index b84c1f1..a78614d 100644 --- a/dashboardv3/public/js/templates/business_metadata/CreateBusinessMetadataLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/business_metadata/CreateBusinessMetadataLayoutView_tmpl.html @@ -23,7 +23,7 @@ <label class="control-label col-sm-2 {{#if create}}required{{/if}}" for="name">Name</label> {{#if create}} <div class="col-sm-10"> - <input class="form-control businessMetadata-name" data-id="name" placeholder="Name(required)" autofocus /> + <input class="form-control businessMetadata-name require" data-id="name" placeholder="Name(required)" autofocus /> </div> {{else}} <span class="ellipsis-with-margin control-label text-left col-sm-10" data-id="title"></span> {{/if}} diff --git a/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttrTableLayoutView.js b/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttrTableLayoutView.js index 173d76f..1cdcef5 100644 --- a/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttrTableLayoutView.js +++ b/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttrTableLayoutView.js @@ -72,7 +72,6 @@ define(['require', filterOpts: {}, paginatorOpts: {} }; - this.isFilters = null; this.showDetails = true; }, onRender: function() { diff --git a/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttributeItemView.js b/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttributeItemView.js index 7bc1016..d55b9f9 100644 --- a/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttributeItemView.js +++ b/dashboardv3/public/js/views/business_metadata/BusinessMetadataAttributeItemView.js @@ -17,12 +17,8 @@ */ define(['require', 'backbone', - 'hbs!tmpl/business_metadata/BusinessMetadataAttributeItemView_tmpl', - 'utils/Utils', - 'utils/UrlLinks', - 'utils/Messages' - -], function(require, Backbone, BusinessMetadataAttributeItemViewTmpl, Utils, UrlLinks, Messages) { + 'hbs!tmpl/business_metadata/BusinessMetadataAttributeItemView_tmpl' +], function(require, Backbone, BusinessMetadataAttributeItemViewTmpl) { 'use strict'; return Backbone.Marionette.ItemView.extend( @@ -63,27 +59,35 @@ define(['require', }; events["change " + this.ui.dataTypeSelector] = function(e) { var obj = { options: this.model.get('options') || {} }; - debugger; delete obj.enumValues; delete obj.options.maxStrLength; if (e.target.value.trim() === 'enumeration' || e.target.value.trim() === 'Enumeration') { this.ui.enumTypeSelectorContainer.show(); + this.ui.enumTypeSelector.show(); this.emumTypeSelectDisplay(); this.ui.stringLengthContainer.hide(); + this.ui.stringLengthValue.hide(); } else { obj.typeName = e.target.value.trim(); if (e.target.value.trim() === 'string' || e.target.value.trim() === 'String') { this.ui.stringLengthContainer.show(); + this.ui.stringLengthValue.show(); this.ui.enumTypeSelectorContainer.hide(); + this.ui.enumTypeSelector.hide(); this.ui.enumValueSelectorContainer.hide(); obj.options["maxStrLength"] = e.target.value.trim(); } else { this.ui.enumTypeSelectorContainer.hide(); + this.ui.enumTypeSelector.hide(); this.ui.enumValueSelectorContainer.hide(); this.ui.stringLengthContainer.hide(); + this.ui.stringLengthValue.hide(); } } this.model.set(obj); + if (e.target.value.trim() != 'enumeration') { + this.ui.multiValueSelectStatus.trigger('change'); + } }; events["change " + this.ui.enumTypeSelector] = function(e) { this.model.set({ "enumValues": e.target.value.trim() }); @@ -138,15 +142,14 @@ define(['require', * @constructs */ initialize: function(options) { - this.parentView = options.parentView; - this.viewId = options.model ? options.model.cid : this.parentView.cid; + _.extend(this, _.pick(options, "typeHeaders", "businessMetadataDefCollection", "enumDefCollection", "isAttrEdit", "attrDetails", "viewId", "collection")); + this.viewId = options.model ? options.model.cid : this.viewId; }, onRender: function() { var that = this, entitytypes = '', enumTypes = []; - //this.model.set({ "modalID": this.viewId }); - this.parentView.typeHeaders.fullCollection.each(function(model) { + this.typeHeaders.fullCollection.each(function(model) { if (model.toJSON().category == "ENTITY") { that.ui.entityTypeSelector.append("<option>" + model.get('name') + "</option>"); entitytypes += '<option value="' + (model.get('name')) + '" data-name="' + (model.get('name')) + '">' + model.get('name') + '</option>'; @@ -167,24 +170,26 @@ define(['require', this.ui.enumValueSelector.attr("disabled", "false"); // cannot edit the values this.emumTypeSelectDisplay(); this.ui.enumTypeSelectorContainer.hide(); + this.ui.enumTypeSelector.hide(); this.ui.enumValueSelectorContainer.hide(); - if (this.parentView.isAttrEdit) { + if (this.isAttrEdit) { this.ui.close.hide(); this.ui.createNewEnum.hide(); // cannot add new businessMetadata on edit view - this.ui.attributeInput.val(this.parentView.attrDetails.name); + this.ui.attributeInput.val(this.attrDetails.name); this.ui.attributeInput.attr("disabled", "false"); this.ui.dataTypeSelector.attr("disabled", "false"); this.ui.dataTypeSelector.attr("disabled", "false"); this.ui.multiValueSelect.hide(); - this.ui.dataTypeSelector.val(this.parentView.attrDetails.attrTypeName); - if (this.parentView.attrDetails.attrTypeName == "string") { + this.ui.dataTypeSelector.val(this.attrDetails.attrTypeName); + if (this.attrDetails.attrTypeName == "string") { this.ui.stringLengthContainer.show(); - this.ui.stringLengthValue.val(this.parentView.attrDetails.maxStrLength); + this.ui.stringLengthValue.show(); + this.ui.stringLengthValue.val(this.attrDetails.maxStrLength); } else { this.ui.stringLengthContainer.hide(); + this.ui.stringLengthValue.hide(); } - - _.each(this.parentView.attrDetails.attrEntityType, function(valName) { + _.each(this.attrDetails.attrEntityType, function(valName) { that.ui.entityTypeSelector.find('option').each(function(o) { var $el = $(this) if ($el.data("name") === valName) { @@ -192,16 +197,16 @@ define(['require', } }) }); - this.ui.entityTypeSelector.val(this.parentView.attrDetails.attrEntityType).trigger('change'); - if (this.parentView.attrDetails && this.parentView.attrDetails.attrTypeName) { - var typeName = this.parentView.attrDetails.attrTypeName; + this.ui.entityTypeSelector.val(this.attrDetails.attrEntityType).trigger('change'); + if (this.attrDetails && this.attrDetails.attrTypeName) { + var typeName = this.attrDetails.attrTypeName; if (typeName != "string" && typeName != "boolean" && typeName != "byte" && typeName != "short" && typeName != "int" && typeName != "float" && typeName != "double" && typeName != "long" && typeName != "date") { this.ui.enumTypeSelector.attr("disabled", "false"); this.ui.dataTypeSelector.val("enumeration").trigger('change'); this.ui.enumTypeSelector.val(typeName).trigger('change'); } } - if (this.parentView.attrDetails && this.parentView.attrDetails.multiValued) { + if (this.attrDetails && this.attrDetails.multiValued) { this.ui.multiValueSelect.show(); $(this.ui.multiValueSelectStatus).prop('checked', true).trigger('change'); this.ui.multiValueSelectStatus.attr("disabled", "false"); @@ -211,7 +216,7 @@ define(['require', showEnumValues: function(enumName) { var enumValues = '', selectedValues = [], - selectedEnum = this.parentView.enumDefCollection.fullCollection.findWhere({ name: enumName }), + selectedEnum = this.enumDefCollection.fullCollection.findWhere({ name: enumName }), selectedEnumValues = selectedEnum ? selectedEnum.get('elementDefs') : null, savedValues = []; _.each(selectedEnumValues, function(enumVal, index) { @@ -231,7 +236,7 @@ define(['require', }, emumTypeSelectDisplay: function() { var enumTypes = ''; - this.parentView.enumDefCollection.fullCollection.each(function(model, index) { + this.enumDefCollection.fullCollection.each(function(model, index) { enumTypes += "<option>" + _.escape(model.get('name')) + "</option>"; }); this.ui.enumTypeSelector.empty(); @@ -255,14 +260,14 @@ define(['require', }, closeModal: function() { modal.trigger("cancel"); - that.parentView.enumDefCollection.fetch({ + that.enumDefCollection.fetch({ success: function() { that.ui.enumTypeSelector.val(that.model.get('typeName')).trigger('change'); } }); }, - enumDefCollection: that.parentView.enumDefCollection, - businessMetadataDefCollection: that.parentView.options.businessMetadataDefCollection + enumDefCollection: that.enumDefCollection, + businessMetadataDefCollection: that.businessMetadataDefCollection }), modal = new Modal({ title: "Create/ Update Enum", @@ -279,12 +284,12 @@ define(['require', }); }, onCloseButton: function() { - var tagName = this.parentView.$el.find('[data-id="tagName"]').val(); - if (this.parentView.collection.models.length > 0) { + var tagName = this.$el.find('[data-id="tagName"]').val(); + if (this.collection.models.length > 0) { this.model.destroy(); } - if (this.parentView.collection.models.length == 0 && tagName != "") { - this.parentView.$el.parent().next().find('button.ok').removeAttr("disabled"); + if (this.collection.models.length == 0 && tagName != "") { + this.$el.parent().next().find('button.ok').removeAttr("disabled"); } } }); diff --git a/dashboardv3/public/js/views/business_metadata/BusinessMetadataContainerLayoutView.js b/dashboardv3/public/js/views/business_metadata/BusinessMetadataContainerLayoutView.js index a1c80da..6ae97f9 100644 --- a/dashboardv3/public/js/views/business_metadata/BusinessMetadataContainerLayoutView.js +++ b/dashboardv3/public/js/views/business_metadata/BusinessMetadataContainerLayoutView.js @@ -47,33 +47,7 @@ define([ initialize: function(options) { _.extend(this, options); }, - bindEvents: function() { - // this.listenTo(this.businessMetadataDefCollection, 'reset', function() { - // if (!this.model) { - // this.model = this.businessMetadataDefCollection.fullCollection.findWhere({ guid: this.guid }); - // if (this.model) { - // this.renderTagDetail(); - // } else { - // this.$('.fontLoader').hide(); - // Utils.notifyError({ - // content: 'Tag Not Found' - // }); - // } - // } - // }, this); - // this.listenTo(this.collection, 'error', function(error, response) { - // if (response.responseJSON && response.responseJSON.error) { - // Utils.notifyError({ - // content: response.responseJSON.error - // }); - // } else { - // Utils.notifyError({ - // content: 'Something went wrong' - // }); - // } - // this.$('.fontLoader').hide(); - // }, this); - }, + bindEvents: function() {}, onRender: function() { this.updateView(); }, diff --git a/dashboardv3/public/js/views/business_metadata/BusinessMetadataDetailLayoutView.js b/dashboardv3/public/js/views/business_metadata/BusinessMetadataDetailLayoutView.js index 36e613f..90d9d6d 100644 --- a/dashboardv3/public/js/views/business_metadata/BusinessMetadataDetailLayoutView.js +++ b/dashboardv3/public/js/views/business_metadata/BusinessMetadataDetailLayoutView.js @@ -32,10 +32,7 @@ define(['require', /** ui selector cache */ ui: { title: '[data-id="title"]', - editBox: '[data-id="editBox"]', - saveButton: "[data-id='saveButton']", description: '[data-id="description"]', - publishButton: '[data-id="publishButton"]', backButton: '[data-id="backButton"]' }, /** ui events hash */ @@ -51,16 +48,15 @@ define(['require', * @constructs */ initialize: function(options) { - _.extend(this, _.pick(options, 'guid', 'model', 'enumDefCollection', 'typeHeaders')); + _.extend(this, _.pick(options, 'model')); }, onRender: function() { this.renderDetail(); }, renderDetail: function() { - var that = this; - this.ui.title.html('<span>' + that.model.get('name') + '</span>'); - if (that.model.get('description')) { - this.ui.description.text((that.model.get('description'))); + this.ui.title.html('<span>' + this.model.get('name') + '</span>'); + if (this.model.get('description')) { + this.ui.description.text((this.model.get('description'))); } } }); diff --git a/dashboardv3/public/js/views/business_metadata/BusinessMetadataTableLayoutView.js b/dashboardv3/public/js/views/business_metadata/BusinessMetadataTableLayoutView.js index 1afa205..0c76cb6 100644 --- a/dashboardv3/public/js/views/business_metadata/BusinessMetadataTableLayoutView.js +++ b/dashboardv3/public/js/views/business_metadata/BusinessMetadataTableLayoutView.js @@ -19,14 +19,9 @@ define(['require', 'backbone', 'hbs!tmpl/business_metadata/BusinessMetadataTableLayoutView_tmpl', - 'collection/VEntityList', - 'models/VSearch', 'utils/Utils', - 'utils/Messages', - 'utils/Enums', - 'utils/UrlLinks', - 'utils/CommonViewFunction' -], function(require, Backbone, BusinessMetadataTableLayoutView_tmpl, VEntityList, VSearch, Utils, Messages, Enums, UrlLinks, CommonViewFunction) { + 'utils/Messages' +], function(require, Backbone, BusinessMetadataTableLayoutView_tmpl, Utils, Messages) { 'use strict'; var BusinessMetadataTableLayoutView = Backbone.Marionette.LayoutView.extend( @@ -47,18 +42,12 @@ define(['require', businessMetadataAttrPage: "[data-id='businessMetadataAttrPage']", businessMetadataAttrPageTitle: "[data-id='businessMetadataAttrPageTitle']", businessMetadataDetailPage: "[data-id='businessMetadataDetailPage']", - auditCreate: "[data-id='auditCreate']", - pageRecordText: "[data-id='pageRecordText']", - activePage: "[data-id='activePage']", createBusinessMetadata: "[data-id='createBusinessMetadata']", attributeEdit: "[data-id='attributeEdit']", addAttribute: '[data-id="addAttribute"]', businessMetadataAttrPageOk: '[data-id="businessMetadataAttrPageOk"]', colManager: "[data-id='colManager']", - deleteBusinessMetadata: '[data-id="deleteBusinessMetadata"]', - businessMetadataAttrFontLoader: '.business-metadata-attr-fontLoader', - businessMetadataAttrTableOverlay: '.businessMetadata-attr-tableOverlay' - + deleteBusinessMetadata: '[data-id="deleteBusinessMetadata"]' }, /** ui events hash */ events: function() { @@ -80,9 +69,6 @@ define(['require', initialize: function(options) { _.extend(this, _.pick(options, 'guid', 'entity', 'entityName', 'attributeDefs', 'typeHeaders', 'businessMetadataDefCollection', 'entityDefCollection', 'businessMetadataAttr', 'selectedBusinessMetadata')); this.limit = 10; - this.offset = 0; - this.pervOld = []; - this.onlyPurge = true; this.newAttr = false; this.commonTableOptions = { collection: this.businessMetadataDefCollection, @@ -111,8 +97,6 @@ define(['require', filterOpts: {}, paginatorOpts: {} }; - this.currPage = 1; - this.isFilters = null; this.guid = null; this.showDetails = true; // toggle between sttribute page and detail page }, @@ -225,11 +209,10 @@ define(['require', that.toggleBusinessMetadataDetailsAttrView(); that.entityDefCollection.fetch({ silent: true }); }, - tagCollection: that.businessMetadataDefCollection, + businessMetadataDefCollection: that.businessMetadataDefCollection, enumDefCollection: enumDefCollection, typeHeaders: typeHeaders, - isNewBusinessMetadata: isNewBusinessMetadata, - businessMetadataDefCollection: businessMetadataDefCollection + isNewBusinessMetadata: isNewBusinessMetadata }); that.RModal.show(that.view); }); @@ -272,7 +255,6 @@ define(['require', var applicableEntityTypes = '', typeName = attrObj.typeName; if (attrObj.options && attrObj.options.applicableEntityTypes) { - // attrEntityTypes = JSON.parse(attrObj.options.applicableEntityTypes).join(', '); var entityTypes = JSON.parse(attrObj.options.applicableEntityTypes); _.each(entityTypes, function(values) { applicableEntityTypes += '<label class="btn btn-action btn-xs btn-blue no-pointer">' + values + '</label>'; @@ -283,11 +265,11 @@ define(['require', } attrRow += "<tr> <td style='display:table-cell'>" + _.escape(attrObj.name) + "</td><td style='display:table-cell'>" + typeName + "</td><td style='display:table-cell'>" + applicableEntityTypes + "</td><td style='display:table-cell'> <div class='btn btn-action btn-sm' style='margin-left:0px;' data-id='attributeEdit' data-guid='" + model.get('guid') + "' data-name ='" + _.escape(attrObj.name) + "' data-action='attributeEdit' >Edit</div> </td></tr> "; }); - var purgeText = '<div class="row"><div class="col-sm-12 attr-details"><table style="padding: 50px;">' + attrTableHeading + attrRow + '</table></div></div>'; - $(el).append($('<div>').html(purgeText)); + var adminText = '<div class="row"><div class="col-sm-12 attr-details"><table style="padding: 50px;">' + attrTableHeading + attrRow + '</table></div></div>'; + $(el).append($('<div>').html(adminText)); } else { - var purgeText = '<div class="row"><div class="col-sm-12 attr-details"><h5 class="text-center"> No attributes to show.</h5></div></div>'; - $(el).append($('<div>').html(purgeText)); + var adminText = '<div class="row"><div class="col-sm-12 attr-details"><h5 class="text-center"> No attributes to show.</h5></div></div>'; + $(el).append($('<div>').html(adminText)); } } @@ -364,7 +346,6 @@ define(['require', formatter: _.extend({}, Backgrid.CellFormatter.prototype, { fromRaw: function(rawValue, model) { return "<button type='button' data-id='addAttribute' data-guid='" + model.get('guid') + "'' title='' class='btn btn-action btn-xs ' style='margin-bottom: 10px;' data-action='createAttr' data-original-title='Add Business Metadata attribute'><i class='fa fa-plus'></i> Attributes</button>"; - // "<button type='button' data-id='deleteBusinessMetadata' data-guid='" + model.get('guid') + "'' title='' class='btn btn-action btn-xs ' style='margin-bottom: 10px;' data-action='createAttr' data-original-title='Delete BusinessMetadata'><i class='fa fa-trash-o'></i> Delete</button>"; } }) } @@ -386,7 +367,6 @@ define(['require', onNotifyDeleteOk: function(data) { var that = this, deleteBusinessMetadataData = that.businessMetadataDefCollection.fullCollection.findWhere({ guid: that.guid }); - // that.$('.position-relative .fontLoader').addClass('show'); that.$('.tableOverlay').show(); if (deleteBusinessMetadataData) { var businessMetadataName = deleteBusinessMetadataData.get("name"); diff --git a/dashboardv3/public/js/views/business_metadata/CreateBusinessMetadataLayoutView.js b/dashboardv3/public/js/views/business_metadata/CreateBusinessMetadataLayoutView.js index 6d18425..76c9fdf 100644 --- a/dashboardv3/public/js/views/business_metadata/CreateBusinessMetadataLayoutView.js +++ b/dashboardv3/public/js/views/business_metadata/CreateBusinessMetadataLayoutView.js @@ -22,11 +22,8 @@ define(['require', 'utils/Utils', 'utils/Messages', 'views/business_metadata/BusinessMetadataAttributeItemView', - 'collection/VTagList', - 'models/VEntity', - 'utils/UrlLinks', - 'platform' -], function(require, Backbone, CreateBusinessMetadataLayoutViewTmpl, Utils, Messages, BusinessMetadataAttributeItemView, VTagList, VEntity, UrlLinks, platform) { + 'models/VEntity' +], function(require, Backbone, CreateBusinessMetadataLayoutViewTmpl, Utils, Messages, BusinessMetadataAttributeItemView, VEntity) { var CreateBusinessMetadataLayoutView = Backbone.Marionette.CompositeView.extend( /** @lends CreateBusinessMetadataLayoutView */ @@ -53,8 +50,13 @@ define(['require', childViewOptions: function() { return { - // saveButton: this.ui.saveButton, - parentView: this + typeHeaders: this.typeHeaders, + businessMetadataDefCollection: this.businessMetadataDefCollection, + enumDefCollection: this.enumDefCollection, + isAttrEdit: this.isAttrEdit, + attrDetails: this.attrDetails, + viewId: this.cid, + collection: this.collection }; }, /** ui selector cache */ @@ -76,18 +78,9 @@ define(['require', var that = this, modal = that.$el; if (e.target.dataset.action == "attributeEdit" || e.target.dataset.action == "addAttribute") { - // var selectedBusinessMetadata = that.businessMetadataDefCollection.fullCollection.findWhere({ guid: that.guid }); that.onUpdateAttr(); } else { - if (that.$el.find('.form-control.businessMetadata-name')[0].value === "") { - $(that.$el.find('.form-control.businessMetadata-name')[0]).css("borderColor", "red"); - Utils.notifyInfo({ - content: "Business Metadata name is empty." - }); - - } else { - that.onCreateBusinessMetadata(); - } + that.onCreateBusinessMetadata(); } }; @@ -101,7 +94,7 @@ define(['require', * @constructs */ initialize: function(options) { - _.extend(this, _.pick(options, 'businessMetadataDefCollection', 'enumDefCollection', 'model', 'descriptionData', 'isNewBusinessMetadata', 'isAttrEdit', 'entityDefCollection', 'typeHeaders', 'attrDetails')); + _.extend(this, _.pick(options, 'businessMetadataDefCollection', 'selectedBusinessMetadata', 'enumDefCollection', 'model', 'isNewBusinessMetadata', 'isAttrEdit', 'typeHeaders', 'attrDetails')); this.fromTable = this.isNewBusinessMetadata ? true : false; this.isEditAttr = this.isAttrEdit ? false : true; this.businessMetadataModel = new VEntity(); @@ -183,128 +176,56 @@ define(['require', parent.$('.business-metadata-attr-fontLoader').hide(); } }, - validateValues: function() { - var attrNameValidate = true, - enumValue = true, - stringValidate = true, - enumType = true; - if (this.$el.find(".attributeInput").length > 0) { - this.$el.find(".attributeInput").each(function() { - if ($(this).val() === "") { - $(this).css("borderColor", "red"); - attrNameValidate = false; - } + validateValues: function(attributeDefs) { + var isValidate = true, + isAttrDuplicate = true, + validationFileds = this.$el.find('.require'), + attrNames = []; + if (attributeDefs && !this.isAttrEdit) { + attrNames = _.map(attributeDefs, function(model) { + return model.name.toLowerCase(); }); } - if (this.$el.find(".enumvalue-container").length > 0 && this.$el.find(".enumvalue-container")[0].style.display != 'none') { - this.$el.find(".enumvalue-container").each(function(index) { - if (this.style.display != 'none') { - if ($(this).find(".enumValueSelector").length > 0) { - $(this).find(".enumValueSelector").each(function(index) { - if ($(this).val().length === 0) { - $(this).css("borderColor", "red"); - enumValue = false; - } - }); - } + validationFileds.each(function(elements) { + $(this).removeClass('errorValidate'); + if (validationFileds[elements].value == '' || validationFileds[elements].value == null) { + if (validationFileds[elements].style.display != 'none') { + $(validationFileds[elements]).addClass('errorValidate'); + $(this).addClass('errorValidate'); + if (isValidate) { isValidate = false; } } - }) - } - if (this.$el.find(".enumtype-container").length > 0 && this.$el.find(".enumtype-container")[0].style.display != 'none') { - this.$el.find(".enumtype-container").each(function(index) { - if (this.style.display != 'none') { - if ($(this).find(".enumTypeSelector").length > 0) { - $(this).find(".enumTypeSelector").each(function(index) { - if ($(this).val() == null || $(this).val() == '' || $(this).val().length === 0) { - $(this).css("borderColor", "red"); - enumType = false; - } - }); + } + }); + if (isValidate) { + this.$el.find('.attributeInput').each(function(element) { + var attrValue = this.value.toLowerCase(); + if (attrNames.indexOf(attrValue) > -1) { + Utils.notifyInfo({ + content: "Attribute name already exist" + }); + $(this).addClass('errorValidate'); + if (isAttrDuplicate) { isAttrDuplicate = false; } + } else { + if (attrValue.length) { + attrNames.push(attrValue); } } - }) - } - if (this.$el.find(".stringlength-container").length > 0 && this.$el.find(".stringlength-container")[0].style.display != 'none') { - this.$el.find(".stringlength-container").each(function(index) { - if (this.style.display != 'none') { - if ($(this).find(".stringLengthVal").length > 0) { - $(this).find(".stringLengthVal").each(function(index) { - if ($(this).val().length === 0) { - $(this).css("borderColor", "red"); - stringValidate = false; - } - }); - } - }; - }) - } - - this.$el.find(".attributeInput").keyup(function() { - $(this).css("borderColor", "#e8e9ee"); - }); - if (!attrNameValidate) { - Utils.notifyInfo({ - content: "Please fill the attributes details" }); - return true; } - if (!enumType) { - Utils.notifyInfo({ - content: "Please enter the Enumeration Name or select another type" - }); - return true; - } - if (!enumValue) { + + if (!isValidate) { Utils.notifyInfo({ - content: "Please enter the Enum values or select another type" + content: "Please fill the details" }); return true; } - if (!stringValidate) { - Utils.notifyInfo({ - content: "Please enter the Max Length for string or select another type" - }); + if (!isAttrDuplicate) { return true; } - }, - businessMetadataAttributes: function(modelEl, attrObj) { - var obj = { - options: { - "applicableEntityTypes": JSON.stringify(modelEl.find(".entityTypeSelector").val()), - "maxStrLength": modelEl.find(".stringLengthVal").val() ? modelEl.find(".stringLengthVal").val() : "0" - } - }; - // var types = ["string","boolean"]; - // if (attrObj.typeName != "string" && attrObj.typeName != "boolean" && attrObj.typeName != "byte" && attrObj.typeName != "short" && attrObj.typeName != "int" && attrObj.typeName != "float" && attrObj.typeName != "double" && attrObj.typeName != "long" && attrObj.typeName != "date") { - // var enumName = enumDefCollection.fullCollection.findWhere({ name: attrObj.typeName }); - // if (enumName) { - // return - // } - // } - if (obj.multiValueSelect) { - obj.multiValued = true; - obj.typeName = "array<" + obj.typeName + ">"; - } - return obj; - }, - highlightAttrinuteName: function(modelEl, obj) { - Utils.notifyInfo({ - content: "Attribute " + obj.name + " already exist" - }); - modelEl.find(".attributeInput").css("borderColor", "red"); - this.loaderStatus(false); - }, - createEnumObject: function(arrayObj, obj, enumVal) { - return arrayObj.push({ - "name": obj.typeName, - "elementDefs": enumVal - }); + }, onCreateBusinessMetadata: function() { - var that = this, - attrNames = [], - isvalidName = true; - + var that = this; if (this.validateValues()) { return; }; @@ -315,163 +236,87 @@ define(['require', if (this.collection.length === 1 && this.collection.first().get("name") === "") { attributeObj = []; } - if (attributeObj.length) { - // _.each(attributeObj, function(obj) { - // var modelEl = this.$('#' + obj.modalID); - // modelEl.find(".attributeInput").css("borderColor", "transparent");; - // if (attrNames.indexOf(obj.name) > -1) { - // that.highlightAttrinuteName(modelEl, obj); - // isvalidName = false; - // return true; - // } else { - // attrNames.push(obj.name); - // } - // obj = that.businessMetadataAttributes(modelEl, obj); - // // if (that.isPostCallEnum) { - // // that.createEnumObject(enumDefs, obj, elementValues); - // // } - // // if (that.isPutCall) { - // // that.createEnumObject(putEnumDef, obj, elementValues); - // // } - // }); - var notifyObj = { - modal: true, - confirm: { - confirm: true, - buttons: [{ - text: "Ok", - addClass: "btn-atlas btn-md", - click: function(notice) { - notice.remove(); - } - }, - null - ] + this.json = { + "enumDefs": [], + "structDefs": [], + "classificationDefs": [], + "entityDefs": [], + "businessMetadataDefs": [{ + "category": "BUSINESS_METADATA", + "createdBy": "admin", + "updatedBy": "admin", + "version": 1, + "typeVersion": "1.1", + "name": name.trim(), + "description": description.trim(), + "attributeDefs": attributeObj + }] + }; + var apiObj = { + sort: false, + data: this.json, + success: function(model, response) { + var nameSpaveDef = model.businessMetadataDefs; + if (nameSpaveDef) { + that.businessMetadataDefCollection.fullCollection.add(nameSpaveDef); + Utils.notifySuccess({ + content: "Business Metadata " + name + Messages.getAbbreviationMsg(false, 'addSuccessMessage') + }); } - }; + that.options.onUpdateBusinessMetadata(); + }, + silent: true, + reset: true, + complete: function(model, status) { + that.loaderStatus(false); + } } - if (isvalidName) { + apiObj.type = "POST"; + that.businessMetadataModel.saveBusinessMetadata(apiObj); + }, + onUpdateAttr: function() { + var that = this, + selectedBusinessMetadataClone = $.extend(true, {}, that.selectedBusinessMetadata.toJSON()), + attributeDefs = selectedBusinessMetadataClone['attributeDefs'], + isvalidName = true; + if (this.validateValues(attributeDefs)) { + return; + }; + if (this.collection.length > 0) { + this.loaderStatus(true); + if (selectedBusinessMetadataClone.attributeDefs === undefined) { + selectedBusinessMetadataClone.attributeDefs = []; + } + selectedBusinessMetadataClone.attributeDefs = selectedBusinessMetadataClone.attributeDefs.concat(this.collection.toJSON()); this.json = { "enumDefs": [], "structDefs": [], "classificationDefs": [], "entityDefs": [], - "businessMetadataDefs": [{ - "category": "BUSINESS_METADATA", - "createdBy": "admin", - "updatedBy": "admin", - "version": 1, - "typeVersion": "1.1", - "name": name.trim(), - "description": description.trim(), - "attributeDefs": attributeObj - }] + "businessMetadataDefs": [selectedBusinessMetadataClone] }; var apiObj = { sort: false, data: this.json, success: function(model, response) { - var nameSpaveDef = model.businessMetadataDefs; - if (nameSpaveDef) { - that.options.businessMetadataDefCollection.fullCollection.add(nameSpaveDef); - Utils.notifySuccess({ - content: "Business Metadata " + name + Messages.getAbbreviationMsg(false, 'addSuccessMessage') - }); + Utils.notifySuccess({ + content: "One or more Business Metadada attribute" + Messages.getAbbreviationMsg(false, 'editSuccessMessage') + }); + if (model.businessMetadataDefs && model.businessMetadataDefs.length) { + that.selectedBusinessMetadata.set(model.businessMetadataDefs[0]); } + that.options.onEditCallback(); that.options.onUpdateBusinessMetadata(); }, silent: true, reset: true, complete: function(model, status) { - attrNames = []; that.loaderStatus(false); } } - apiObj.type = "POST"; + apiObj.type = "PUT"; that.businessMetadataModel.saveBusinessMetadata(apiObj); } else { - attrNames = []; - } - }, - onUpdateAttr: function() { - var that = this, - selectedBusinessMetadata = $.extend(true, {}, that.options.selectedBusinessMetadata.toJSON()), - attributeDefs = selectedBusinessMetadata['attributeDefs'], - isvalidName = true; - if (this.validateValues()) { - return; - }; - if (this.collection.length > 0) { - this.loaderStatus(true); - if (selectedBusinessMetadata.attributeDefs === undefined) { - selectedBusinessMetadata.attributeDefs = []; - } - selectedBusinessMetadata.attributeDefs = selectedBusinessMetadata.attributeDefs.concat(this.collection.toJSON()); - // this.collection.each(function(model) { - // var obj = model.toJSON(), - // modelEl = this.$('#' + obj.modalID); - // modelEl.find(".attributeInput").css("borderColor", "transparent"); - // // if (that.options.isNewAttr == true && _.find(attributeDefs, { name: obj.name })) { - // // that.highlightAttrinuteName(modelEl, obj); - // // isvalidName = false; - // // return true; - // // } - // obj = that.businessMetadataAttributes(modelEl, obj); - // // if (that.isPostCallEnum) { - // // that.createEnumObject(postEnumDef, obj, elementValues); - // // } else if (that.isPutCall) { - // // that.createEnumObject(enumDefs, obj, elementValues); - // // } - - // // if (that.options.isNewAttr == true) { - // // selectedBusinessMetadata.attributeDefs.push(obj); - // // } else { - // // var attrDef = selectedBusinessMetadata.attributeDefs; - // // _.each(attrDef, function(attrObj) { - // // if (attrObj.name === that.$el.find(".attributeInput")[0].value) { - // // attrObj.name = obj.name; - // // attrObj.typeName = obj.typeName; - // // attrObj.multiValued = obj.multiValueSelect || false; - // // attrObj.options.applicableEntityTypes = obj.options.applicableEntityTypes; - // // attrObj.enumValues = obj.enumValues; - // // attrObj.options.maxStrLength = obj.options.maxStrLength; - // // } - // // }); - // // } - // }); - if (isvalidName) { - this.json = { - "enumDefs": [], - "structDefs": [], - "classificationDefs": [], - "entityDefs": [], - "businessMetadataDefs": [selectedBusinessMetadata] - }; - var apiObj = { - sort: false, - data: this.json, - success: function(model, response) { - var selectedBusinessMetadata = that.options.businessMetadataDefCollection.fullCollection.findWhere({ guid: that.options.guid }); - Utils.notifySuccess({ - content: "One or more Business Metadada attribute" + Messages.getAbbreviationMsg(false, 'editSuccessMessage') - }); - if (model.businessMetadataDefs && model.businessMetadataDefs.length) { - that.options.selectedBusinessMetadata.set(model.businessMetadataDefs[0]); - } - that.options.onEditCallback(); - that.options.onUpdateBusinessMetadata(); - }, - silent: true, - reset: true, - complete: function(model, status) { - that.loaderStatus(false); - } - } - apiObj.type = "PUT"; - that.businessMetadataModel.saveBusinessMetadata(apiObj); - } - - } else { Utils.notifySuccess({ content: "No attribute updated" }); diff --git a/dashboardv3/public/js/views/business_metadata/EnumCreateUpdateItemView.js b/dashboardv3/public/js/views/business_metadata/EnumCreateUpdateItemView.js index e0f647f..867a56d 100644 --- a/dashboardv3/public/js/views/business_metadata/EnumCreateUpdateItemView.js +++ b/dashboardv3/public/js/views/business_metadata/EnumCreateUpdateItemView.js @@ -15,13 +15,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -define(["require", "backbone", "hbs!tmpl/business_metadata/EnumCreateUpdateItemView_tmpl", "utils/Utils", "utils/UrlLinks", "utils/Messages"], function( +define(["require", "backbone", "hbs!tmpl/business_metadata/EnumCreateUpdateItemView_tmpl", "utils/Utils", "utils/UrlLinks"], function( require, Backbone, EnumCreateUpdateItemViewTmpl, Utils, - UrlLinks, - Messages + UrlLinks ) { "use strict"; @@ -81,13 +80,9 @@ define(["require", "backbone", "hbs!tmpl/business_metadata/EnumCreateUpdateItemV * @constructs */ initialize: function(options) { - this.enumDefCollection = options.enumDefCollection; - this.businessMetadataDefCollection = options.businessMetadataDefCollection; + _.extend(this, _.pick(options, "businessMetadataDefCollection", "enumDefCollection")); }, onRender: function() { - var that = this, - entitytypes = "", - enumTypes = []; this.ui.enumValueSelectorContainer.hide(); this.bindEvents(); this.emumTypeSelectDisplay(); @@ -107,8 +102,7 @@ define(["require", "backbone", "hbs!tmpl/business_metadata/EnumCreateUpdateItemV var enumValues = "", selectedValues = [], selectedEnum = this.enumDefCollection.fullCollection.findWhere({ name: enumName }), - selectedEnumValues = selectedEnum ? selectedEnum.get("elementDefs") : null, - savedValues = []; + selectedEnumValues = selectedEnum ? selectedEnum.get("elementDefs") : null; _.each(selectedEnumValues, function(enumVal, index) { selectedValues.push(_.unescape(enumVal.value)); enumValues += "<option>" + enumVal.value + "</option>"; diff --git a/dashboardv3/public/js/views/search/SearchResultLayoutView.js b/dashboardv3/public/js/views/search/SearchResultLayoutView.js index 3741bc0..afd3ab8 100644 --- a/dashboardv3/public/js/views/search/SearchResultLayoutView.js +++ b/dashboardv3/public/js/views/search/SearchResultLayoutView.js @@ -163,6 +163,7 @@ define(['require', this.multiSelectEntity = []; this.searchType = 'Basic Search'; this.columnOrder = null; + this.defaultColumns = ["selected", "name", "description", "typeName", "owner", "tag", "term"]; if (this.value) { if (this.value.searchType && this.value.searchType == 'dsl') { this.searchType = 'Advanced Search'; @@ -227,7 +228,7 @@ define(['require', this.updateColumnList(state); var excludeDefaultColumn = []; if (this.value && this.value.type) { - excludeDefaultColumn = _.without(this.searchTableColumns[this.value.type], "selected", "name", "description", "typeName", "owner", "tag", "term"); + excludeDefaultColumn = _.difference(this.searchTableColumns[this.value.type], this.defaultColumns); if (this.searchTableColumns[this.value.type] === null) { this.ui.columnEmptyInfo.show(); } else { @@ -380,7 +381,7 @@ define(['require', } if (isPostMethod && isSearchTab) { - var excludeDefaultColumn = this.value.type && this.searchTableColumns ? _.without(this.searchTableColumns[this.value.type], "selected", "name", "description", "typeName", "owner", "tag") : null, + var excludeDefaultColumn = this.value.type && this.searchTableColumns ? _.difference(this.searchTableColumns[this.value.type], this.defaultColumns) : null, filterObj = { 'entityFilters': entityFilters, 'tagFilters': tagFilters, @@ -793,14 +794,14 @@ define(['require', } }) }; - col['businessMetaData'] = { - label: "Business MetaData", + col['businessMetadata'] = { + label: "Business Metadata", cell: "Html", editable: false, resizeable: true, orderable: true, alwaysVisible: true, //Backgrid.ColumnManager.js -> render() to hide the name in dropdownlist - renderable: _.contains(columnToShow, 'businessMetaData'), + renderable: _.contains(columnToShow, 'businessMetadata'), formatter: _.extend({}, Backgrid.CellFormatter.prototype, { fromRaw: function(rawValue, model) { var obj = model.toJSON(),