/// <summary>
 /// Initializes a new instance of the <see cref="AttributeValue"/> class.
 /// </summary>
 /// <param name="theDefinition">The definition.</param>
 /// <param name="theValue">The value.</param>
 /// <param name="theParentStruct">The parent struct.</param>
 public AttributeValue(AttributeDefinition theDefinition, Value theValue, StructureValue theParentStruct)
 {
     Definition = theDefinition;
     Name = theDefinition.Name;
     Value = theValue;
     ParentStruct = theParentStruct;
 }
        /// <summary>
        /// Finishes construction of the object by populating properties of the object from
        /// the XML node
        /// </summary>
        /// <param name="theNode"></param>
        /// <param name="theManager"></param>
        public override void FinishConstruction(XElement theNode, DictionaryManager theManager)
        {
            try
            {
                if (theNode.Element("ByteSize") != null)
                {
                    SetByteSize(theNode.Element("ByteSize").Value);
                }

                IsTlvStructure = false;

                // Parse each of the attribute nodes in turn - this may well get recursive
                m_AttributeDefinitions = new AttributeDefinitionCollection(Name);
                foreach (var attributeNode in theNode.Elements("Attribute"))
                {
                    AttributeDefinition theAttribute = new AttributeDefinition(attributeNode, theManager, this);
                    m_AttributeDefinitions.Add(theAttribute);
                    if (theAttribute.HasDiscriminator && theAttribute.HasLengthIndicator)
                    {
                        IsTlvStructure = true;
                        m_TlvControlAttribute = theAttribute;
                    }
                }

                // Check the name. If it's null then make one up
                if (theNode.Element("Name") == null)
                {
                    Name = String.Format("XXStruct_{0}", Ref);
                }
            }
            catch (DataDictionaryException ex)
            {
                throw new DataDictionaryException("Error constructing definition for Struct. XML:\n{0}\nException: {1}", theNode, ex.Message);
            }
            catch (XmlException ex)
            {
                throw new DataDictionaryException("Error constructing definition for Struct. XML:\n{0}\nException: {1}", theNode, ex.Message);
            }
        }