text: // --------- This code has been automatically generated !!! 2016-10-20T16:36:05.654Z
  "use strict";
  require("requirish")._(module);
  /**
   * @module opcua.address_space.types
   */
  var assert = require("better-assert");
  var util = require("util");
  var _  = require("underscore");
  var makeNodeId = require("lib/datamodel/nodeid").makeNodeId;
  var schema_helpers =  require("lib/misc/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("lib/misc/factories_builtin_types")._defaultTypeMap;
  var ec = require("lib/misc/encode_decode");
  var encodeArray = ec.encodeArray;
  var decodeArray = ec.decodeArray;
  var makeExpandedNodeId = ec.makeExpandedNodeId;
  var generate_new_id = require("lib/misc/factories").generate_new_id;
  var _enumerations = require("lib/misc/factories_enumerations")._private._enumerations;
  var schema = require("../lib/data_access/schemas/AxisInformation_schema").AxisInformation_Schema;
  var EUInformation = require("./_auto_generated_EUInformation").EUInformation;
  var Range = require("./_auto_generated_Range").Range;
  var LocalizedText = require("./_auto_generated_LocalizedText").LocalizedText;
  var BaseUAObject = require("lib/misc/factories_baseobject").BaseUAObject;
  
  //## Define special behavior for Enumeration
  var _enum_properties = {
      "axisScaleType": {
          hidden: false,
          enumerable: true,
          configurable: false,
              get: function() {
                  return this.$axisScaleType;
              },
              set: function(value) {
                  var coercedValue = _enumerations.AxisScaleEnumeration.typedEnum.get(value);
                  /* istanbul ignore next */
                  if ( coercedValue === undefined || coercedValue === null) {
                        throw new Error("value cannot be coerced to AxisScaleEnumeration: " + value);
                  }
                  this.$axisScaleType = coercedValue;
              }
      },
      "$axisScaleType": {
           configurable: false,
           value: 'aaaa',
           hidden: true,
           writable: true,
           enumerable: false
      },
  };
  
  
  /**
   * 
   * @class AxisInformation
   * @constructor
   * @extends BaseUAObject
   * @param  options {Object}
   * @param  [options.engineeringUnits] {EUInformation} Holds the information about the engineering units for a given axis.
   * @param  [options.euRange] {Range} Limits of the range of the axis
   * @param  [options.title] {LocalizedText} User readable axis title, useful when the units are %, the Title may be Particle size
   * @param  [options.axisScaleType] {AxisScaleEnumeration} LINEAR, LOG, LN, defined by AxisSteps
   * @param  [options.axisSteps = null] {Double[]} Specific value of each axis steps, may be set to Null if not used
   */
  function AxisInformation(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);
  
      /**
        * Holds the information about the engineering units for a given axis.
        * @property engineeringUnits
        * @type {EUInformation}
        */
      self.engineeringUnits =  new EUInformation( options.engineeringUnits);
  
      /**
        * Limits of the range of the axis
        * @property euRange
        * @type {Range}
        */
      self.euRange =  new Range( options.euRange);
  
      /**
        * User readable axis title, useful when the units are %, the Title may be Particle size
        * @property title
        * @type {LocalizedText}
        */
      self.title =  new LocalizedText( options.title);
  
      /**
        * LINEAR, LOG, LN, defined by AxisSteps
        * @property axisScaleType
        * @type {AxisScaleEnumeration}
        */
      self.axisScaleType = initialize_field(schema.fields[3], options.axisScaleType);
  
      /**
        * Specific value of each axis steps, may be set to Null if not used
        * @property axisSteps
        * @type {Double[]}
        * @default  null
        */
      self.axisSteps = initialize_field_array(schema.fields[4], options.axisSteps);
  
     // Object.preventExtensions(self);
  }
  util.inherits(AxisInformation,BaseUAObject);
  
  //define enumeration properties
  Object.defineProperties(AxisInformation.prototype,_enum_properties);
  AxisInformation.prototype.encodingDefaultBinary = makeExpandedNodeId(12089,0);
  AxisInformation.prototype.encodingDefaultXml = makeExpandedNodeId(12081,0);
  AxisInformation.prototype._schema = schema;
  
  var encode_AxisScaleEnumeration = _enumerations.AxisScaleEnumeration.encode;
  var decode_AxisScaleEnumeration = _enumerations.AxisScaleEnumeration.decode;
  var encode_Double = _defaultTypeMap.Double.encode;
  var decode_Double = _defaultTypeMap.Double.decode;
  /**
   * encode the object into a binary stream
   * @method encode
   *
   * @param stream {BinaryStream} 
   */
  AxisInformation.prototype.encode = function(stream,options) {
      // call base class implementation first
      BaseUAObject.prototype.encode.call(this,stream,options);
     this.engineeringUnits.encode(stream,options);
     this.euRange.encode(stream,options);
     this.title.encode(stream,options);
      encode_AxisScaleEnumeration(this.axisScaleType,stream);
      encodeArray(this.axisSteps, stream, encode_Double);
  };
  AxisInformation.prototype.decode = function(stream,options) {
      // call base class implementation first
      BaseUAObject.prototype.decode.call(this,stream,options);
      this.engineeringUnits.decode(stream,options);
      this.euRange.decode(stream,options);
      this.title.decode(stream,options);
      this.axisScaleType = decode_AxisScaleEnumeration(stream,options);
      this.axisSteps = decodeArray(stream, decode_Double);
  };
  AxisInformation.possibleFields = (function() {
      return [
          "engineeringUnits",
           "euRange",
           "title",
           "axisScaleType",
           "axisSteps"
      ];
  })();
  
  
  exports.AxisInformation = AxisInformation;
  var register_class_definition = require("lib/misc/factories_factories").register_class_definition;
  register_class_definition("AxisInformation",AxisInformation);
  