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

Offical Documentation

Official Docs: