baja/ord/NSpaceScheme.js

/**
 * @copyright 2020 Tridium, Inc. All Rights Reserved.
 * @author Vikram Nagulan
 */

/**
 * Defines {@link baja.NSpaceScheme}.
 * @module baja/ord/NSpaceScheme
 */
define([
  "bajaScript/sys",
  "bajaScript/baja/ord/OrdQuery",
  "bajaScript/baja/ord/OrdScheme",
  "bajaScript/baja/ord/OrdTarget"
], function (
  baja,
  OrdQuery,
  OrdScheme,
  OrdTarget
) {
  'use strict';

  var subclass = baja.subclass,
    callSuper = baja.callSuper;

  /**
   * NSpace ORD Scheme.
   * 
   * This scheme resolves to Component Space or Virtual Component Space.
   *
   * @class
   * @alias baja.NSpaceScheme
   * @extends baja.OrdScheme
   * @private
   */
  var NSpaceScheme = function NSpaceScheme() {
    callSuper(NSpaceScheme, this, arguments);
  };

  subclass(NSpaceScheme, OrdScheme);

  /**
   * Default NSpace ORD Scheme instance.
   * @private
   * @type {baja.NSpaceScheme}
   */
  NSpaceScheme.DEFAULT = new NSpaceScheme();

  NSpaceScheme.prototype.resolve = function (target, query, cursor, options) {
    var body = query.getBody();
    var newTarget = new OrdTarget(target);
    newTarget.object = target.object;
    if (!body) {
      newTarget.object = baja.nav.localhost.station;
      return cursor.resolveNext(newTarget, options);
    }

    return baja.rpc({
      typeSpec: "niagaraDriver:NiagaraNetwork",
      method: "getStationSpaceOrdByName",
      args: [ body ]
    })
      .then(function (stationSpaceOrd) {
        return baja.Ord.make(stationSpaceOrd).resolve()
          .then(function (target) {
            newTarget.object = target.object;
            return cursor.resolveNext(newTarget, options);
          });
      })
      .catch(function (err) {
        options.callback.fail(err);
      });
  };

  /**
   * Return an ORD Query for the scheme.
   *
   * @returns {baja.OrdQuery}
   */
  NSpaceScheme.prototype.parse = function (schemeName, body) {
    return new OrdQuery({
      scheme: this,
      schemeName: schemeName,
      body: body,
      isHost: false,
      isSession: false
    });
  };

  return NSpaceScheme;
});