Skip to content

Commit

Permalink
Merge branch 'release-1.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
robinhultman committed Jan 11, 2016
2 parents 9f54905 + 259f984 commit 436a8e0
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,17 @@
<AssemblyOriginatorKeyFile>BizTalkComponents.PipelineComponents.CompressMessage.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.BizTalk.GlobalPropertySchemas, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="Microsoft.BizTalk.Pipeline, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="Microsoft.BizTalk.Streaming, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Microsoft BizTalk Server 2013 R2\Microsoft.BizTalk.Streaming.dll</HintPath>
</Reference>
<Reference Include="Microsoft.XLANGs.BaseTypes, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
Expand Down
45 changes: 24 additions & 21 deletions Src/CompressMessage/CompressMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,27 +33,30 @@ public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
throw new ArgumentException(errorMessage);
}

var cu = new CompressionUtil();

for (var i = 0; i < pInMsg.PartCount; i++)
var outMsg = pContext.GetMessageFactory().CreateMessage();
outMsg.Context = pInMsg.Context;
var bodyPart = pContext.GetMessageFactory().CreateMessagePart();

using (var compressionUtil = new CompressionUtil())
{
string partName;
var part = pInMsg.GetPartByIndex(i, out partName);
for (var i = 0; i < pInMsg.PartCount; i++)
{
string partName;
var part = pInMsg.GetPartByIndex(i, out partName);


var fileName = GetFileName(part);

cu.AddMessage(part.GetOriginalDataStream(), fileName);
}
var fileName = GetFileName(part);

var outMsg = pContext.GetMessageFactory().CreateMessage();
outMsg.Context = pInMsg.Context;
var bodyPart = pContext.GetMessageFactory().CreateMessagePart();
bodyPart.Data = cu.GetZip();
bodyPart.Charset = "utf-8";
bodyPart.ContentType = "application/zip";
compressionUtil.AddMessage(part.GetOriginalDataStream(), fileName);
}

outMsg.AddPart("Body",bodyPart,true);
bodyPart.Data = compressionUtil.GetZip();
pContext.ResourceTracker.AddResource(bodyPart.Data);
bodyPart.Charset = "utf-8";
bodyPart.ContentType = "application/zip";
}

outMsg.AddPart("Body", bodyPart, true);

return outMsg;
}
Expand All @@ -72,23 +75,23 @@ private string GetFileName(IBaseMessagePart part)
{
if (!string.IsNullOrEmpty(part.ContentType))
{
extension = MimeUtils.GetFileExtensionForMimeType(part.ContentType);
extension = MimeUtils.GetFileExtensionForMimeType(part.ContentType);
}
else if (!string.IsNullOrEmpty(DefaultZipEntryFileExtension))
{
extension = string.Concat(".",DefaultZipEntryFileExtension);
extension = string.Concat(".", DefaultZipEntryFileExtension);
}

fileName = Guid.NewGuid() + extension;

fileName = Guid.NewGuid() + extension;
}

return fileName;
}

public void Load(IPropertyBag propertyBag, int errorLog)
{
DefaultZipEntryFileExtension = PropertyBagHelper.ToStringOrDefault(PropertyBagHelper.ReadPropertyBag<string>(propertyBag, DefaultZipEntryFileExtensionPropertyName,DefaultZipEntryFileExtension),string.Empty);
DefaultZipEntryFileExtension = PropertyBagHelper.ReadPropertyBag(propertyBag, DefaultZipEntryFileExtensionPropertyName, DefaultZipEntryFileExtension);
}

public void Save(IPropertyBag propertyBag, bool clearDirty, bool saveAllProperties)
Expand Down
2 changes: 1 addition & 1 deletion Src/CompressMessage/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("0.9.1.0")]
[assembly: AssemblyInformationalVersion("1.0.0.0")]
63 changes: 43 additions & 20 deletions Src/CompressMessage/Utils/CompressionUtil.cs
Original file line number Diff line number Diff line change
@@ -1,39 +1,62 @@
using System;
using Microsoft.BizTalk.Streaming;
using System;
using System.IO;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
using Microsoft.BizTalk.Message.Interop;
using System.IO.Compression;

namespace BizTalkComponents.PipelineComponents.CompressMessage.Utils
{
public class CompressionUtil
public class CompressionUtil : IDisposable
{
private readonly ZipOutputStream _zipStream;
private readonly MemoryStream _outputMemStream;
private readonly ZipArchive _zipArchive;
private readonly Stream _outputStream;

public CompressionUtil()
{
_outputMemStream = new MemoryStream();
_zipStream = new ZipOutputStream(_outputMemStream);
_zipStream.SetLevel(3);
_outputStream = new VirtualStream();
_zipArchive = new ZipArchive(_outputStream, ZipArchiveMode.Create, true);
}

public void AddMessage(Stream msg, string filename)
public void AddMessage(Stream msg, string filename, CompressionLevel compressionLevel = CompressionLevel.Optimal)
{
var entry = new ZipEntry(filename) {DateTime = DateTime.Now};
var entry = _zipArchive.CreateEntry(filename, compressionLevel);

using (var entryStream = entry.Open())
{
msg.CopyTo(entryStream);
}

_zipStream.PutNextEntry(entry);
StreamUtils.Copy(msg, _zipStream, new byte[4096]);
_zipStream.CloseEntry();
}

public MemoryStream GetZip()
public Stream GetZip()
{
_zipStream.IsStreamOwner = false;
_zipStream.Close();
_outputMemStream.Position = 0;
Dispose();
_outputStream.Position = 0;

return _outputStream;
}

return _outputMemStream;
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls

protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
_zipArchive.Dispose();
}

disposedValue = true;
}
}

// This code added to correctly implement the disposable pattern.
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
}
#endregion
}
}
3 changes: 1 addition & 2 deletions Src/CompressMessage/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BizTalkComponents.Utils" version="2.2.1.0" targetFramework="net45" developmentDependency="true"/>
<package id="SharpZipLib" version="0.86.0" targetFramework="net45"/>
<package id="BizTalkComponents.Utils" version="2.2.1.0" targetFramework="net45" developmentDependency="true" />
</packages>
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.BizTalk.Pipeline, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.IO.Compression" />
<Reference Include="Winterdom.BizTalk.PipelineTesting, Version=1.1.0.0, Culture=neutral, PublicKeyToken=8671935c07812470, processorArchitecture=MSIL">
<HintPath>..\..\packages\Winterdom.BizTalk.PipelineTesting.1.2.2.0\lib\net45\Winterdom.BizTalk.PipelineTesting.dll</HintPath>
<Private>True</Private>
Expand Down
52 changes: 28 additions & 24 deletions Tests/UnitTests/CompressMessageTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Core;
using ICSharpCode.SharpZipLib.Zip;
using System.IO.Compression;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Winterdom.BizTalk.PipelineTesting;

Expand All @@ -28,13 +28,15 @@ public void TestCompressWithReceivedFilename()

var result = pipeline.Execute(msg);

ZipInputStream zipInputStream = new ZipInputStream(result.BodyPart.GetOriginalDataStream());
ZipEntry zipEntry = zipInputStream.GetNextEntry();
int i = 1;
while (zipEntry != null)
ZipArchive zipArchive = new ZipArchive(result.BodyPart.GetOriginalDataStream());
foreach (var zipEntry in zipArchive.Entries)
{
Assert.AreEqual(string.Format("invoice{0}.xml", i), zipEntry.Name);
zipEntry = zipInputStream.GetNextEntry();
using (var reader = new StreamReader(zipEntry.Open(), Encoding.Unicode))
{
Assert.AreEqual(string.Format("<testmessage{0}></testmessage{0}>", i), reader.ReadToEnd());
}
i++;
}
}
Expand All @@ -57,14 +59,18 @@ public void TestCompressWithContentType()

var result = pipeline.Execute(msg);

ZipInputStream zipInputStream = new ZipInputStream(result.BodyPart.GetOriginalDataStream());
ZipEntry zipEntry = zipInputStream.GetNextEntry();
while (zipEntry != null)
int i = 1;
ZipArchive zipArchive = new ZipArchive(result.BodyPart.GetOriginalDataStream());
foreach (var zipEntry in zipArchive.Entries)
{
Guid g;
Assert.IsTrue(Guid.TryParse(Path.GetFileNameWithoutExtension(zipEntry.Name), out g));
Assert.AreEqual(".xml", Path.GetExtension(zipEntry.Name));
zipEntry = zipInputStream.GetNextEntry();
using (var reader = new StreamReader(zipEntry.Open(), Encoding.Unicode))
{
Assert.AreEqual(string.Format("<testmessage{0}></testmessage{0}>", i), reader.ReadToEnd());
}
i++;
}
}

Expand All @@ -73,27 +79,25 @@ public void TestCompressSingleMessagePart()
{
var pipeline = PipelineFactory.CreateEmptySendPipeline();

var component = new CompressMessage {DefaultZipEntryFileExtension = "xml"};
var component = new CompressMessage { DefaultZipEntryFileExtension = "xml" };

string messageContent = "<testmessage1></testmessage1>";
var msg = MessageHelper.CreateFromString(messageContent);

var msg = MessageHelper.CreateFromString("<testmessage1></testmessage1>");

pipeline.AddComponent(component, PipelineStage.Encode);

var result = pipeline.Execute(msg);

ZipInputStream zipInputStream = new ZipInputStream(result.BodyPart.GetOriginalDataStream());
ZipEntry zipEntry = zipInputStream.GetNextEntry();
int i = 0;
while (zipEntry != null)
ZipArchive zipArchive = new ZipArchive(result.BodyPart.GetOriginalDataStream());
Assert.AreEqual(1, zipArchive.Entries.Count);
ZipArchiveEntry zipEntry = zipArchive.Entries[0];
Guid g;
Assert.IsTrue(Guid.TryParse(Path.GetFileNameWithoutExtension(zipEntry.Name), out g));
Assert.AreEqual(".xml", Path.GetExtension(zipEntry.Name));
using (var reader = new StreamReader(zipEntry.Open(), Encoding.Unicode))
{
Guid g;
Assert.IsTrue(Guid.TryParse(Path.GetFileNameWithoutExtension(zipEntry.Name), out g));
Assert.AreEqual(".xml", Path.GetExtension(zipEntry.Name));
zipEntry = zipInputStream.GetNextEntry();
i++;
Assert.AreEqual(messageContent, reader.ReadToEnd());
}

Assert.AreEqual(1,i);
}

[TestMethod]
Expand Down
1 change: 0 additions & 1 deletion Tests/UnitTests/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
<package id="Winterdom.BizTalk.PipelineTesting" version="1.2.2.0" targetFramework="net45" />
</packages>

0 comments on commit 436a8e0

Please sign in to comment.