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;