You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
2.7 KiB
136 lines
2.7 KiB
/**
|
|
* Copyright (c) 2013 Yahoo! Inc. All rights reserved.
|
|
*
|
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file
|
|
* for terms.
|
|
*/
|
|
|
|
var assert = require('assert');
|
|
|
|
// Event types
|
|
var TYPES = {
|
|
NODE_CREATED : 1,
|
|
NODE_DELETED : 2,
|
|
NODE_DATA_CHANGED : 3,
|
|
NODE_CHILDREN_CHANGED : 4
|
|
};
|
|
|
|
/**
|
|
* Check if the given event type code is defined or not, throw an error if the
|
|
* type is not defined.
|
|
*
|
|
* @method validateType
|
|
* @param type {Number} The type.
|
|
*/
|
|
function validateType(type) {
|
|
assert(typeof type === 'number', 'type must be a number.');
|
|
|
|
var defined = Object.keys(TYPES).some(function (name) {
|
|
return TYPES[name] === type;
|
|
});
|
|
|
|
if (!defined) {
|
|
throw new Error('Unknown type: ' + type);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Watcher event.
|
|
*
|
|
* @class Event
|
|
* @constructor
|
|
* @private
|
|
* @param type {Number} The type of the event.
|
|
* @param name {String} The name of the event.
|
|
* @param [path] {String} The node path of the event.
|
|
*/
|
|
function Event(type, name, path) {
|
|
validateType(type);
|
|
assert(
|
|
name && typeof name === 'string',
|
|
'name must be a non-empty string.'
|
|
);
|
|
|
|
this.type = type;
|
|
this.name = name;
|
|
this.path = path;
|
|
}
|
|
|
|
/**
|
|
* Return the type of the event.
|
|
*
|
|
* @method getType
|
|
* @return {String} The name.
|
|
*/
|
|
Event.prototype.getType = function () {
|
|
return this.type;
|
|
};
|
|
|
|
/**
|
|
* Return the name of the event.
|
|
*
|
|
* @method getName
|
|
* @return {String} The name.
|
|
*/
|
|
Event.prototype.getName = function () {
|
|
return this.name;
|
|
};
|
|
|
|
/**
|
|
* Return the path of the event.
|
|
*
|
|
* @method getPath
|
|
* @return {String} The path.
|
|
*/
|
|
Event.prototype.getPath = function () {
|
|
return this.path;
|
|
};
|
|
|
|
/**
|
|
* Return a string representation of the event.
|
|
*
|
|
* @method toString
|
|
* @return {String} The string representation.
|
|
*/
|
|
Event.prototype.toString = function () {
|
|
var result = this.name + '[' + this.type + ']';
|
|
|
|
if (this.path) {
|
|
result += '@' + this.path;
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* Factory method to crate an instance of event from an instance of
|
|
* jute.WatcherEvent.
|
|
*
|
|
* @method create
|
|
* @param watcherEvent {WatcherEvent} an instance of jute.WatcherEvent
|
|
*/
|
|
function create(watcherEvent) {
|
|
assert(watcherEvent, 'watcherEvent must be a valid object.');
|
|
validateType(watcherEvent.type);
|
|
|
|
var name,
|
|
i = 0,
|
|
keys = Object.keys(TYPES);
|
|
|
|
while (i < keys.length) {
|
|
if (TYPES[keys[i]] === watcherEvent.type) {
|
|
name = keys[i];
|
|
break;
|
|
}
|
|
|
|
i += 1;
|
|
}
|
|
|
|
return new Event(watcherEvent.type, name, watcherEvent.path);
|
|
}
|
|
|
|
module.exports = Event;
|
|
module.exports.create = create;
|
|
Object.keys(TYPES).forEach(function (key) {
|
|
module.exports[key] = TYPES[key];
|
|
});
|
|
|