Name
sn_smd.SMError
Description
No description available
Script
var SMError = Class.create();
SMError.prototype = {
// disply msg is user friendly message. should be internationalized
_displayMsg : null,
// internal msg is for detailed and technical message
// this message needs to be logged.
_internalMsgs : [],
// the properties of the error
_propBag : {},
_errType : SMErrorType.UNKNOWN,
_errLevel : SMErrorLevel.ERROR,
INTERNAL_MSG_SEPARATOR:'\n',
contextIdentifier : '',
contextName: '',
initialize: function(displayMsg, internalMsg) {
this.setDisplayMessage(displayMsg);
this.appendInternalMessage(internalMsg);
},
/**
* Returns a user friendly message
*/
getDisplayMessage : function() {
return this._displayMsg;
},
/**
* Log this error. This method has to be called explicitly to log the message.
*/
log : function() {
if (this.getErrorLevel() == SMErrorLevel.WARN)
gs.warn(this.toString());
else
gs.error(this.toString());
},
/**
* Sets a user friendly message
* @param msg : the message to set.
*/
setDisplayMessage : function(msg) {
this._displayMsg = msg;
},
setContext : function(contextIdentifier, contextName) {
this.contextIdentifier = contextIdentifier;
this.contextName = contextName;
},
hasContext : function () {
return this.contextIdentifier != '';
},
/**
* Returns a message that is supposed to be only for internal purpose.
* This message should be used for logging or any debugging purpose.
*/
getInternalMessage : function() {
return this._internalMsgs.join(this.INTERNAL_MSG_SEPARATOR);
},
/**
* Returns the internal messages that is supposed to be only for internal purpose.
* This message should be used for logging or any debugging purpose.
*/
getInternalMessages : function() {
return this._internalMsgs;
},
/**
* Append the passed message to the original internal message.
* @param msg : the message to set.
*/
appendInternalMessage : function(msg) {
if (!gs.nil(msg))
this._internalMsgs.push(msg);
},
/**
* Append the passed messages to the original internal message.
* @param msg : the message to set.
*/
appendInternalMessages : function(msgs) {
if (msgs && msgs.length && !gs.nil(msgs[0]))
this._internalMsgs = this._internalMsgs.concat(msgs);
},
/**
* Returns String represetation of this exception.
*/
toString : function() {
var msg = '';
if (this.contextIdentifier) {
msg = this.contextIdentifier + ' ' + this.contextName + ': ';
}
msg = msg + this.getDisplayMessage();
if (msg.indexOf('<a') != -1) {
msg = msg.substring(0, msg.indexOf('<a'));
}
msg = msg + this.getInternalMessage();
return msg;
//var obj = this.generateJSON();
//return new global.JSON().encode(obj);
},
/**
* Sets the error type.
*/
setErrorType : function(errType) {
this._errType = errType;
},
/**
* Returns the error type.
*/
getErrorType : function() {
if (gs.nil(this._errType))
throw 'The error type should be set';
return this._errType;
},
/**
* Sets the error level.
*/
setErrorLevel : function(errLevel) {
this._errLevel = errLevel;
},
/**
* Returns the error level.
*/
getErrorLevel : function() {
if (gs.nil(this._errLevel)) {
throw 'The error level should be set';
}
return this._errLevel;
},
/**
* Convert the error into a joson object.
*/
generateJSON : function() {
var err = {};
err.type = this.getErrorType();
err.level = this.getErrorLevel();
err.display_message = this.getDisplayMessage();
err.internal_message = this.getInternalMessage();
err.properties = this._getPropertiesInJSON();
return err;
},
/**
* Initialize this error object from the passed json object.
*/
loadFromJSON : function(obj) {
this.setDisplayMessage(obj.display_message);
this.setInternalMessage(obj.internal_message.split(INTERNAL_MSG_SEPARATOR));
this.setErrorType(obj.type);
this.setErrorLevel(obj.level);
var props = obj.properties;
if (gs.nil(props))
return;
for (var name in props) {
this.setProperty(name,props[name]);
}
},
setProperty : function(name,value) {
this._propBag[name] = value;
},
getPropertyValue : function(name) {
return this._propBag[name];
},
/**
* Returns the available property names.
* @return {Array.<String>}
*/
getPropertyNames : function() {
var names = [];
for (var name in this._propBag)
names.push(name);
return names;
},
/**
* Returns the properties in json format.
*/
_getPropertiesInJSON : function() {
var names = this.getPropertyNames();
var rtnObj = {};
for (var i=0; i<names.length;i++) {
var name = names[i];
rtnObj[name] = this.getPropertyValue(name);
}
return rtnObj;
},
type: 'SRAError'
};
Sys ID
0a60f57ec3612200e2ddb59af3d3ae37