Namespace Negocio <Serializable()> _ Public MustInherit Class ObjetoBase : Implements IExportable : Implements Dal.ILoader Public MustOverride Property Id() As Integer Public MustOverride Overloads Function ToString(ByVal CustomFormat As Boolean) As String Public Sub New() End Sub Public Overridable Function DeleteString() As String Return "Confirma la eliminacion del elemento: {0}" End Function #Region " Interface ILoader " <NonSerialized()> _ Private _ConnectionProvider As Dal.ConnectionProviderDelegate = Nothing <Xml.Serialization.XmlIgnore()> _ Public Property ConnectionProvider() As Dal.ConnectionProviderDelegate Implements Dal.ILoader.ConnectionProvider Get Return _ConnectionProvider End Get Set(ByVal value As Dal.ConnectionProviderDelegate) _ConnectionProvider = value End Set End Property <NonSerialized()> _ Private _TransactionProvider As Dal.TransactionProviderDelegate = Nothing <Xml.Serialization.XmlIgnore()> _ Public Property TransactionProvider() As Dal.TransactionProviderDelegate Implements Dal.ILoader.transactionProvider Get Return _TransactionProvider End Get Set(ByVal value As Dal.TransactionProviderDelegate) _TransactionProvider = value End Set End Property Public Overridable Function GetBinder() As Dal.ObjectLoader Implements Dal.ILoader.GetObjectLoader Return Nothing End Function #End Region Public Overridable Function ToXml() As String Implements IExportable.FormatoXml With New Xml.Serialization.XmlSerializer(Me.GetType) Dim _SWriter As New IO.StringWriter() .Serialize(_SWriter, Me) Dim xml As String = _SWriter.ToString() With New System.Xml.XmlDocument() .LoadXml(xml) Return .DocumentElement.InnerXml End With End With End Function Public Overridable Function ToCSV(ByVal separador As String) As String Implements IExportable.FormatoCsv With New Xml.Serialization.XmlSerializer(Me.GetType) Dim _SWriter As New IO.StringWriter() .Serialize(_SWriter, Me) With New System.Xml.XmlDocument() .LoadXml(_SWriter.ToString()) Dim s As New System.Text.StringBuilder For i As Integer = 0 To .ChildNodes(1).ChildNodes.Count - 1 s.Append(.ChildNodes(1).ChildNodes(i).InnerText.Replace(separador, ".") & separador) Next s.Remove(s.Length - 1, 1) Return s.ToString End With End With End Function Public Overridable Function HeaderCSV(ByVal separador As String) As String Implements IExportable.HeaderCsv With New Xml.Serialization.XmlSerializer(Me.GetType) Dim _SWriter As New IO.StringWriter() .Serialize(_SWriter, Me) With New System.Xml.XmlDocument() .LoadXml(_SWriter.ToString()) Dim s As New System.Text.StringBuilder For i As Integer = 0 To .ChildNodes(1).ChildNodes.Count - 1 s.Append(.ChildNodes(1).ChildNodes(i).Name & separador) Next s.Remove(s.Length - 1, 1) Return s.ToString End With End With End Function Public Function this() As ObjetoBase Return Me End Function <NonSerialized()> _ Private _Tag As Object = Nothing <Xml.Serialization.XmlIgnore()> _ Public Property Tag() As Object Get Return _Tag End Get Set(ByVal Value As Object) _Tag = Value End Set End Property Public Shared Function ToBase64XmlString(Of T)(ByVal input As T) As String If input Is Nothing Then Return Nothing Dim writer As New IO.MemoryStream() Dim formatter As Xml.Serialization.XmlSerializer = New Xml.Serialization.XmlSerializer(input.GetType) formatter.Serialize(writer, input) Return Convert.ToBase64String(writer.ToArray) End Function Public Shared Function FromBase64XmlString(Of T)(ByVal input As String) As T If input Is Nothing Or input.Length = 0 Then Return Nothing Dim formatter As Xml.Serialization.XmlSerializer = New Xml.Serialization.XmlSerializer(GetType(T)) Return formatter.Deserialize(New IO.MemoryStream(Convert.FromBase64String(input))) End Function #Region " Compresion " Public Shared Function ToBase64XmlStringCompress(Of T)(ByVal input As T) As String If input Is Nothing Then Return Nothing Dim writer As New IO.MemoryStream() Dim formatter As Xml.Serialization.XmlSerializer = New Xml.Serialization.XmlSerializer(input.GetType) 'Dim formatter As Runtime.Serialization.Formatters.Binary.BinaryFormatter = New Runtime.Serialization.Formatters.Binary.BinaryFormatter() formatter.Serialize(writer, input) writer.Position = 0 Return Convert.ToBase64String(Compress(writer)) End Function Public Shared Function FromBase64XmlStringCompress(Of T)(ByVal input As String) As T If input Is Nothing Or input.Length = 0 Then Return Nothing Dim formatter As Xml.Serialization.XmlSerializer = New Xml.Serialization.XmlSerializer(GetType(T)) 'Dim formatter As Runtime.Serialization.Formatters.Binary.BinaryFormatter = New Runtime.Serialization.Formatters.Binary.BinaryFormatter() Return formatter.Deserialize(New IO.MemoryStream(Decompress(New IO.MemoryStream(Convert.FromBase64String(input))))) End Function Private Shared Function Compress(ByVal stream As IO.Stream) As Byte() Using resultStream As IO.MemoryStream = New IO.MemoryStream() Using writeStream As IO.Compression.GZipStream = New IO.Compression.GZipStream(resultStream, IO.Compression.CompressionMode.Compress, True) CopyBuffered(stream, writeStream) End Using Return resultStream.ToArray() End Using End Function Private Shared ReadOnly bufferSize As Integer = 10000 Private Shared Sub CopyBuffered(ByVal readStream As IO.Stream, ByVal writeStream As IO.Stream) Dim bytes(bufferSize) As Byte Dim byteCount As Integer = readStream.Read(bytes, 0, bytes.Length) While byteCount <> 0 writeStream.Write(bytes, 0, byteCount) byteCount = readStream.Read(bytes, 0, bytes.Length) End While End Sub Private Shared Function Decompress(ByVal stream As IO.Stream) As Byte() Using decompressedStream As IO.Stream = New IO.Compression.GZipStream(stream, IO.Compression.CompressionMode.Decompress, False) Using resultStream As IO.MemoryStream = New IO.MemoryStream() CopyBuffered(decompressedStream, resultStream) Return resultStream.ToArray() End Using End Using End Function #End Region End Class End Namespace
martes, 16 de diciembre de 2008
Negocio.Core.ObjetoBase.vb
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario