// --------- This code has been automatically generated !!! 2017-12-15T21:14:04.093Z
"use strict";
/**
* @module opcua.address_space.types
*/
var assert = require("node-opcua-assert");
var util = require("util");
var _ = require("underscore");
var makeNodeId = require("node-opcua-nodeid").makeNodeId;
var schema_helpers = require("node-opcua-factory/src/factories_schema_helpers");
var extract_all_fields = schema_helpers.extract_all_fields;
var resolve_schema_field_types = schema_helpers.resolve_schema_field_types;
var initialize_field = schema_helpers.initialize_field;
var initialize_field_array = schema_helpers.initialize_field_array;
var check_options_correctness_against_schema = schema_helpers.check_options_correctness_against_schema;
var _defaultTypeMap = require("node-opcua-factory/src/factories_builtin_types")._defaultTypeMap;
var ec = require("node-opcua-basic-types");
var encodeArray = ec.encodeArray;
var decodeArray = ec.decodeArray;
var makeExpandedNodeId = require("node-opcua-nodeid/src/expanded_nodeid").makeExpandedNodeId;
var generate_new_id = require("node-opcua-factory").generate_new_id;
var _enumerations = require("node-opcua-factory/src/factories_enumerations")._private._enumerations;
var schema = require("../schemas/QueryDataDescription_schema").QueryDataDescription_Schema;
var getFactory = require("node-opcua-factory/src/factories_factories").getFactory;
var RelativePath = getFactory("RelativePath");
var BaseUAObject = require("node-opcua-factory/src/factories_baseobject").BaseUAObject;
/**
*
* @class QueryDataDescription
* @constructor
* @extends BaseUAObject
* @param options {Object}
* @param [options.relativePath] {RelativePath} Browse path relative to the originating Node that identifies the Node which contains the data that is being requested, where the originating Node is an instance Node of the type defined by the type definition Node. The instance Nodes are further limited by the filter provided as part of this call.
* @param [options.attributeId] {IntegerId} Id of the Attribute. This shall be a valid Attribute Id. The IntegerId is defined in 7.14. The IntegerId for Attributes are defined in Part 6. If the RelativePath ended in a Reference then this parameter is 0 and ignored by the server.
* @param [options.indexRange] {NumericRange} This parameter is used to identify a single element of a structure or an array, or a single range of indexes for arrays. If a range of elements are specified, the values are returned as a composite. The first element is identified by index 0 (zero).
*/
function QueryDataDescription(options)
{
options = options || {};
/* istanbul ignore next */
if (schema_helpers.doDebug) { check_options_correctness_against_schema(this,schema,options); }
var self = this;
assert(this instanceof BaseUAObject); // ' keyword "new" is required for constructor call')
resolve_schema_field_types(schema);
BaseUAObject.call(this,options);
/**
* Browse path relative to the originating Node that identifies the Node which contains the data that is being requested, where the originating Node is an instance Node of the type defined by the type definition Node. The instance Nodes are further limited by the filter provided as part of this call.
* @property relativePath
* @type {RelativePath}
*/
self.relativePath = new RelativePath( options.relativePath);
/**
* Id of the Attribute. This shall be a valid Attribute Id. The IntegerId is defined in 7.14. The IntegerId for Attributes are defined in Part 6. If the RelativePath ended in a Reference then this parameter is 0 and ignored by the server.
* @property attributeId
* @type {IntegerId}
*/
self.attributeId = initialize_field(schema.fields[1], options.attributeId);
/**
* This parameter is used to identify a single element of a structure or an array, or a single range of indexes for arrays. If a range of elements are specified, the values are returned as a composite. The first element is identified by index 0 (zero).
* @property indexRange
* @type {NumericRange}
*/
self.indexRange = initialize_field(schema.fields[2], options.indexRange);
// Object.preventExtensions(self);
}
util.inherits(QueryDataDescription,BaseUAObject);
QueryDataDescription.prototype.encodingDefaultBinary = makeExpandedNodeId(572,0);
QueryDataDescription.prototype.encodingDefaultXml = makeExpandedNodeId(571,0);
QueryDataDescription.prototype._schema = schema;
var encode_IntegerId = _defaultTypeMap.IntegerId.encode;
var decode_IntegerId = _defaultTypeMap.IntegerId.decode;
var encode_NumericRange = _defaultTypeMap.NumericRange.encode;
var decode_NumericRange = _defaultTypeMap.NumericRange.decode;
/**
* encode the object into a binary stream
* @method encode
*
* @param stream {BinaryStream}
*/
QueryDataDescription.prototype.encode = function(stream,options) {
// call base class implementation first
BaseUAObject.prototype.encode.call(this,stream,options);
this.relativePath.encode(stream,options);
encode_IntegerId(this.attributeId,stream);
encode_NumericRange(this.indexRange,stream);
};
/**
* decode the object from a binary stream
* @method decode
*
* @param stream {BinaryStream}
* @param [option] {object}
*/
QueryDataDescription.prototype.decode = function(stream,options) {
// call base class implementation first
BaseUAObject.prototype.decode.call(this,stream,options);
this.relativePath.decode(stream,options);
this.attributeId = decode_IntegerId(stream,options);
this.indexRange = decode_NumericRange(stream,options);
};
QueryDataDescription.possibleFields = [
"relativePath",
"attributeId",
"indexRange"
];
exports.QueryDataDescription = QueryDataDescription;
var register_class_definition = require("node-opcua-factory/src/factories_factories").register_class_definition;
register_class_definition("QueryDataDescription",QueryDataDescription);