´╗┐Option Explicit On
Option Strict On

Imports System
Imports System.Xml

'**********************************************************************************************
'* Copyright (c) 2001-2017 Liquid Technologies Limited. All rights reserved.
'* See www.liquid-technologies.com for product details.
'*
'* Please see products End User License Agreement for distribution permissions.
'*
'* WARNING: THIS FILE IS GENERATED
'* Changes made outside of ##HAND_CODED_BLOCK_START blocks will be overwritten
'*
'* Generation  :  by Liquid XML Data Binder 15.0.1.7161
'* Using Schema: D:\Development2017\Liquid\Tools\DataBindingSamples\Samples\SimpleHierarchy\Schema\SimpleHierarchy.xsd
'**********************************************************************************************

Namespace SimpleHierarchyLib

    ''' <summary>
    ''' This class represents the ComplexType AddressType
    ''' </summary>
    <LiquidTechnologies.Runtime.Net45.XmlObjectInfo(LiquidTechnologies.Runtime.Net45.XmlObjectBase.XmlElementGroupType.Sequence, _
                                                    LiquidTechnologies.Runtime.Net45.XmlObjectBase.XmlElementType.Element, _
                                                    "AddressType", "", true, false, _
                                                    LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_none, Nothing, false)> _
    Public Partial Class AddressType
        Inherits SimpleHierarchyLib.XmlCommonBase

        #Region "Constructors"
        ''' <summary>
        '''    Constructor for AddressType
        ''' </summary>
        ''' <remarks>
        '''    The class is created with all the mandatory fields populated with the
        '''    default data. 
        '''    All Collection object are created.
        '''    However any 1-n relationships (these are represented as collections) are
        '''    empty. To comply with the schema these must be populated before the xml
        '''    obtained from ToXml is valid against the schema D:\Development2017\Liquid\Tools\DataBindingSamples\Samples\SimpleHierarchy\Schema\SimpleHierarchy.xsd
        ''' </remarks>
        Public Sub New()
            _elementName = "AddressType"
            Init()
        End Sub
        
        Public Sub New(ByVal elementName as String)
            _elementName = elementName
            Init()
        End Sub
        #End Region

        #Region "Initialization methods for the class"
        ''' <summary>
        '''    Initializes the class
        ''' </summary>
        ''' <remarks>
        '''    The Creates all the mandatory fields (populated with the default data) 
        '''    All Collection object are created.
        '''    However any 1-n relationships (these are represented as collections) are
        '''    empty. To comply with the schema these must be populated before the xml
        '''    obtained from ToXml is valid against the schema D:\Development2017\Liquid\Tools\DataBindingSamples\Samples\SimpleHierarchy\Schema\SimpleHierarchy.xsd.
        ''' </remarks>
        Protected Overrides Sub Init()
            SimpleHierarchyLib.Registration.iRegistrationIndicator = 0 ' causes registration to take place
            _Forename = ""
            _Surname = ""
            _AddresLine1 = ""
            _AddresLine2 = ""
            _AddresLine3 = ""
            _IsValidAddresLine3 = false 
            _AddresLine4 = ""
            _IsValidAddresLine4 = false 
            _AddresLine5 = ""
            _PostCode = ""



' ##HAND_CODED_BLOCK_START ID="Additional Inits"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

' Add Additional initialization code here...

' ##HAND_CODED_BLOCK_END ID="Additional Inits"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS
        End Sub

        #End Region

        #Region "ICloneable Interface"
        ''' <summary>
        '''    Allows the class to be copied
        ''' </summary>
        ''' <remarks>
        '''    Performs a 'deep copy' of all the data in the class (and its children)
        ''' </remarks>
        Public Overrides Function Clone() As Object
            Dim newObject As New SimpleHierarchyLib.AddressType(_elementName)
            Dim o As Object
            newObject._Forename = _Forename
            newObject._Surname = _Surname
            newObject._AddresLine1 = _AddresLine1
            newObject._AddresLine2 = _AddresLine2
            newObject._AddresLine3 = _AddresLine3
            newObject._IsValidAddresLine3 = _IsValidAddresLine3
            newObject._AddresLine4 = _AddresLine4
            newObject._IsValidAddresLine4 = _IsValidAddresLine4
            newObject._AddresLine5 = _AddresLine5
            newObject._PostCode = _PostCode

            o = Nothing


' ##HAND_CODED_BLOCK_START ID="Additional clone"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

' Add Additional clone code here...

