VERSION 1.0 CLASS
BEGIN   
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "ClassFactory"
Attribute VB_GlobalNameSpace = True
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
Option Explicit
'**********************************************************************************************
'* 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\MusicStore\Schema\MusicStore.xsd
'**********************************************************************************************
Private mvarEnumConverter as new EnumConversions

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

' Add Additional Variable Declarations...

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


public enum MusicStoreLib_Classes
    ClsName_NONE
     ClsName_AlbumType
     ClsName_Error_
     ClsName_PriceFilter
     ClsName_Result
     ClsName_SearchRequest
     ClsName_SearchResponse
     ClsName_TrackType
     ClsName_AlbumTypeCol
     ClsName_TrackTypeCol
End Enum

Public Function CreateClass(ByVal eCls as MusicStoreLib_Classes) as LtXmlComLib15.XmlObjectBase
    ' This is structured like this to get around compiler limitations
    if eCls = ClsName_NONE then
        Err.Raise 1, "ClassFactory", "Invalid Class (NONE)"
    end if
    
    Select Case (eCls)
    case ClsName_AlbumType
        Set CreateClass = new MusicStoreLib.AlbumType
    case ClsName_Error_
        Set CreateClass = new MusicStoreLib.Error_
    case ClsName_PriceFilter
        Set CreateClass = new MusicStoreLib.PriceFilter
    case ClsName_Result
        Set CreateClass = new MusicStoreLib.Result
    case ClsName_SearchRequest
        Set CreateClass = new MusicStoreLib.SearchRequest
    case ClsName_SearchResponse
        Set CreateClass = new MusicStoreLib.SearchResponse
    case ClsName_TrackType
        Set CreateClass = new MusicStoreLib.TrackType
    case else
        Err.Raise 2, "ClassFactory", "Unknown Class id"
    End Select
    
    Debug.Assert not CreateClass is nothing
End Function

Public Function CreateNamedClass(byval eCls as MusicStoreLib_Classes, byval strElementName as String) as LtXmlComLib15.XmlObjectBase    
    ' This is structured like this to get around compiler limitations
    if eCls = ClsName_NONE then
        Err.Raise 1, "ClassFactory", "Invalid Class (NONE)"
    end if
    
    Select Case (eCls)
    case ClsName_AlbumType
        Set CreateNamedClass = new MusicStoreLib.AlbumType
    case ClsName_Error_
        Set CreateNamedClass = new MusicStoreLib.Error_
    case ClsName_PriceFilter
        Set CreateNamedClass = new MusicStoreLib.PriceFilter
    case ClsName_Result
        Set CreateNamedClass = new MusicStoreLib.Result
    case ClsName_SearchRequest
        Set CreateNamedClass = new MusicStoreLib.SearchRequest
    case ClsName_SearchResponse
        Set CreateNamedClass = new MusicStoreLib.SearchResponse
    case ClsName_TrackType
        Set CreateNamedClass = new MusicStoreLib.TrackType
    case else
        Err.Raise 2, "ClassFactory", "Unknown Class id"
    End Select
    
    Debug.Assert not CreateNamedClass is nothing
    CreateNamedClass.PrivateSetElementName strElementName
End Function 


Public Function CreateClassCollection(byval eCls as MusicStoreLib_Classes, byval strElementName as string, byval strElementNamespaceUri as string, byval iMinOccurs as long, byval iMaxOccurs as long ) as LtXmlComLib15.XmlCollectionBase
    Select Case(eCls)
    case ClsName_NONE
        Err.Raise ERR_INVALID_VALUE, "CreateClassCollection", "Invalid Class (NONE)"
    case ClsName_AlbumTypeCol
        Set CreateClassCollection = new AlbumTypeCol
    case ClsName_TrackTypeCol
        Set CreateClassCollection = new TrackTypeCol
    case else   
        Err.Raise ERR_INVALID_VALUE, "CreateClassCollection", "Unknown Collection Class id"
    End Select
    CreateClassCollection.Init strElementName, strElementNamespaceUri, iMinOccurs, iMaxOccurs
    
end Function

