blob: 4546bb4ebf471c17112e284f9d41bd72daadb921 [file] [log] [blame]
/**
* 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"]',
editButton: '[data-id="editButton"]',
cancelButton: '[data-id="cancelButton"]',
publishButton: '[data-id="publishButton"]',
description: '[data-id="description"]',
descriptionTextArea: '[data-id="descriptionTextArea"]',
editBox: '[data-id="editBox"]',
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"]'
},
templateHelpers: function() {
return {
taxonomy: Globals.taxonomy
};
},
/** ui events hash */
events: function() {
var events = {};
events["click " + this.ui.editButton] = function() {
this.ui.editButton.hide();
this.ui.description.hide();
this.ui.editBox.show();
this.ui.descriptionTextArea.focus();
if (this.descriptionPresent) {
this.ui.descriptionTextArea.val(this.ui.description.text());
}
};
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.publishButton] = 'onPublishButtonClick';
events["click " + this.ui.cancelButton] = 'onCancelButtonClick';
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;
},
/**
* 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 = collectionJSON[0].typeName;
}
if (!this.name && this.id) {
this.name = this.id;
}
this.description = collectionJSON[0].values.description;
if (this.name) {
this.ui.title.show();
var titleName = '<span>' + 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 (this.description) {
this.ui.description.show();
this.ui.description.html('<span>' + this.description + '</span>');
} else {
this.ui.description.hide();
}
}
if (collectionJSON[0].traits) {
this.tagElement = _.keys(collectionJSON[0].traits);
this.addTagToTerms(this.tagElement);
}
}
this.renderEntityDetailTableLayoutView();
this.renderTagTableLayoutView(tagGuid);
this.renderLineageLayoutView(tagGuid);
this.renderSchemaLayoutView(tagGuid);
this.renderAuditTableLayoutView(tagGuid);
this.renderTermTableLayoutView(tagGuid);
}, this);
},
onRender: function() {
var that = this;
this.ui.editBox.hide();
},
fetchCollection: function() {
this.collection.fetch({ reset: true });
},
onCancelButtonClick: function() {
this.ui.description.show();
this.ui.editButton.show();
this.ui.editBox.hide();
},
onClickTagCross: function(e) {
var tagName = $(e.currentTarget).parent().text(),
that = this;
var tagOrTerm = Utils.checkTagOrTerm(tagName);
if (tagOrTerm.term) {
var modal = CommonViewFunction.deleteTagModel({
msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
titleMessage: Messages.removeTerm,
buttonText: "Remove"
});
} else {
var modal = CommonViewFunction.deleteTagModel({
msg: "<div class='ellipsis'>Remove: " + "<b>" + tagName + "</b> assignment from" + " " + "<b>" + this.name + "?</b></div>",
titleMessage: Messages.removeTag,
buttonText: "Remove"
});
}
modal.on('ok', function() {
that.deleteTagData(e);
});
modal.on('closeModal', function() {
modal.trigger('cancel');
});
},
deleteTagData: function(e) {
var that = this,
tagName = $(e.currentTarget).text();
CommonViewFunction.deleteTag({
'tagName': tagName,
'guid': that.id,
callback: function() {
that.fetchCollection();
}
});
},
addTagToTerms: function(tagObject) {
var that = this,
tagData = "",
termData = "";
_.each(tagObject, function(val) {
var isTerm = Utils.checkTagOrTerm(val);
if (!isTerm.term) {
tagData += '<span class="inputTag" data-id="tagClick"><span class="inputValue">' + val + '</span><i class="fa fa-close" data-id="deleteTag"></i></span>';
}
if (isTerm.term) {
termData += '<span class="inputTag term" data-id="tagClick" data-href="' + val + '"><span class="inputValue">' + val + '</span><i class="fa fa-close" data-id="deleteTag"></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);
},
saveTagFromList: function(ref) {
var that = this;
this.entityModel = new VEntity();
var tagName = ref.text();
var json = {
"jsonClass": "org.apache.atlas.typesystem.json.InstanceSerialization$_Struct",
"typeName": tagName,
"values": {}
};
this.entityModel.saveEntity(this.id, {
data: JSON.stringify(json),
success: function(data) {
that.fetchCollection();
},
error: function(error, data, status) {
if (error && error.responseText) {
var data = JSON.parse(error.responseText);
}
},
complete: function() {}
});
},
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.saveTagData = function() {
override saveTagData function
}*/
});
},
onClickAddTermBtn: function(e) {
var that = this;
require([
'views/business_catalog/AddTermToEntityLayoutView',
], function(AddTermToEntityLayoutView) {
var view = new AddTermToEntityLayoutView({
guid: that.id,
callback: function() {
that.fetchCollection();
}
});
});
},
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;
});