1 var Class = require('../../mootools/mootools-node.js').Class; 2 var JsonRpcAbstract = require('./JsonRpcAbstract.js').JsonRpcAbstract; 3 4 /** 5 * @class JsonRpcError 6 * @extends JsonRpcAbstract 7 * @requires Class 8 * @requires JsonRpcAbstract 9 * 10 * @param {Number} code Number error code 11 * @param {String} message error message 12 * @param {Object} data additional error data 13 */ 14 var JsonRpcError = function(){ 15 16 /** @ignore */ 17 this.Extends = JsonRpcAbstract; 18 19 /** 20 * error code 21 * 22 * @private 23 * @property {Number} _code 24 */ 25 this._code; 26 27 /** 28 * error message 29 * 30 * @private 31 * @property {String} _message 32 */ 33 this._message; 34 35 /** 36 * optional additional error data 37 * 38 * @private 39 * @property {Object} _data 40 */ 41 this._data; 42 43 44 /** @ignore */ 45 this.initialize = function(code, message, data){ 46 this.setCode(code); 47 this.setMessage(message); 48 this.setData(data); 49 }; 50 51 /** 52 * sets error code 53 * 54 * @param {Number} code error code 55 */ 56 this.setCode = function(code){ 57 this._code = code; 58 return this; 59 }; 60 61 /** 62 * gets error code 63 * 64 * @returns {Number} 65 */ 66 this.getCode = function(){ 67 return this._code; 68 }; 69 70 /** 71 * sets error message 72 * 73 * @param {String} message error message 74 * @returns {JsonRpcError} 75 */ 76 this.setMessage = function(message){ 77 this._message = message; 78 return this; 79 }; 80 81 /** 82 * gets error message 83 * 84 * @returns {String} 85 */ 86 this.getMessage = function(){ 87 return this._message; 88 }; 89 90 /** 91 * sets error data 92 * 93 * @param {Object} data error data 94 */ 95 this.setData = function(data){ 96 if(data instanceof JsonRpcError){ 97 this._data = data._toJson(); 98 }else{ 99 this._data = data; 100 } 101 return this; 102 }; 103 104 /** 105 * gets error data 106 * 107 * @returns {Object} 108 */ 109 this.getData = function(){ 110 return this._data; 111 }; 112 113 /** 114 * returns properties as json 115 * 116 * @returns {Object} 117 */ 118 this.toJson = function(){ 119 return { 120 error: this._toJson() 121 }; 122 }; 123 124 /** 125 * returns base json representation of class properties 126 * only for internal use 127 * 128 * @private 129 * @returns {Object} 130 */ 131 this._toJson = function(){ 132 var data = { 133 code: this._code, 134 message: this._message 135 }; 136 137 if(this._data){ 138 data.data = this._data; 139 } 140 141 return data; 142 }; 143 }; 144 145 JsonRpcError = new Class(new JsonRpcError()); 146 147 /** 148 * creates new instance based on the given instance 149 * factory method 150 * 151 * @static 152 * 153 * @param {JsonRpcError} jsonRpcError 154 * @returns {JsonRpcError} 155 */ 156 JsonRpcError.factory = function(jsonRpcError){ 157 if(!(jsonRpcError instanceof JsonRpcError)){ 158 throw JsonRpcError.Exceptions.WRONG_CLASS; 159 } 160 161 var factory = new JsonRpcError(jsonRpcError.getCode(), jsonRpcError.getMessage()); 162 163 return factory; 164 }; 165 166 /** 167 * @static 168 * @constant 169 * @namespace 170 */ 171 JsonRpcError.Exceptions = {}; 172 /** 173 * @static 174 * @constant 175 */ 176 JsonRpcError.Exceptions.WRONG_CLASS = 'Given something is not a instance of JsonRpcError class'; 177 178 exports.JsonRpcError = JsonRpcError;