' ##HAND_CODED_BLOCK_END ID="Additional clone"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

            Return newObject
        End Function
        #End Region

        #Region "Member variables"

        Protected Overrides Readonly Property TargetNamespace() as String
            Get 
                Return ""
            End Get
        End Property

        #Region "Attribute - Forename"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("Forename", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property Forename() as String
            Get 
                Return _Forename  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(0, value)
                _Forename = value 
            End Set
        End Property
        Protected _Forename As String

        #End Region
    
        #Region "Attribute - Surname"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("Surname", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property Surname() as String
            Get 
                Return _Surname  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(1, value)
                _Surname = value 
            End Set
        End Property
        Protected _Surname As String

        #End Region
    
        #Region "Attribute - AddresLine1"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("AddresLine1", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property AddresLine1() as String
            Get 
                Return _AddresLine1  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(2, value)
                _AddresLine1 = value 
            End Set
        End Property
        Protected _AddresLine1 As String

        #End Region
    
        #Region "Attribute - AddresLine2"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("AddresLine2", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property AddresLine2() as String
            Get 
                Return _AddresLine2  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(3, value)
                _AddresLine2 = value 
            End Set
        End Property
        Protected _AddresLine2 As String

        #End Region
    
        #Region "Attribute - AddresLine3"
        ''' <summary>
        ''' Represents an optional Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is optional, initially it is not valid.
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimOpt("AddresLine3", "", "IsValidAddresLine3", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property AddresLine3() As String
            Get 
                if (_IsValidAddresLine3 = false) Then
                    throw new LiquidTechnologies.Runtime.Net45.LtInvalidStateException("The Property AddresLine3 is not valid. Set AddresLine3Valid = true")
                End If
                Return _AddresLine3  
            End Get
            Set(ByVal value As String) 
                CheckElementRestriction(4, value)
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                _IsValidAddresLine3 = true
                _AddresLine3 = value 
            End Set
        End Property
        ''' <summary>
        ''' Indicates if AddresLine3 contains a valid value.
        ''' </summary>
        ''' <remarks>
        ''' true if the value for AddresLine3 is valid, false if not.
        '''    If this is set to true then the property is considered valid, and assigned its
        '''    default value ("").
        '''    If its set to false then its made invalid, and subsequent calls to get AddresLine3
        '''    will raise an exception.
        ''' </remarks>
        Public Property IsValidAddresLine3() As Boolean 
            Get
                Return _IsValidAddresLine3
            End Get
            Set(ByVal value As Boolean) 
                If (value <> _IsValidAddresLine3) Then
                    AddresLine3 = ""
                    _IsValidAddresLine3 = value
                End If
            End Set
        End Property
        Protected _IsValidAddresLine3 as Boolean
        Protected _AddresLine3 as String
        #End Region
    
        #Region "Attribute - AddresLine4"
        ''' <summary>
        ''' Represents an optional Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is optional, initially it is not valid.
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimOpt("AddresLine4", "", "IsValidAddresLine4", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property AddresLine4() As String
            Get 
                if (_IsValidAddresLine4 = false) Then
                    throw new LiquidTechnologies.Runtime.Net45.LtInvalidStateException("The Property AddresLine4 is not valid. Set AddresLine4Valid = true")
                End If
                Return _AddresLine4  
            End Get
            Set(ByVal value As String) 
                CheckElementRestriction(5, value)
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                _IsValidAddresLine4 = true
                _AddresLine4 = value 
            End Set
        End Property
        ''' <summary>
        ''' Indicates if AddresLine4 contains a valid value.
        ''' </summary>
        ''' <remarks>
        ''' true if the value for AddresLine4 is valid, false if not.
        '''    If this is set to true then the property is considered valid, and assigned its
        '''    default value ("").
        '''    If its set to false then its made invalid, and subsequent calls to get AddresLine4
        '''    will raise an exception.
        ''' </remarks>
        Public Property IsValidAddresLine4() As Boolean 
            Get
                Return _IsValidAddresLine4
            End Get
            Set(ByVal value As Boolean) 
                If (value <> _IsValidAddresLine4) Then
                    AddresLine4 = ""
                    _IsValidAddresLine4 = value
                End If
            End Set
        End Property
        Protected _IsValidAddresLine4 as Boolean
        Protected _AddresLine4 as String
        #End Region
    
        #Region "Attribute - AddresLine5"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("AddresLine5", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property AddresLine5() as String
            Get 
                Return _AddresLine5  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(6, value)
                _AddresLine5 = value 
            End Set
        End Property
        Protected _AddresLine5 As String

        #End Region
    
        #Region "Attribute - PostCode"
        ''' <summary>
        ''' Represents a mandatory Element in the XML document
        ''' </summary>
        ''' <remarks>
        ''' This property is represented as an Element in the XML.
        ''' It is mandatory and therefore must be populated within the XML.
        ''' It is defaulted to "".
        ''' </remarks>
        <LiquidTechnologies.Runtime.Net45.ElementInfoSeqPrimMnd("PostCode", "", Nothing, LiquidTechnologies.Runtime.Net45.Conversions.ConversionType.type_string, Nothing, LiquidTechnologies.Runtime.Net45.WhitespaceUtils.WhitespaceRule.Preserve, "", "-1", "-1", "", "", "", "", "-1", "-1", "-1")> _
        Public Property PostCode() as String
            Get 
                Return _PostCode  
            End Get
            Set(ByVal value As String) 
                ' Apply whitespace rules appropriately
                value = LiquidTechnologies.Runtime.Net45.WhitespaceUtils.Preserve(value) 
                CheckElementRestriction(7, value)
                _PostCode = value 
            End Set
        End Property
        Protected _PostCode As String

        #End Region
    
        #Region "Attribute - Namespace"
        Public Overrides Readonly Property [Namespace]() As String
            Get 
                Return ""  
            End Get
        End Property
        #End Region

        #Region "Attribute - GetBase"
        Public Overrides Function GetBase() As LiquidTechnologies.Runtime.Net45.XmlObjectBase
            Return Me
        End Function
        #End Region
        #End Region


' ##HAND_CODED_BLOCK_START ID="Additional Methods"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

' Add Additional Methods and members here...

' ##HAND_CODED_BLOCK_END ID="Additional Methods"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS
    End Class
End Namespace