Source: lib/tagmanager.js

"use strict";

/** module */
module.exports = WirelessTagManager;

var request = require('request'),
    util = require('util'),
    EventEmitter = require('events'),
    u = require('./util'),
    WirelessTagPlatform = require('./platform'),
    WirelessTag = require('./tag');

const roMgrProps = ["mac",
                    "radioId",
                    "rev",
                    "wirelessConfig",
                    "online",
                    "selected",
                    "dbid"];
const rwMgrProps = ["name"];

/**
 * The cloud instance of a Wireless Tag Manager. There can be multiple
 * Wireless Tag managers under one account. A user will not normally
 * need to create instances directly; instead they are found, and
 * created by {@link WirelessTagPlatform#discoverTagManagers}.
 *
 * @param {WirelessTagPlatform} platform - the platform instance that
 *                              discovered this tag manager
 * @param {Object} data - the object comprising the tag manager's
 *                        status properties, as returned by the API
 *                        endpoint.
 *
 * @class
 * @alias WirelessTagManager
 */
function WirelessTagManager(platform, data) {
    EventEmitter.call(this);
    this.wirelessTagPlatform = platform;
    this.wirelessTags = [];
    this.wirelessTagMap = {};
    this.errorHandler = platform ? platform.errorHandler : u.defaultHandler;
    this.callAPI = WirelessTagPlatform.callAPI;
    u.setObjProperties(this, roMgrProps, rwMgrProps);
    this.data = data;
}
util.inherits(WirelessTagManager, EventEmitter);

WirelessTagManager.prototype.discoverTags = function(query, callback) {

    var req = this.callAPI(
        '/ethClient.asmx/GetTagManagerTagList',
        {},
        callback);
    return req.then(
        (result) => {
            result = result.filter((elem) => {
                return elem.mac == this.mac;
            });
            if (result.length != 1) {
                let e =  new Error(result.length
                                   + " result(s) for tag manager " + this.mac);
                if (callback) callback(e);
                throw e;  // if no callback, or the callback didn't throw
            }
            let tagsList = result[0].tags.filter(u.createFilter(query));
            this.wirelessTags = [];
            this.wirelessTagMap = {};
            for (let tagData of tagsList) {
                let tag = new WirelessTag(this, tagData);
                // console.log(tagData);
                this.wirelessTags.push(tag);
                this.wirelessTagMap[tag.uuid] = tag;
                this.emit('discover', tag);
            }
            if (callback) callback(null,
                                   { object: this, value: this.wirelessTags });
            return this.wirelessTags;
        },
        this.errorHandler(callback)
    );
};

WirelessTagManager.prototype.select = function(callback) {
    return this.wirelessTagPlatform.selectTagManager(this, callback);
};