'************************************************** ' FILE : BBCodeConfiguration.vb ' AUTHOR : Paulo Santos ' CREATION : 4/30/2009 10:57:20 PM ' COPYRIGHT : Copyright © 2009 ' PJ on Development ' All Rights Reserved. ' ' Description: ' TODO: Add file description ' ' Change log: ' 0.1 4/30/2009 10:57:20 PM ' Paulo Santos ' Created. '*************************************************** Imports System.Xml.Serialization ''' ''' Represents the configuration of the . ''' _ _ Public NotInheritable Class BBCodeConfiguration(Of TContext As Class) Implements IXmlSerializable Private Shared ReadOnly __CurrentVersion As New System.Version(1, 0) Private __Version As System.Version Private __Dictionary As BBCodeElementDictionary Private __ElementTypes As BBCodeElementTypeDictionary(Of TContext) ''' Initializes an instance of the class. ''' This is the default constructor for this class. Friend Sub New() __Version = New Version(1, 0) End Sub ''' ''' Gets the version of the configuration file. ''' Public Property Version() As System.Version Get Return __Version End Get Private Set(ByVal value As System.Version) If (value > __CurrentVersion) Then Throw New ArgumentException("Unrecognized version.") End If __Version = value End Set End Property ''' ''' Gets the dictionary configuration. ''' _ Public ReadOnly Property Dictionary() As BBCodeElementDictionary Get If (__Dictionary Is Nothing) Then __Dictionary = New BBCodeElementDictionary() End If Return __Dictionary End Get End Property ''' ''' Gets the factory configuration. ''' _ Public ReadOnly Property ElementTypes() As BBCodeElementTypeDictionary(Of TContext) Get If (__ElementTypes Is Nothing) Then __ElementTypes = New BBCodeElementTypeDictionary(Of TContext)() End If Return __ElementTypes End Get End Property ''' This method is reserved and should not be used. When implementing the IXmlSerializable interface, you should return null (Nothing in Visual Basic) from this method, and instead, if specifying a custom schema is required, apply the to the class. ''' An that describes the XML representation of the object that is produced by the method and consumed by the method. Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema Return Nothing End Function ''' Generates an object from its XML representation. ''' The stream from which the object is deserialized. Public Sub ReadXml(ByVal reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml '* '* Check the name of the element '* If (reader.NamespaceURI <> STR_BBCodeSchemaNamespace) OrElse (reader.LocalName <> STR_BBCodeConfigurationXmlElement) Then Exit Sub End If '* '* Gets the version of the configuration '* Dim versionString = reader.GetAttribute("version") If (Not String.IsNullOrEmpty(versionString)) Then Me.Version = New System.Version(versionString) End If '* '* Move to the first item '* reader.Read() Dim dictionarySerializer = New XmlSerializer(GetType(BBCodeElementDictionary)) Dim typesSerializer = New XmlSerializer(GetType(BBCodeElementTypeDictionary(Of TContext))) __ElementTypes = Nothing __Dictionary = Nothing If (reader.LocalName = STR_BBCodeElementTypesXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then __ElementTypes = typesSerializer.Deserialize(reader) End If If (reader.LocalName = STR_BBCodeDictionaryXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then __Dictionary = dictionarySerializer.Deserialize(reader) End If If (__ElementTypes Is Nothing AndAlso reader.LocalName = STR_BBCodeElementTypesXmlElement AndAlso reader.NamespaceURI = STR_BBCodeSchemaNamespace) Then __ElementTypes = typesSerializer.Deserialize(reader) End If End Sub ''' Converts an object into its XML representation. ''' The stream to which the object is serialized. Public Sub WriteXml(ByVal writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml Dim dictionarySerializer = New XmlSerializer(GetType(BBCodeElementDictionary)) Dim typesSerializer = New XmlSerializer(GetType(BBCodeElementTypeDictionary(Of TContext))) If (ElementTypes.Count > 0) Then typesSerializer.Serialize(writer, ElementTypes) End If If (Dictionary.Count > 0) Then dictionarySerializer.Serialize(writer, Dictionary) End If End Sub End Class