/**********************************************************************************************
 * 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
 **********************************************************************************************/
#ifndef _SimpleHierarchyLib_SimpleHierarchyLib_CAddressType_h 
#define _SimpleHierarchyLib_SimpleHierarchyLib_CAddressType_h 

// Include Base classes

// ##HAND_CODED_BLOCK_START ID="Additional Includes"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

// Add Additional Includes here...

// ##HAND_CODED_BLOCK_END ID="Additional Includes"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

// Forward declarations - done like this to keep the intellisense happy
namespace SimpleHierarchyLib    {   class CClassFactory; };

namespace SimpleHierarchyLib
{
    /*
     * CAddressType
     *  
     * This class wraps the element AddressType in the schema
     */
    class SimpleHierarchyLib_DLL CAddressType : public CInstanceMonitor
                    , public virtual SimpleHierarchyLib::CXmlCommonBase
// ##HAND_CODED_BLOCK_START ID="Additional Base Classes"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS
// Add Additional base classes here...
// ##HAND_CODED_BLOCK_END ID="Additional Base Classes"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS
    {
    public:
        static SimpleHierarchyLib::CAddressTypePtr CreateInstance(LPCTSTR lpctElementName=_T("AddressType"));

    protected:
        CAddressType(LPCTSTR lpctElementName=_T("AddressType"));
        virtual ~CAddressType();
        friend class SimpleHierarchyLib::CClassFactory;
    
        virtual void Init();
        virtual void AccessProperty(int iPropertyIndex, bool read, LtXmlLib15::LtVariant& rValue);
        virtual LtXmlLib15Data::CParentElementInfo* GetClassInfo() const;
        virtual LtXmlLib15Data::CElementInfo** GetClassElementInfo() const;
        virtual LtXmlLib15Data::CAttributeInfo** GetClassAttributeInfo() const;
        
        static  void CleanMetaData();
                void Cleanup();
        virtual void OnEvent(LtXmlLib15::CXmlObjectBase* pMsgSource, LtXmlLib15::IEventSink::MsgType eMsgType, void* pData);

    public:
        std::tstring GetForename() const;
        void SetForename(std::tstring val);
    protected:
        std::tstring m_Forename;

    public:
        std::tstring GetSurname() const;
        void SetSurname(std::tstring val);
    protected:
        std::tstring m_Surname;

    public:
        std::tstring GetAddresLine1() const;
        void SetAddresLine1(std::tstring val);
    protected:
        std::tstring m_AddresLine1;

    public:
        std::tstring GetAddresLine2() const;
        void SetAddresLine2(std::tstring val);
    protected:
        std::tstring m_AddresLine2;

    public:
        std::tstring GetAddresLine3() const;
        void SetAddresLine3(std::tstring val);
        bool IsValidAddresLine3() const;
        void SetValidAddresLine3(bool val);
    protected:
        bool m_IsValidAddresLine3;
        std::tstring m_AddresLine3;

    public:
        std::tstring GetAddresLine4() const;
        void SetAddresLine4(std::tstring val);
        bool IsValidAddresLine4() const;
        void SetValidAddresLine4(bool val);
    protected:
        bool m_IsValidAddresLine4;
        std::tstring m_AddresLine4;

    public:
        std::tstring GetAddresLine5() const;
        void SetAddresLine5(std::tstring val);
    protected:
        std::tstring m_AddresLine5;

    public:
        std::tstring GetPostCode() const;
        void SetPostCode(std::tstring val);
    protected:
        std::tstring m_PostCode;



    public:
        // Performs a 'deep copy' of all the data in the class (and its children)
        virtual SimpleHierarchyLib::CAddressTypePtr Clone() const;

        virtual std::tstring GetTargetNamespace() const;
        virtual std::tstring GetNamespace() const;
        virtual LtXmlLib15::CXmlObjectBase* GetBase();

    // Internal data for XML serialization
    private:
        static LtXmlLib15Data::CParentElementInfo* ms_pParentElementInfo;
        static LtXmlLib15Data::CElementInfo** ms_ppElementInfo;
        static LtXmlLib15Data::CAttributeInfo** ms_ppAttributeInfo;

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

// Add Additional Methods here...

// ##HAND_CODED_BLOCK_END ID="Additional Methods"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS
    };
}; // end namespace (SimpleHierarchyLib)


#endif // _SimpleHierarchyLib_CAddressType_h