define([ "require", "backbone", "hbs!tmpl/detail_page/DetailPageLayoutView_tmpl", "utils/Utils", "utils/CommonViewFunction", "utils/Globals", "utils/Enums", "utils/Messages", "utils/UrlLinks", "collection/VEntityList" ], function(require, Backbone, DetailPageLayoutViewTmpl, Utils, CommonViewFunction, Globals, Enums, Messages, UrlLinks, VEntityList) {
"use strict";
var DetailPageLayoutView = Backbone.Marionette.LayoutView.extend({
_viewName: "DetailPageLayoutView",
template: DetailPageLayoutViewTmpl,
regions: {
REntityDetailTableLayoutView: "#r_entityDetailTableLayoutView",
RSchemaTableLayoutView: "#r_schemaTableLayoutView",
RTagTableLayoutView: "#r_tagTableLayoutView",
RLineageLayoutView: "#r_lineageLayoutView",
RAuditTableLayoutView: "#r_auditTableLayoutView",
RPendingTaskTableLayoutView: "#r_pendingTaskTableLayoutView",
RReplicationAuditTableLayoutView: "#r_replicationAuditTableLayoutView",
RProfileLayoutView: "#r_profileLayoutView",
RRelationshipLayoutView: "#r_relationshipLayoutView",
REntityUserDefineView: "#r_entityUserDefineView",
REntityLabelDefineView: "#r_entityLabelDefineView",
REntityBusinessMetadataView: "#r_entityBusinessMetadataView"
},
ui: {
tagClick: '[data-id="tagClick"]',
pTagCountClick: '[data-id="pTagCountClick"]',
termClick: '[data-id="termClick"]',
propagatedTagDiv: '[data-id="propagatedTagDiv"]',
title: '[data-id="title"]',
description: '[data-id="description"]',
editBox: '[data-id="editBox"]',
deleteTag: '[data-id="deleteTag"]',
deleteTerm: '[data-id="deleteTerm"]',
addTag: '[data-id="addTag"]',
addTerm: '[data-id="addTerm"]',
tagList: '[data-id="tagList"]',
termList: '[data-id="termList"]',
propagatedTagList: '[data-id="propagatedTagList"]',
tablist: '[data-id="tab-list"] li',
entityIcon: '[data-id="entityIcon"]'
},
templateHelpers: function() {
return {
entityUpdate: Globals.entityUpdate,
isTasksEnabled: Globals.isTasksEnabled
};
},
events: function() {
var events = {};
return events["click " + this.ui.tagClick] = function(e) {
"i" != e.target.nodeName.toLocaleLowerCase() && Utils.setUrl({
url: "#!/tag/tagAttribute/" + e.currentTarget.textContent,
mergeBrowserUrl: !1,
trigger: !0
});
}, events["click " + this.ui.pTagCountClick] = function(e) {
var tag = $(e.currentTarget).parent().children().first().text();
Utils.setUrl({
url: "#!/detailPage/" + this.id + "?tabActive=classification&filter=" + tag,
mergeBrowserUrl: !1,
trigger: !0
});
}, events["click " + this.ui.termClick] = function(e) {
"i" != e.target.nodeName.toLocaleLowerCase() && Utils.setUrl({
url: "#!/glossary/" + $(e.currentTarget).find("i").data("guid"),
mergeBrowserUrl: !1,
urlParams: {
gType: "term",
viewType: "term",
fromView: "entity"
},
trigger: !0
});
}, events["click " + this.ui.addTerm] = "onClickAddTermBtn", events["click " + this.ui.deleteTag] = "onClickTagCross",
events["click " + this.ui.deleteTerm] = "onClickTermCross", events["click " + this.ui.addTag] = "onClickAddTagBtn",
events["click " + this.ui.tablist] = function(e) {
var tabValue = $(e.currentTarget).attr("role");
Utils.setUrl({
url: Utils.getUrlState.getQueryUrl().queyParams[0],
urlParams: {
tabActive: tabValue || "properties"
},
mergeBrowserUrl: !1,
trigger: !1,
updateTabState: !0
});
}, events;
},
initialize: function(options) {
_.extend(this, _.pick(options, "value", "collection", "id", "entityDefCollection", "typeHeaders", "enumDefCollection", "classificationDefCollection", "glossaryCollection", "businessMetadataDefCollection", "searchVent")),
$("body").addClass("detail-page"), this.collection = new VEntityList([], {}), this.collection.url = UrlLinks.entitiesApiUrl({
guid: this.id,
minExtInfo: !0
}), this.fetchCollection();
},
bindEvents: function() {
var that = this;
this.listenTo(this.collection, "reset", function() {
this.entityObject = this.collection.first().toJSON();
var collectionJSON = this.entityObject.entity;
if (this.activeEntityDef = this.entityDefCollection.fullCollection.find({
name: collectionJSON.typeName
}), !this.activeEntityDef) return Utils.backButtonClick(), Utils.notifyError({
content: "Unknown Entity-Type"
}), !0;
collectionJSON && _.startsWith(collectionJSON.typeName, "AtlasGlossary") && this.$(".termBox").hide(),
Utils.findAndMergeRefEntity({
attributeObject: collectionJSON.attributes,
referredEntities: this.entityObject.referredEntities
}), Utils.findAndMergeRefEntity({
attributeObject: collectionJSON.relationshipAttributes,
referredEntities: this.entityObject.referredEntities
}), Utils.findAndMergeRelationShipEntity({
attributeObject: collectionJSON.attributes,
relationshipAttributes: collectionJSON.relationshipAttributes
});
var isProcess = !1, typeName = Utils.getName(collectionJSON, "typeName"), superTypes = Utils.getNestedSuperTypes({
data: this.activeEntityDef.toJSON(),
collection: this.entityDefCollection
}), isLineageRender = _.find(superTypes, function(type) {
if ("DataSet" === type || "Process" === type) return "Process" === type && (isProcess = !0),
!0;
});
if (isLineageRender || (isLineageRender = "DataSet" === typeName || "Process" === typeName || null),
collectionJSON && collectionJSON.guid) {
collectionJSON.guid;
this.readOnly = Enums.entityStateReadOnly[collectionJSON.status];
} else {
this.id;
}
if (this.readOnly ? this.$el.addClass("readOnly") : this.$el.removeClass("readOnly"),
collectionJSON) {
if (this.name = Utils.getName(collectionJSON), collectionJSON.attributes) {
if (collectionJSON.typeName && (collectionJSON.attributes.typeName = _.escape(collectionJSON.typeName)),
this.name && collectionJSON.typeName && (this.name = this.name + " (" + _.escape(collectionJSON.typeName) + ")"),
!this.name && collectionJSON.typeName && (this.name = _.escape(collectionJSON.typeName)),
this.description = collectionJSON.attributes.description, this.name) {
this.ui.title.show();
var titleName = "" + this.name + "";
this.readOnly && (titleName += ''),
this.ui.title.html(titleName), void 0 === collectionJSON.attributes.serviceType ? void 0 === Globals.serviceTypeMap[collectionJSON.typeName] && this.activeEntityDef && (Globals.serviceTypeMap[collectionJSON.typeName] = this.activeEntityDef.get("serviceType")) : void 0 === Globals.serviceTypeMap[collectionJSON.typeName] && (Globals.serviceTypeMap[collectionJSON.typeName] = collectionJSON.attributes.serviceType);
var entityData = _.extend({
serviceType: Globals.serviceTypeMap[collectionJSON.typeName],
isProcess: isProcess
}, collectionJSON);
this.readOnly ? this.ui.entityIcon.addClass("disabled") : this.ui.entityIcon.removeClass("disabled"),
this.ui.entityIcon.attr("title", _.escape(collectionJSON.typeName)).html('').find("img").on("error", function() {
this.src = Utils.getEntityIconPath({
entityData: entityData,
errorUrl: this.src
});
});
} else this.ui.title.hide();
this.description ? (this.ui.description.show(), this.ui.description.html("" + _.escape(this.description) + "")) : this.ui.description.hide();
}
var tags = {
self: [],
propagated: [],
propagatedMap: {},
combineMap: {}
};
if (collectionJSON.classifications) {
var tagObject = collectionJSON.classifications;
_.each(tagObject, function(val) {
var typeName = val.typeName;
val.entityGuid === that.id ? tags.self.push(val) : (tags.propagated.push(val), tags.propagatedMap[typeName] ? tags.propagatedMap[typeName].count++ : (tags.propagatedMap[typeName] = val,
tags.propagatedMap[typeName].count = 1)), void 0 === tags.combineMap[typeName] && (tags.combineMap[typeName] = val);
}), tags.self = _.sortBy(tags.self, "typeName"), tags.propagated = _.sortBy(tags.propagated, "typeName"),
this.generateTag(tags);
} else this.generateTag([]);
if (collectionJSON.relationshipAttributes && collectionJSON.relationshipAttributes.meanings && this.generateTerm(collectionJSON.relationshipAttributes.meanings),
Globals.entityTypeConfList && _.isEmptyArray(Globals.entityTypeConfList) ? this.editEntity = !0 : _.contains(Globals.entityTypeConfList, collectionJSON.typeName) && (this.editEntity = !0),
collectionJSON.attributes && collectionJSON.attributes.columns) {
var valueSorted = _.sortBy(collectionJSON.attributes.columns, function(val) {
return val.attributes && val.attributes.position;
});
collectionJSON.attributes.columns = valueSorted;
}
}
this.hideLoader();
var obj = {
entity: collectionJSON,
guid: this.id,
entityName: this.name,
typeHeaders: this.typeHeaders,
tags: tags,
entityDefCollection: this.entityDefCollection,
fetchCollection: this.fetchCollection.bind(that),
enumDefCollection: this.enumDefCollection,
classificationDefCollection: this.classificationDefCollection,
glossaryCollection: this.glossaryCollection,
businessMetadataCollection: this.activeEntityDef.get("businessAttributeDefs"),
searchVent: this.searchVent,
attributeDefs: function() {
return that.getEntityDef(collectionJSON);
}(),
editEntity: this.editEntity || !1
};
if (obj.renderAuditTableLayoutView = function() {
that.renderAuditTableLayoutView(obj);
}, this.renderEntityDetailTableLayoutView(obj), this.renderEntityUserDefineView(obj),
this.renderEntityLabelDefineView(obj), obj.businessMetadataCollection && this.renderEntityBusinessMetadataView(obj),
this.renderRelationshipLayoutView(obj), this.renderAuditTableLayoutView(obj), this.renderTagTableLayoutView(obj),
Globals.isTasksEnabled && this.renderPendingTaskTableLayoutView(), !collectionJSON || _.isUndefined(collectionJSON.attributes.profileData) && "hive_db" !== collectionJSON.typeName && "hbase_namespace" !== collectionJSON.typeName ? (this.$(".profileTab").hide(),
this.redirectToDefaultTab("profile")) : ("hive_db" !== collectionJSON.typeName && "hbase_namespace" !== collectionJSON.typeName || this.$(".profileTab a").text("Tables"),
this.$(".profileTab").show(), this.renderProfileLayoutView(_.extend({}, obj, {
entityDetail: collectionJSON.attributes,
profileData: collectionJSON.attributes.profileData,
typeName: collectionJSON.typeName,
value: that.value
}))), this.activeEntityDef) {
collectionJSON && "AtlasServer" === collectionJSON.typeName ? (this.$(".replicationTab").show(),
this.renderReplicationAuditTableLayoutView(obj)) : (this.$(".replicationTab").hide(),
this.redirectToDefaultTab("raudits"));
var schemaOptions = this.activeEntityDef.get("options"), schemaElementsAttribute = schemaOptions && schemaOptions.schemaElementsAttribute;
_.isEmpty(schemaElementsAttribute) ? (this.$(".schemaTable").hide(), this.redirectToDefaultTab("schema")) : (this.$(".schemaTable").show(),
this.renderSchemaLayoutView(_.extend({}, obj, {
attribute: collectionJSON.relationshipAttributes[schemaElementsAttribute] || collectionJSON.attributes[schemaElementsAttribute]
}))), isLineageRender ? (this.$(".lineageGraph").show(), this.renderLineageLayoutView(_.extend(obj, {
processCheck: isProcess,
fetchCollection: this.fetchCollection.bind(this)
}))) : (this.$(".lineageGraph").hide(), this.redirectToDefaultTab("lineage"));
}
}, this), this.listenTo(this.collection, "error", function(model, response) {
this.$(".fontLoader-relative").removeClass("show"), response.responseJSON && Utils.notifyError({
content: response.responseJSON.errorMessage || response.responseJSON.error
});
}, this);
},
onRender: function() {
this.bindEvents(), Utils.showTitleLoader(this.$(".page-title .fontLoader"), this.$(".entityDetail")),
this.$(".fontLoader-relative").addClass("show");
},
redirectToDefaultTab: function(tabName) {
var regionRef = null;
switch (tabName) {
case "schema":
regionRef = this.RSchemaTableLayoutView;
break;
case "lineage":
regionRef = this.RLineageLayoutView;
break;
case "raudits":
regionRef = this.RReplicationAuditTableLayoutView;
break;
case "profile":
regionRef = this.RProfileLayoutView;
}
regionRef && (regionRef.destroy(), regionRef.$el.empty()), (this.value && this.value.tabActive == tabName || this.$(".tab-content .tab-pane.active").attr("role") === tabName) && Utils.setUrl({
url: Utils.getUrlState.getQueryUrl().queyParams[0],
urlParams: {
tabActive: "properties"
},
mergeBrowserUrl: !1,
trigger: !0,
updateTabState: !0
});
},
manualRender: function(options) {
if (options) {
var oldId = this.id;
_.extend(this, _.pick(options, "value", "id")), this.id !== oldId && (this.collection.url = UrlLinks.entitiesApiUrl({
guid: this.id,
minExtInfo: !0
}), this.fetchCollection()), this.updateTab();
}
},
updateTab: function() {
this.value && this.value.tabActive && (this.$(".nav.nav-tabs").find('[role="' + this.value.tabActive + '"]').addClass("active").siblings().removeClass("active"),
this.$(".tab-content").find('[role="' + this.value.tabActive + '"]').addClass("active").siblings().removeClass("active"),
$("html, body").animate({
scrollTop: this.$(".tab-content").offset().top + 1200
}, 1e3));
},
onShow: function() {
this.updateTab();
},
onDestroy: function() {
Utils.getUrlState.isDetailPage() || $("body").removeClass("detail-page");
},
fetchCollection: function() {
this.collection.fetch({
reset: !0
}), this.searchVent && this.searchVent.trigger("entityList:refresh");
},
getEntityDef: function(entityObj) {
if (this.activeEntityDef) {
var data = this.activeEntityDef.toJSON(), attributeDefs = Utils.getNestedSuperTypeObj({
data: data,
attrMerge: !0,
collection: this.entityDefCollection
});
return attributeDefs;
}
return [];
},
onClickTagCross: function(e) {
var that = this, tagName = $(e.currentTarget).parent().text(), entityGuid = $(e.currentTarget).data("entityguid");
CommonViewFunction.deleteTag(_.extend({}, {
guid: that.id,
associatedGuid: that.id != entityGuid ? entityGuid : null,
msg: "