Commit 6679c8ee by kevalbhatt Committed by Madhan Neethiraj

ATLAS-1486: UI updates to handle errors from V2 APIs

parent 143c0f81
......@@ -36,19 +36,6 @@ define(['require',
initialize: function() {
this.sort_key = 'id';
},
bindErrorEvents: function() {
this.bind("error", Utils.defaultErrorHandler);
},
bindRequest: function() {
this.bind('request', function(model, ajaxObj, collectionObj) {
this.ajaxStart(model, ajaxObj, collectionObj);
}, this);
this.bind('sync', function(model, ajaxObj, collectionObj) {
this.ajaxComplete(model, ajaxObj, collectionObj);
}, this);
},
ajaxStart: function(model, ajaxObj, collectionObj) {},
ajaxComplete: function(model, ajaxObj, collectionObj) {},
comparator: function(key, value) {
key = key.get(this.sort_key);
value = value.get(this.sort_key);
......@@ -140,6 +127,7 @@ define(['require',
return retCols;
},
nonCrudOperation: function(url, requestMethod, options) {
var that = this;
options['beforeSend'] = CommonViewFunction.addRestCsrfCustomHeader;
return Backbone.sync.call(this, null, this, _.extend({
url: url,
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VCatalog';
this.modelAttrName = '';
this.bindErrorEvents();
},
fetch: function(options) {
//Call Backbone's fetch
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VCommon';
this.modelAttrName = '';
this.bindErrorEvents();
},
},
//Static Class Members
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VEntity';
this.modelAttrName = '';
this.bindErrorEvents();
},
parseRecords: function(resp, options) {
try {
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VLineage';
this.modelAttrName = 'results';
this.bindErrorEvents();
},
getLineage: function(id, options) {
var url = UrlLinks.lineageApiUrl(id);
......
......@@ -31,7 +31,6 @@ define(['require',
initialize: function() {
this.modelName = 'VSchema';
this.modelAttrName = 'results';
this.bindErrorEvents();
},
parseRecords: function(resp, options) {
try {
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VSearch';
this.modelAttrName = 'results';
this.bindErrorEvents();
},
parseRecords: function(resp, options) {
this.responseData = {
......
......@@ -31,7 +31,6 @@ define(['require',
initialize: function() {
this.modelName = 'VTag';
this.modelAttrName = 'list';
this.bindErrorEvents();
},
parseRecords: function(resp, options) {
try {
......
......@@ -16,7 +16,7 @@
* limitations under the License.
*/
define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], function(require, Utils, Backbone,CommonViewFunction) {
define(['require', 'utils/Utils', 'backbone', 'utils/CommonViewFunction'], function(require, Utils, Backbone, CommonViewFunction) {
'use strict';
var BaseModel = Backbone.Model.extend(
......@@ -27,12 +27,7 @@ define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], functi
* @augments Backbone.Model
* @constructs
*/
initialize: function() {
},
bindErrorEvents: function() {
this.bind("error", Utils.defaultErrorHandler);
},
initialize: function() {},
/**
* toString for a model. Every model should implement this function.
*/
......@@ -60,7 +55,8 @@ define(['require', 'utils/Utils', 'backbone','utils/CommonViewFunction'], functi
* @return {[type]} [description]
*/
nonCrudOperation: function(url, requestMethod, options) {
options['beforeSend'] = CommonViewFunction.addRestCsrfCustomHeader;
var that = this;
options['beforeSend'] = CommonViewFunction.addRestCsrfCustomHeader;
return Backbone.sync.call(this, null, this, _.extend({
url: url,
type: requestMethod
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VCatalog';
this.bindErrorEvents();
},
toString: function() {
return this.get('name');
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VCommon';
this.bindErrorEvents();
},
toString: function() {
return this.get('name');
......
......@@ -34,7 +34,6 @@ define(['require',
initialize: function() {
this.modelName = 'VEntity';
this.bindErrorEvents();
},
toString: function() {
return this.get('name');
......
......@@ -34,7 +34,6 @@ define(['require',
initialize: function() {
this.modelName = 'VLineage';
this.bindErrorEvents();
},
toString: function() {
return this.get('id');
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VSchema';
this.bindErrorEvents();
},
toString: function() {
return this.get('id');
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VSearch';
this.bindErrorEvents();
},
toString: function() {
return this.get('name');
......
......@@ -33,7 +33,6 @@ define(['require',
initialize: function() {
this.modelName = 'VTag';
this.bindErrorEvents();
},
toString: function() {
return this.get('name');
......
......@@ -37,6 +37,7 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
var tagModel = new VTag();
if (options && options.guid && options.tagName) {
tagModel.deleteTag(options.guid, options.tagName, {
skipDefaultError: true,
success: function(data) {
var msg = "Tag " + name.name + Messages.removeSuccessMessage;
if (options.tagOrTerm === "term") {
......@@ -55,16 +56,15 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
}
},
error: function(error, data, status) {
cust_error: function(model, response) {
var message = options.tagName + Messages.deleteErrorMessage;
if (data.error) {
message = data.error;
if (response && response.responseJSON) {
message = response.responseJSON.errorMessage;
}
Utils.notifyError({
content: message
});
},
complete: function() {}
}
});
}
});
......@@ -106,7 +106,6 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
scope.$('td div[data-id="' + id + '"]').append(deleteButton);
}
},
error: function(error, data, status) {},
complete: function() {
if (searchTable) {
--scope.fetchList;
......@@ -377,14 +376,6 @@ define(['require', 'utils/Utils', 'modules/Modal', 'utils/Messages', 'utils/Enum
options.collection.fetch({ reset: true });
}
},
error: function(error, data, status) {
if (data && data.responseText) {
var data = JSON.parse(data.responseText);
Utils.notifyError({
content: data.message || data.msgDesc
});
}
},
complete: function() {
--that.asyncFetchCounter
if (that.callback && that.asyncFetchCounter === 0) {
......
......@@ -20,6 +20,7 @@ define(['require'], function(require) {
'use strict';
var Messages = {
defaultErrorMessage: "Something went wrong",
addSuccessMessage: " has been created successfully",
addErrorMessage: " could not be Created",
addTermToEntitySuccessMessage: " has been added to entity",
......@@ -34,7 +35,7 @@ define(['require'], function(require) {
updateTagDescriptionMessage: "Tag description is updated successfully",
updateTermDescriptionMessage: "Term description is updated successfully",
editSuccessMessage: " has been updated successfully",
assignDeletedEntity: " entity is deleted, Tag cannot be assign"
assignDeletedEntity: " entity is deleted, tag cannot be assigned"
};
return Messages;
});
......@@ -16,13 +16,31 @@
* limitations under the License.
*/
define(['require', 'marionette', 'backgrid', 'asBreadcrumbs', 'jquery-placeholder'], function(require) {
define(['require', 'utils/Utils', 'marionette', 'backgrid', 'asBreadcrumbs', 'jquery-placeholder'], function(require, Utils) {
'use strict';
Backbone.$.ajaxSetup({
cache: false
});
var oldBackboneSync = Backbone.sync;
Backbone.sync = function(method, model, options) {
var that = this;
return oldBackboneSync.apply(this, [method, model,
_.extend(options, {
error: function(response) {
if (!options.skipDefaultError) {
Utils.defaultErrorHandler(that, response);
}
that.trigger("error", that, response);
if (options.cust_error) {
options.cust_error(that, response);
}
}
})
]);
}
// For placeholder support
if (!('placeholder' in HTMLInputElement.prototype)) {
var originalRender = Backbone.Marionette.LayoutView.prototype.render;
......
......@@ -16,7 +16,7 @@
* limitations under the License.
*/
define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnotify) {
define(['require', 'utils/Globals', 'pnotify', 'utils/Messages'], function(require, Globals, pnotify, Messages) {
'use strict';
var Utils = {};
......@@ -79,43 +79,47 @@ define(['require', 'utils/Globals', 'pnotify'], function(require, Globals, pnoti
});
};
Utils.defaultErrorHandler = function(model, error) {
if (error.status == 401) {
if (error.statusText) {
var redirectURL;
try {
redirectURL = JSON.parse(error.statusText).knoxssoredirectURL;
} catch(err){
}
if(redirectURL!=undefined && redirectURL!='' ){
window.location.replace(decodeURIComponent(redirectURL));
}else{
window.location = 'login.jsp';
}
if (error && error.status) {
if (error.status == 401) {
window.location = 'login.jsp'
} else if (error.status == 419) {
window.location = 'login.jsp'
} else if (error.status == 403) {
var message = "You are not authorized";
if (error.statusText) {
message = JSON.parse(error.statusText).AuthorizationError;
}
Utils.notifyError({
content: message
});
} else if (error.status == "0" && error.statusText != "abort") {
var diffTime = (new Date().getTime() - prevNetworkErrorTime);
if (diffTime > 3000) {
prevNetworkErrorTime = new Date().getTime();
Utils.notifyError({
content: "Network Connection Failure : " +
"It seems you are not connected to the internet. Please check your internet connection and try again"
});
}
} else {
window.location = 'login.jsp';
}
} else if (error.status == 419) {
window.location = 'login.jsp'
} else if (error.status == 403) {
var message = "You are not authorized";
if (error.statusText) {
message = JSON.parse(error.statusText).AuthorizationError;
Utils.serverErrorHandler(model, error)
}
} else {
Utils.serverErrorHandler(model, error)
}
};
Utils.serverErrorHandler = function(model, response) {
var responseJSON = response ? response.responseJSON : response;
if (response && responseJSON && (responseJSON.errorMessage || responseJSON.message || responseJSON.error)) {
Utils.notifyError({
content: message
content: responseJSON.errorMessage || responseJSON.message || responseJSON.error
});
} else {
Utils.notifyError({
content: Messages.defaultErrorMessage
});
} else if (error.status == "0" && error.statusText != "abort") {
var diffTime = (new Date().getTime() - prevNetworkErrorTime);
if (diffTime > 3000) {
prevNetworkErrorTime = new Date().getTime();
Utils.notifyError({
content: "Network Connection Failure : " +
"It seems you are not connected to the internet. Please check your internet connection and try again"
});
}
}
};
Utils.localStorage = {
checkLocalStorage: function(key, value) {
if (typeof(Storage) !== "undefined") {
......
......@@ -158,14 +158,6 @@ define(['require',
Utils.notifySuccess({
content: message
});
},
error: function(model, response) {
if (response.responseJSON && response.responseJSON.error) {
that.collection.fetch({ reset: true });
Utils.notifyError({
content: response.responseJSON.error
});
}
}
});
}
......
......@@ -119,19 +119,9 @@ define(['require',
this.termSearchData();
}, this);
this.listenTo(this.childCollection, 'error', function(model, response) {
if (response && response.responseJSON && response.responseJSON.message) {
Utils.notifyError({
content: response.responseJSON.message
});
}
this.hideLoader();
}, this);
this.listenTo(this.parentCollection, 'error', function(model, response) {
if (response && response.responseJSON && response.responseJSON.message) {
Utils.notifyError({
content: response.responseJSON.message
});
}
this.hideLoader();
}, this);
},
......@@ -515,11 +505,6 @@ define(['require',
content: "Term " + view.ui.termName.val() + Messages.addSuccessMessage
});
},
error: function(model, response) {
Utils.notifyError({
content: "Term " + view.ui.termName.val() + Messages.addErrorMessage
});
},
complete: function() {
that.hideLoader();
}
......@@ -550,6 +535,7 @@ define(['require',
url = that.$('.taxonomyTree').find('li.active a').data('href');
var termName = that.$('.taxonomyTree').find('li.active a').text();
termModel.deleteTerm(url, {
skipDefaultError: true,
success: function(data) {
Utils.notifySuccess({
content: "Term " + termName + Messages.deleteSuccessMessage
......@@ -567,10 +553,10 @@ define(['require',
}
that.fetchCollection(termURL, true);
},
error: function(error, data, status) {
cust_error: function(model, response) {
var message = "Term " + termName + Messages.deleteErrorMessage;
if (data.error) {
message = data.error;
if (response && response.responseJSON) {
message = response.responseJSON.errorMessage;
}
Utils.notifyError({
content: message
......@@ -652,13 +638,14 @@ define(['require',
view.model.url = url + "/" + view.ui.termName.val();
this.showLoader();
view.model.set({ description: view.ui.termDetail.val() }).save(null, {
skipDefaultError: true,
success: function(model, response) {
that.fetchCollection(view.model.url, true);
Utils.notifySuccess({
content: "Default taxonomy " + view.ui.termName.val() + Messages.addSuccessMessage
});
},
error: function(error, data, status) {
cust_error: function(model, response) {
Utils.notifyError({
content: "Default taxonomy " + view.ui.termName.val() + Messages.addErrorMessage
});
......
......@@ -56,7 +56,6 @@ define(['require',
var str = "<b>Version : </b>" + data.Version;
that.ui.atlasVersion.html(str);
},
error: function(error, data, status) {},
complete: function() {}
});
},
......
......@@ -516,13 +516,6 @@ define(['require',
content: "entity " + Messages[that.guid ? 'editSuccessMessage' : 'addSuccessMessage']
});
},
error: function(response) {
if (response.responseJSON) {
Utils.notifyError({
content: response.responseJSON.error || response.responseJSON.errorMessage
});
}
},
complete: function() {
that.hideLoader();
}
......
......@@ -92,6 +92,7 @@ define(['require',
var that = this;
this.fromToObj = {};
this.collection.getLineage(this.guid, {
skipDefaultError: true,
success: function(data) {
if (data.relations.length) {
that.generateData(data.relations, data.guidEntityMap);
......@@ -99,7 +100,7 @@ define(['require',
that.noLineage();
}
},
error: function(error, data, status) {
cust_error: function(model, response) {
that.noLineage();
},
complete: function() {}
......
......@@ -362,7 +362,6 @@ define(['require',
}
}
},
error: function(error, data, status) {},
complete: function() {
--that.asyncFetchCounter;
if (that.asyncFetchCounter === 0) {
......
......@@ -101,7 +101,6 @@ define(['require',
str += '<option>' + _.escape(val.get("name")) + '</option>';
});
that.ui.parentTag.html(str);
console.log(platform);
// IE9 support
if (platform.name === "IE") {
that.ui.parentTag.select2({
......
......@@ -147,13 +147,6 @@ define(['require',
content: message
});
that.modal.close();
},
error: function(model, response) {
if (response.responseJSON && response.responseJSON.error) {
Utils.notifyError({
content: response.responseJSON.error
});
}
}
});
},
......
......@@ -251,13 +251,6 @@ define(['require',
content: "Tag " + that.name + Messages.addSuccessMessage
});
modal.trigger('cancel');
},
error: function(model, response) {
if (response.responseJSON && response.responseJSON.error) {
Utils.notifyError({
content: response.responseJSON.error
});
}
}
});
},
......
......@@ -207,6 +207,7 @@ define(['require',
"attributes": tagAttributes
}];
this.entityModel.saveEntity(options.guid, {
skipDefaultError: true,
data: JSON.stringify(json),
success: function(data) {
Utils.notifySuccess({
......@@ -216,11 +217,10 @@ define(['require',
options.modalCollection.fetch({ reset: true });
}
},
error: function(error, data, status) {
cust_error: function(model, response) {
var message = "Tag " + tagName + " could not be added";
if (error && error.responseText) {
var data = JSON.parse(error.responseText);
message = data.error;
if (response && response.responseJSON) {
message = response.responseJSON.errorMessage;
}
Utils.notifyError({
content: message
......
......@@ -9,6 +9,8 @@ ATLAS-1060 Add composite indexes for exact match performance improvements for al
ATLAS-1127 Modify creation and modification timestamps to Date instead of Long(sumasai)
ALL CHANGES:
ATLAS-1486 UI updates to handle errors from V2 APIs (Kalyanikashikar via mneethiraj)
ATLAS-1436 Metrics collection using gremlin (apoorvnaik via mneethiraj)
ATLAS-1489 Show create/edit entity button based on role (Kalyanikashikar via kevalbhatt)
ATLAS-1478 REST API to add classification to multiple entities (svimal2106 via mneethiraj)
ATLAS-1490 added methods to get sub-types of entity and classification types (mneethiraj)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment