This is an automated email from the ASF dual-hosted git repository. kbhatt pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 8baade2486b5ee5d41f8a00c19011a9484bf63be Author: kevalbhatt <[email protected]> AuthorDate: Sat Mar 28 16:20:27 2020 +0530 ATLAS-3685 :- UI Bulk import Business Metadata attribute assignment to entities --- dashboardv3/public/css/scss/leftsidebar.scss | 2 +- .../ImportLayoutView_tmpl.html} | 2 +- .../tree/BusinessMetadataTreeLayoutView_tmpl.html | 2 - .../search/tree/EntityTreeLayoutView_tmpl.html | 7 +++- .../search/tree/GlossaryTreeLayoutView_tmpl.html | 2 +- dashboardv3/public/js/utils/UrlLinks.js | 6 +++ .../ImportLayoutView.js} | 46 +++++++++++----------- .../js/views/search/tree/EntityTreeLayoutView.js | 23 +++++++++-- .../js/views/search/tree/GlossaryTreeLayoutView.js | 9 +++-- 9 files changed, 64 insertions(+), 35 deletions(-) diff --git a/dashboardv3/public/css/scss/leftsidebar.scss b/dashboardv3/public/css/scss/leftsidebar.scss index 9c5475c..d547f39 100644 --- a/dashboardv3/public/css/scss/leftsidebar.scss +++ b/dashboardv3/public/css/scss/leftsidebar.scss @@ -427,7 +427,7 @@ span.tree-tooltip { } } -.glossary-dropdown { +.tree-droupdown { left: -190px !important; span a { diff --git a/dashboardv3/public/js/templates/glossary/ImportGlossaryLayoutView_tmpl.html b/dashboardv3/public/js/templates/import/ImportLayoutView_tmpl.html similarity index 89% rename from dashboardv3/public/js/templates/glossary/ImportGlossaryLayoutView_tmpl.html rename to dashboardv3/public/js/templates/import/ImportLayoutView_tmpl.html index abf11b7..5bb9ab5 100644 --- a/dashboardv3/public/js/templates/glossary/ImportGlossaryLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/import/ImportLayoutView_tmpl.html @@ -14,4 +14,4 @@ * See the License for the specific language governing permissions and * limitations under the License. --> -<form action={{importUrl}} id="importGlossary" class="dropzone single-file-center"></form> \ No newline at end of file +<form id="importGlossary" class="dropzone single-file-center"></form> \ No newline at end of file diff --git a/dashboardv3/public/js/templates/search/tree/BusinessMetadataTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/BusinessMetadataTreeLayoutView_tmpl.html index 757a1ed..d7d2679 100644 --- a/dashboardv3/public/js/templates/search/tree/BusinessMetadataTreeLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/search/tree/BusinessMetadataTreeLayoutView_tmpl.html @@ -25,8 +25,6 @@ <button type="button" class="typeRefresh drop-down-menu-view" data-id="createBusinessMetadata" title="Open Business Metadata"> <i class="fa fa-external-link"></i> </button> - </ul> - </button> </div> </div> <div id="businessMetadataTree" class="panel-collapse collapse jstree-with-action in"> diff --git a/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html index 4966a8c..2f286dc 100644 --- a/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/search/tree/EntityTreeLayoutView_tmpl.html @@ -29,11 +29,16 @@ <div class=" btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-ellipsis-v"></i> </div> - <ul class="dropdown-menu" aria-labelledby="dropdownMenuButton"> + <ul class="dropdown-menu tree-droupdown" aria-labelledby="dropdownMenuButton"> <li data-id="groupOrFlatTreeView" data-type="entity"> <i class="fa fa-list-ul"></i><span>Show flat tree</span> </li> + <li data-id="downloadBusinessMetadata"><i class="fa fa-download"></i> <span><a href="{{importTmplUrl}}"><span>Download Import template</span></a></span> + </li> + <li data-id="importBusinessMetadata"> <i class="fa fa-upload"></i><a href="javascript:void(0)"><span>Import Business Metadata</span></a> + </li> </ul> </button> + </button> </div> </div> <div id="c_entity" class="panel-collapse collapse jstree-with-action in"> diff --git a/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html b/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html index ffafa60..0d9994e 100644 --- a/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html +++ b/dashboardv3/public/js/templates/search/tree/GlossaryTreeLayoutView_tmpl.html @@ -27,7 +27,7 @@ <div class=" btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-ellipsis-v"></i> </div> - <ul class="dropdown-menu glossary-dropdown" aria-labelledby="dropdownMenuButton"> + <ul class="dropdown-menu tree-droupdown" aria-labelledby="dropdownMenuButton"> <li data-id="createGlossary" data-type="term"> <i class="fa fa-plus"></i><span>Create Glossary</span> </li> <li data-id="downloadTemplate" data-type="term"><i class="fa fa-download"></i> <span><a href="{{importTmplUrl}}"><span>Download Import template</span></a></span> diff --git a/dashboardv3/public/js/utils/UrlLinks.js b/dashboardv3/public/js/utils/UrlLinks.js index 7793aaa..69e5274 100644 --- a/dashboardv3/public/js/utils/UrlLinks.js +++ b/dashboardv3/public/js/utils/UrlLinks.js @@ -191,6 +191,12 @@ define(['require', 'utils/Enums', 'utils/Utils', 'underscore'], function(require glossaryImportUrl: function() { return this.glossaryApiUrl() + '/import'; }, + businessMetadataImportTempUrl: function() { + return this.entitiesApiUrl() + '/businessmetadata/import/template'; + }, + businessMetadataImportUrl: function() { + return this.entitiesApiUrl() + '/businessmetadata/import'; + }, categoryApiUrl: function(options) { var guid = options && options.guid, list = options && options.list, diff --git a/dashboardv3/public/js/views/glossary/ImportGlossaryLayoutView.js b/dashboardv3/public/js/views/import/ImportLayoutView.js similarity index 73% rename from dashboardv3/public/js/views/glossary/ImportGlossaryLayoutView.js rename to dashboardv3/public/js/views/import/ImportLayoutView.js index 23b0ef7..d04847e 100644 --- a/dashboardv3/public/js/views/glossary/ImportGlossaryLayoutView.js +++ b/dashboardv3/public/js/views/import/ImportLayoutView.js @@ -19,25 +19,19 @@ define([ "require", "backbone", - "hbs!tmpl/glossary/ImportGlossaryLayoutView_tmpl", + "hbs!tmpl/import/ImportLayoutView_tmpl", "modules/Modal", 'utils/CommonViewFunction', "utils/Utils", "utils/UrlLinks", "dropzone" -], function(require, Backbone, ImportGlossaryLayoutViewTmpl, Modal, CommonViewFunction, Utils, UrlLinks, dropzone) { - var ImportGlossaryLayoutView = Backbone.Marionette.LayoutView.extend( - /** @lends ImportGlossaryLayoutView */ +], function(require, Backbone, ImportLayoutViewTmpl, Modal, CommonViewFunction, Utils, UrlLinks, dropzone) { + var ImportLayoutView = Backbone.Marionette.LayoutView.extend( + /** @lends ImportLayoutView */ { - _viewName: "ImportGlossaryLayoutView", + _viewName: "ImportLayoutView", - template: ImportGlossaryLayoutViewTmpl, - - templateHelpers: function() { - return { - importUrl: UrlLinks.glossaryImportUrl() - }; - }, + template: ImportLayoutViewTmpl, /** Layout sub regions */ regions: {}, @@ -50,14 +44,14 @@ define([ return events; }, /** - * intialize a new ImportGlossaryLayoutView Layout + * intialize a new ImportLayoutView Layout * @constructs */ initialize: function(options) { - _.extend(this, _.pick(options, "callback")); + _.extend(this, _.pick(options, "callback", "isGlossary")); var that = this; this.modal = new Modal({ - title: "Import Glossary", + title: this.isGlossary ? "Import Glossary" : "Import Business Metadata", content: this, cancelText: "Cancel", okText: "upload", @@ -88,7 +82,7 @@ define([ var headers = {}; headers[CommonViewFunction.restCsrfCustomHeader] = '""'; this.$("#importGlossary").dropzone({ - url: UrlLinks.glossaryImportUrl(), + url: that.isGlossary ? UrlLinks.glossaryImportUrl() : UrlLinks.businessMetadataImportUrl(), clickable: true, acceptedFiles: ".csv,.xls,.xlsx", autoProcessQueue: false, @@ -108,11 +102,19 @@ define([ this.addFile(file); }, success: function(file, response) { - that.modal.trigger("cancel"); - Utils.notifySuccess({ - content: "File: " + file.name + " added successfully" - }); - that.callback(); + if (response.successImportInfoList.length && response.failedImportInfoList.length === 0) { + that.modal.trigger("cancel"); + Utils.notifySuccess({ + content: "File: " + file.name + " imported successfully" + }); + } else if (response.failedImportInfoList.length) { + Utils.notifyError({ + content: response.failedImportInfoList[0].remarks + }); + } + if (that.callback) { + that.callback(); + } }, error: function(file, response, responseObj) { Utils.defaultErrorHandler(null, responseObj, { defaultErrorMessage: (response.errorMessage) || response }); @@ -124,5 +126,5 @@ define([ } } ); - return ImportGlossaryLayoutView; + return ImportLayoutView; }); \ No newline at end of file diff --git a/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js b/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js index e136d36..a42ecfd 100644 --- a/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js +++ b/dashboardv3/public/js/views/search/tree/EntityTreeLayoutView.js @@ -43,11 +43,14 @@ define([ // Show/hide empty values in tree showEmptyServiceType: '[data-id="showEmptyServiceType"]', - entityTreeLoader: '[data-id="entityTreeLoader"]' + entityTreeLoader: '[data-id="entityTreeLoader"]', + importBusinessMetadata: "[data-id='importBusinessMetadata']", + downloadBusinessMetadata: "[data-id='downloadBusinessMetadata']" }, templateHelpers: function() { return { - apiBaseUrl: UrlLinks.apiBaseUrl + apiBaseUrl: UrlLinks.apiBaseUrl, + importTmplUrl: UrlLinks.businessMetadataImportTempUrl() }; }, events: function() { @@ -79,6 +82,13 @@ define([ that.ui[type + "SearchTree"].jstree(true).destroy(); that.renderEntityTree(); }; + events["click " + this.ui.importBusinessMetadata] = function(e) { + e.stopPropagation(); + that.onClickImportBusinessMetadata(); + }; + events["click " + this.ui.downloadBusinessMetadata] = function(e) { + e.stopPropagation(); + }; return events; }, @@ -558,7 +568,14 @@ define([ renderTree(); } }); - + }, + onClickImportBusinessMetadata: function() { + var that = this; + require([ + 'views/import/ImportLayoutView' + ], function(ImportLayoutView) { + var view = new ImportLayoutView({}); + }); } }); return EntityTreeLayoutview; diff --git a/dashboardv3/public/js/views/search/tree/GlossaryTreeLayoutView.js b/dashboardv3/public/js/views/search/tree/GlossaryTreeLayoutView.js index d068b8c..0f10607 100644 --- a/dashboardv3/public/js/views/search/tree/GlossaryTreeLayoutView.js +++ b/dashboardv3/public/js/views/search/tree/GlossaryTreeLayoutView.js @@ -711,12 +711,13 @@ define([ onClickImportGlossary: function() { var that = this; require([ - 'views/glossary/ImportGlossaryLayoutView' - ], function(ImportGlossaryLayoutView) { - var view = new ImportGlossaryLayoutView({ + 'views/import/ImportLayoutView' + ], function(ImportLayoutView) { + var view = new ImportLayoutView({ callback: function() { that.refresh(); - } + }, + isGlossary: true }); }); }