Public Function CreateEnumCollection(byval eCls as MusicStoreLib_Classes , byval strElementNamespace as string, byval strElementName as string, byval iMinOccurs as long, byval iMaxOccurs as long ) as LtXmlComLib15.XmlCollectionBase
    Select Case(eCls)
    case ClsName_NONE
        Err.Raise ERR_INVALID_VALUE, "CreateEnumCollection", "Invalid Class (NONE)"
    case else
        Err.Raise ERR_INVALID_VALUE, "CreateEnumCollection", "Unknown Collection Class id"
    End Select
    CreateEnumCollection.Init strElementName, strElementNamespace, iMinOccurs, iMaxOccurs
end Function

Public Property Get EnumConverter as EnumConversions
    Set EnumConverter = mvarEnumConverter
End Property



Public Function FromXml( ByVal xmlIn As String, Optional oContext As LtXmlComLib15.XmlSerializationContext = Nothing ) as Object
    Dim oDoc As New MSXML2.DOMDocument40
    oDoc.validateOnParse = False
    oDoc.PreserveWhitespace = True
    If oDoc.loadXML(xmlIn) = False Then
        Err.Raise 103, "XmlObjectBase", "Failed to parse XML" & vbCrLf & oDoc.parseError.reason
    End If
    Set FromXml = FromXmlElement(oDoc.documentElement, oContext)
End Function

Public Function FromXmlFile( ByVal FileName As String, Optional oContext As LtXmlComLib15.XmlSerializationContext = Nothing ) as Object
    Dim oDoc As New MSXML2.DOMDocument40
    oDoc.validateOnParse = False
    oDoc.PreserveWhitespace = True
    If oDoc.load(FileName) = False Then
        Err.Raise 103, "XmlObjectBase", "Failed to parse XML File " & FileName & vbCrLf & oDoc.parseError.reason
    End If
    Set FromXmlFile = FromXmlElement(oDoc.documentElement, oContext)
End Function

Public Function FromXmlElement(ByVal oXmlElmParent As MSXML2.IXMLDOMElement, Optional oContext As LtXmlComLib15.XmlSerializationContext = Nothing) As Object

    Dim elementName As String
    Dim elementNamespaceUri As String

    If oContext Is Nothing Then Set oContext = DefaultXmlSerializationContext

    ' Get the type name this is either
    ' from the element i.e. <Parent>... = Parent
    ' or from the type i.e. <Parent xsi:type="someNS:SomeElement">... = SomeElement
    If LtXmlComLib15.XmlObjectBaseHelper.GetElementType(oXmlElmParent) = "" Then
        elementName = oXmlElmParent.baseName
        elementNamespaceUri = oXmlElmParent.NamespaceURI
    Else
        elementName = LtXmlComLib15.XmlObjectBaseHelper.GetElementType(oXmlElmParent)
        elementNamespaceUri = oXmlElmParent.NamespaceURI 
    End If
    
    ' create the appropriate object
    If elementName = "" Then
        Err.Raise 103, "FromXmlElement", "The element to load has no name"
    ElseIf elementName = "AlbumType" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.AlbumType
    ElseIf elementName = "Error" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.Error_
    ElseIf elementName = "PriceFilter" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.PriceFilter
    ElseIf elementName = "Result" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.Result
    ElseIf elementName = "SearchRequest" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.SearchRequest
    ElseIf elementName = "SearchResponse" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.SearchResponse
    ElseIf elementName = "TrackType" And elementNamespaceUri = "" Then
        Set FromXmlElement = New MusicStoreLib.TrackType
    Else
        Err.Raise 103, "FromXmlElement", "Failed load the element " & elementName & ". No appropriate class exists to load the data into. Ensure that the XML document complies with the schema."
    End If
    
    ' load the data into the object
    Dim oBaseClass As LtXmlComLib15.XmlObjectBase
    Set oBaseClass = FromXmlElement
    oBaseClass.FromXmlInt oXmlElmParent, XmlObjectBaseHelper.FindFirstSliblingElement(oXmlElmParent.firstChild), oContext, False
End Function
            
' ##HAND_CODED_BLOCK_START ID="Additional Methods/Properties"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS

' Add Additional Methods/Properties Here...

' ##HAND_CODED_BLOCK_END ID="Additional Methods/Properties"## DO NOT MODIFY ANYTHING OUTSIDE OF THESE TAGS