APIs

Show:
  1. "use strict";
  2. /**
  3. * @module opcua.address_space
  4. * @class AddressSpace
  5. */
  6.  
  7. const assert = require("node-opcua-assert").assert;
  8. const util = require("util");
  9. const _ = require("underscore");
  10.  
  11. const NodeId = require("node-opcua-nodeid").NodeId;
  12.  
  13. const UADataType = require("./ua_data_type").UADataType;
  14. const eoan = require("./extension_object_array_node");
  15.  
  16.  
  17. exports.install = function (AddressSpace) {
  18.  
  19.  
  20. AddressSpace.prototype.getExtensionObjectConstructor = function (dataType) {
  21. assert(dataType, "expecting a dataType");
  22. if (dataType instanceof NodeId) {
  23. const tmp = this.findNode(dataType);
  24. if (!tmp) {
  25. throw new Error("constructExtensionObject: cannot resolve dataType " + dataType);
  26. }
  27. dataType = tmp;
  28. }
  29. if (!(dataType instanceof UADataType)) {
  30. throw new Error("constructExtensionObject: dataType has unexpectedtype" + dataType);
  31. }
  32. eoan.prepareDataType(dataType);
  33. const Constructor = dataType._extensionObjectConstructor;
  34. return Constructor;
  35. };
  36.  
  37. /**
  38. * @method constructExtensionObject
  39. * @param dataType {UADataType}
  40. * @param [options {Object} =null]
  41. * @return {Object}
  42. *
  43. *
  44. * @example
  45. *
  46. * // example 1
  47. * var extObj = addressSpace.constructExtensionObject("BuildInfo",{ productName: "PRODUCTNAME"});
  48. *
  49. * // example 2
  50. * serverStatusDataType.should.be.instanceOf(UADataType);
  51. * serverStatusDataType.browseName.toString().should.eql("ServerStatusDataType");
  52. * var serverStatus = addressSpace.constructExtensionObject(serverStatusDataType);
  53. * serverStatus.constructor.name.should.eql("ServerStatus");
  54. */
  55. AddressSpace.prototype.constructExtensionObject = function(dataType,options){
  56.  
  57. const Constructor = this.getExtensionObjectConstructor(dataType);
  58. return new Constructor(options);
  59. };
  60. };
  61.