| /** |
| * 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. |
| */ |
| |
| define(['require', |
| 'backbone', |
| 'hbs!tmpl/detail_page/DetailPageLayoutView_tmpl', |
| 'utils/Utils', |
| 'collection/VTagList', |
| 'models/VEntity', |
| 'utils/CommonViewFunction', |
| 'utils/Globals', |
| 'utils/Messages' |
| ], function(require, Backbone, DetailPageLayoutViewTmpl, Utils, VTagList, VEntity, CommonViewFunction, Globals, Messages) { |
| 'use strict'; |
| |
| var DetailPageLayoutView = Backbone.Marionette.LayoutView.extend( |
| /** @lends DetailPageLayoutView */ |
| { |
| _viewName: 'DetailPageLayoutView', |
| |
| template: DetailPageLayoutViewTmpl, |
| |
| /** Layout sub regions */ |
| regions: { |
| REntityDetailTableLayoutView: "#r_entityDetailTableLayoutView", |
| RSchemaTableLayoutView: "#r_schemaTableLayoutView", |
| RTagTableLayoutView: "#r_tagTableLayoutView", |
| RLineageLayoutView: "#r_lineageLayoutView", |
| RAuditTableLayoutView: "#r_auditTableLayoutView", |
| RTermTableLayoutView: "#r_termTableLayoutView" |
| |
| }, |
| /** ui selector cache */ |
| ui: { |
| tagClick: '[data-id="tagClick"]', |
| title: '[data-id="title"]', |
| createDate: '[data-id="createDate"]', |
| updateDate: '[data-id="updateDate"]', |
| createdUser: '[data-id="createdUser"]', |
| deleteTag: '[data-id="deleteTag"]', |
| backButton: "[data-id='backButton']", |
| addTag: '[data-id="addTag"]', |
| addTerm: '[data-id="addTerm"]', |
| tagList: '[data-id="tagList"]', |
| termList: '[data-id="termList"]' |
| }, |
| /** ui events hash */ |
| events: function() { |
| var events = {}; |
| events["click " + this.ui.tagClick] = function(e) { |
| if (e.target.nodeName.toLocaleLowerCase() != "i") { |
| var scope = $(e.currentTarget); |
| if (scope.hasClass('term')) { |
| var url = scope.data('href').split(".").join("/terms/"); |
| Globals.saveApplicationState.tabState.stateChanged = false; |
| Utils.setUrl({ |
| url: '#!/taxonomy/detailCatalog/api/atlas/v1/taxonomies/' + url, |
| mergeBrowserUrl: false, |
| trigger: true |
| }); |
| } else { |
| Utils.setUrl({ |
| url: '#!/tag/tagAttribute/' + e.currentTarget.textContent, |
| mergeBrowserUrl: false, |
| trigger: true |
| }); |
| } |
| } |
| }; |
| events["click " + this.ui.deleteTag] = 'onClickTagCross'; |
| events["click " + this.ui.addTag] = 'onClickAddTagBtn'; |
| events["click " + this.ui.addTerm] = 'onClickAddTermBtn'; |
| events['click ' + this.ui.backButton] = function() { |
| Backbone.history.history.back(); |
| }; |
| return events; |
| }, |
| templateHelpers: function() { |
| return { |
| taxonomy: Globals.taxonomy |
| }; |
| }, |
| /** |
| * intialize a new DetailPageLayoutView Layout |
| * @constructs |
| */ |
| initialize: function(options) { |
| _.extend(this, _.pick(options, 'globalVent', 'collection', 'vent', 'id')); |
| this.bindEvents(); |
| }, |
| bindEvents: function() { |
| var that = this; |
| this.listenTo(this.collection, 'reset', function() { |
| |
| var collectionJSON = this.collection.toJSON(); |
| if (collectionJSON[0].id && collectionJSON[0].id.id) { |
| var tagGuid = collectionJSON[0].id.id; |
| this.readOnly = Globals.entityStateReadOnly[collectionJSON[0].id.state]; |
| } |
| if (this.readOnly) { |
| this.$el.addClass('readOnly'); |
| } else { |
| this.$el.removeClass('readOnly'); |
| } |
| if (collectionJSON && collectionJSON.length) { |
| if (collectionJSON[0].values) { |
| if (collectionJSON[0].values.name) { |
| this.name = collectionJSON[0].values.name; |
| } |
| if (!this.name && collectionJSON[0].values.qualifiedName) { |
| this.name = collectionJSON[0].values.qualifiedName; |
| } |
| if (this.name && collectionJSON[0].typeName) { |
| this.name = this.name + ' (' + collectionJSON[0].typeName + ')'; |
| } |
| if (!this.name && collectionJSON[0].typeName) { |
| this.name = collectionJSON[0].typeName; |
| } |
| |
| if (!this.name && this.id) { |
| this.name = this.id; |
| } |
| if (this.name) { |
| this.ui.title.show(); |
| var titleName = '<span>' + _.escape(this.name) + '</span>'; |
| if (this.readOnly) { |
| titleName += '<button title="Deleted" class="btn btn-atlasAction btn-atlas deleteBtn"><i class="fa fa-trash"></i> Deleted</button>'; |
| } |
| this.ui.title.html(titleName); |
| } else { |
| this.ui.title.hide(); |
| } |
| } |
| if (collectionJSON[0].traits) { |
| this.addTagTerms(collectionJSON[0].traits); |
| } |
| } |
| Utils.hideTitleLoader(this.$('.page-title .fontLoader'), this.$('.entityDetail')); |
| this.renderEntityDetailTableLayoutView(); |
| this.renderTagTableLayoutView(tagGuid); |
| this.renderAuditTableLayoutView(tagGuid); |
| this.renderTermTableLayoutView(tagGuid); |
| }, this); |
| this.listenTo(this.collection, 'error', function(model, response) { |
| this.$('.fontLoader').hide(); |
| if (response.responseJSON && response.responseJSON.error) { |
| Utils.notifyError({ |
| content: response.responseJSON.error |
| }); |
| } |
| }, this); |
| }, |
| onRender: function() { |
| var that = this; |
| Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.entityDetail')); |
| this.renderLineageLayoutView(this.id); |
| this.renderSchemaLayoutView(this.id); |
| }, |
| fetchCollection: function() { |
| this.collection.fetch({ reset: true }); |
| }, |
| onClickTagCross: function(e) { |
| var tagName = $(e.currentTarget).parent().text(), |
| tagOrTerm = $(e.target).data("type"), |
| that = this; |
| if (tagOrTerm === "term") { |
| var modal = CommonViewFunction.deleteTagModel({ |
| msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>", |
| titleMessage: Messages.removeTerm, |
| buttonText: "Remove" |
| }); |
| } else if (tagOrTerm === "tag") { |
| var modal = CommonViewFunction.deleteTagModel({ |
| msg: "<div class='ellipsis'>Remove: " + "<b>" + _.escape(tagName) + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>", |
| titleMessage: Messages.removeTag, |
| buttonText: "Remove" |
| }); |
| } |
| if (modal) { |
| modal.on('ok', function() { |
| that.deleteTagData(e, tagOrTerm); |
| }); |
| modal.on('closeModal', function() { |
| modal.trigger('cancel'); |
| }); |
| } |
| }, |
| deleteTagData: function(e, tagOrTerm) { |
| var that = this, |
| tagName = $(e.currentTarget).text(); |
| Utils.showTitleLoader(this.$('.page-title .fontLoader'), this.$('.entityDetail')); |
| CommonViewFunction.deleteTag({ |
| 'tagName': tagName, |
| 'guid': that.id, |
| 'tagOrTerm': tagOrTerm, |
| callback: function() { |
| that.fetchCollection(); |
| } |
| }); |
| }, |
| addTagTerms: function(tagObject) { |
| var that = this, |
| tagData = "", |
| termData = ""; |
| |
| _.each(tagObject, function(val) { |
| var isTerm = Utils.checkTagOrTerm(val); |
| if (isTerm.tag) { |
| tagData += '<span class="inputTag" data-id="tagClick"><span class="inputValue">' + isTerm.fullName + '</span><i class="fa fa-close" data-id="deleteTag" data-type="tag"></i></span>'; |
| } |
| if (isTerm.term) { |
| termData += '<span class="inputTag term" data-id="tagClick" data-href="' + isTerm.fullName + '"><span class="inputValue">' + isTerm.fullName + '</span><i class="fa fa-close" data-id="deleteTag" data-type="term"></i></span>'; |
| } |
| }); |
| this.ui.tagList.find("span.inputTag").remove(); |
| this.ui.termList.find("span.inputTag").remove(); |
| this.ui.tagList.prepend(tagData); |
| this.ui.termList.prepend(termData); |
| }, |
| onClickAddTagBtn: function(e) { |
| var that = this; |
| require(['views/tag/addTagModalView'], function(AddTagModalView) { |
| var view = new AddTagModalView({ |
| vent: that.vent, |
| guid: that.id, |
| callback: function() { |
| that.fetchCollection(); |
| } |
| }); |
| view.modal.on('ok', function() { |
| Utils.showTitleLoader(that.$('.page-title .fontLoader'), that.$('.entityDetail')); |
| }); |
| }); |
| }, |
| onClickAddTermBtn: function(e) { |
| var that = this; |
| require([ |
| 'views/business_catalog/AddTermToEntityLayoutView', |
| ], function(AddTermToEntityLayoutView) { |
| var view = new AddTermToEntityLayoutView({ |
| guid: that.id, |
| callback: function() { |
| that.fetchCollection(); |
| } |
| }); |
| view.modal.on('ok', function() { |
| Utils.showTitleLoader(that.$('.page-title .fontLoader'), that.$('.entityDetail')); |
| }); |
| }); |
| |
| }, |
| renderEntityDetailTableLayoutView: function() { |
| var that = this; |
| require(['views/entity/EntityDetailTableLayoutView'], function(EntityDetailTableLayoutView) { |
| that.REntityDetailTableLayoutView.show(new EntityDetailTableLayoutView({ |
| globalVent: that.globalVent, |
| collection: that.collection |
| })); |
| }); |
| }, |
| renderTagTableLayoutView: function(tagGuid) { |
| var that = this; |
| require(['views/tag/TagDetailTableLayoutView'], function(TagDetailTableLayoutView) { |
| that.RTagTableLayoutView.show(new TagDetailTableLayoutView({ |
| globalVent: that.globalVent, |
| collection: that.collection, |
| guid: tagGuid, |
| assetName: that.name |
| })); |
| }); |
| }, |
| renderLineageLayoutView: function(tagGuid) { |
| var that = this; |
| require(['views/graph/LineageLayoutView'], function(LineageLayoutView) { |
| that.RLineageLayoutView.show(new LineageLayoutView({ |
| globalVent: that.globalVent, |
| guid: tagGuid |
| })); |
| }); |
| }, |
| renderSchemaLayoutView: function(tagGuid) { |
| var that = this; |
| require(['views/schema/SchemaLayoutView'], function(SchemaLayoutView) { |
| that.RSchemaTableLayoutView.show(new SchemaLayoutView({ |
| globalVent: that.globalVent, |
| guid: tagGuid |
| })); |
| }); |
| }, |
| renderAuditTableLayoutView: function(tagGuid) { |
| var that = this; |
| require(['views/audit/AuditTableLayoutView'], function(AuditTableLayoutView) { |
| that.RAuditTableLayoutView.show(new AuditTableLayoutView({ |
| globalVent: that.globalVent, |
| guid: tagGuid |
| })); |
| }); |
| }, |
| renderTermTableLayoutView: function(tagGuid) { |
| var that = this; |
| require(['views/tag/TagDetailTableLayoutView'], function(TagDetailTableLayoutView) { |
| that.RTermTableLayoutView.show(new TagDetailTableLayoutView({ |
| globalVent: that.globalVent, |
| collection: that.collection, |
| guid: tagGuid, |
| assetName: that.name, |
| term: true |
| })); |
| }); |
| } |
| }); |
| return DetailPageLayoutView; |
| }); |