Author: tabish
Date: Wed Aug 25 20:12:31 2010
New Revision: 989335

URL: http://svn.apache.org/viewvc?rev=989335&view=rev
Log:
initial fix for: https://issues.apache.org/activemq/browse/AMQNET-276

Adds MessageTransformation abstract class to NMS util and implements for Stomp 
and ActiveMQ clients.


Added:
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs
   (with props)
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
   (with props)
    
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs
   (with props)
    
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs
   (with props)
Modified:
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Commands/ActiveMQMessage.cs
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageProducer.cs
    
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Commands/Message.cs
    
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Connection.cs
    
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/MessageProducer.cs
    activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp-test.csproj
    activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp.csproj
    activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IMessage.cs
    activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IObjectMessage.cs

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Commands/ActiveMQMessage.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Commands/ActiveMQMessage.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Commands/ActiveMQMessage.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Commands/ActiveMQMessage.cs
 Wed Aug 25 20:12:31 2010
@@ -182,6 +182,7 @@ namespace Apache.NMS.ActiveMQ.Commands
                public IDestination NMSDestination
                {
                        get { return Destination; }
+            set { Destination = value as ActiveMQDestination; }
                }
 
                private TimeSpan timeToLive = TimeSpan.FromMilliseconds(0);
@@ -277,6 +278,24 @@ namespace Apache.NMS.ActiveMQ.Commands
                public bool NMSRedelivered
                {
                        get { return (RedeliveryCounter > 0); }
+
+            set
+            {
+                if(value == true)
+                {
+                    if(this.RedeliveryCounter <= 0)
+                    {
+                        this.RedeliveryCounter = 1;
+                    }
+                }
+                else
+                {
+                    if(this.RedeliveryCounter > 0)
+                    {
+                        this.RedeliveryCounter = 0;
+                    }
+                }
+            }
                }
 
                /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
 Wed Aug 25 20:12:31 2010
@@ -71,6 +71,7 @@ namespace Apache.NMS.ActiveMQ
         private ICompressionPolicy compressionPolicy = new CompressionPolicy();
         private IdGenerator clientIdGenerator;
         private volatile CountDownLatch 
transportInterruptionProcessingComplete;
+        private MessageTransformation messageTransformation = null;
 
         public Connection(Uri connectionUri, ITransport transport, IdGenerator 
clientIdGenerator)
         {
@@ -89,6 +90,8 @@ namespace Apache.NMS.ActiveMQ
             this.info = new ConnectionInfo();
             this.info.ConnectionId = id;
             this.info.FaultTolerant = transport.IsFaultTolerant;
+
+            this.messageTransformation = new 
ActiveMQMessageTransformation(this);
         }
 
         ~Connection()
@@ -351,6 +354,11 @@ namespace Apache.NMS.ActiveMQ
             set { this.compressionPolicy = value; }
         }
 
+        internal MessageTransformation MessageTransformation
+        {
+            get { return this.messageTransformation; }
+        }
+
         #endregion
 
         /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageProducer.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageProducer.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageProducer.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/MessageProducer.cs
 Wed Aug 25 20:12:31 2010
@@ -43,6 +43,8 @@ namespace Apache.NMS.ActiveMQ
         private bool disableMessageTimestamp = false;
         protected bool disposed = false;
 
+        private MessageTransformation messageTransformation;
+
         public MessageProducer(Session session, ProducerId id, 
ActiveMQDestination destination, TimeSpan requestTimeout)
         {
             this.session = session;            
@@ -52,6 +54,8 @@ namespace Apache.NMS.ActiveMQ
             this.info.ProducerId = id;
             this.info.Destination = destination;
             this.info.WindowSize = session.Connection.ProducerWindowSize;
+
+            this.messageTransformation = 
session.Connection.MessageTransformation;
             
             // If the destination contained a URI query, then use it to set 
public
             // properties on the ProducerInfo
@@ -198,7 +202,7 @@ namespace Apache.NMS.ActiveMQ
                 throw new NotSupportedException("This producer can only send 
messages to: " + this.info.Destination.PhysicalName);
             }
 
-            ActiveMQMessage activeMessage = (ActiveMQMessage) message;
+            ActiveMQMessage activeMessage = 
this.messageTransformation.TransformMessage<ActiveMQMessage>(message);
 
             activeMessage.ProducerId = info.ProducerId;
             activeMessage.Destination = dest;

Added: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs?rev=989335&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs
 Wed Aug 25 20:12:31 2010
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Apache.NMS.Util;
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.Util
+{
+    public class ActiveMQMessageTransformation : MessageTransformation
+    {
+        private Connection connection;
+
+        public ActiveMQMessageTransformation(Connection connection) : base()
+        {
+            this.connection = connection;
+        }
+
+        #region Creation Methods and Conversion Support Methods
+
+        protected override IMessage DoCreateMessage()
+        {
+            ActiveMQMessage message = new ActiveMQMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IBytesMessage DoCreateBytesMessage()
+        {
+            ActiveMQBytesMessage message = new ActiveMQBytesMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override ITextMessage DoCreateTextMessage()
+        {
+            ActiveMQTextMessage message = new ActiveMQTextMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IStreamMessage DoCreateStreamMessage()
+        {
+            ActiveMQStreamMessage message = new ActiveMQStreamMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IMapMessage DoCreateMapMessage()
+        {
+            ActiveMQMapMessage message = new ActiveMQMapMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IObjectMessage DoCreateObjectMessage()
+        {
+            ActiveMQObjectMessage message = new ActiveMQObjectMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IDestination DoTransformDestination(IDestination 
destination)
+        {
+            return ActiveMQDestination.Transform(destination);
+        }
+
+        protected override void DoPostProcessMessage(IMessage message)
+        {
+        }
+
+        #endregion
+    }
+}
+

Propchange: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/ActiveMQMessageTransformation.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs?rev=989335&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
 Wed Aug 25 20:12:31 2010
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+using Apache.NMS.Util;
+using Apache.NMS.ActiveMQ.Util;
+using Apache.NMS.ActiveMQ.Commands;
+
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+    [TestFixture]
+    public class ActiveMQMessageTransformationTest
+    {
+        MessageTransformation transformer;
+
+        [SetUp]
+        public void SetUp()
+        {
+            this.transformer = new ActiveMQMessageTransformation(null);
+        }
+
+        [Test]
+        public void TestMessageTransformation()
+        {
+            ActiveMQMessage message = new ActiveMQMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+
+        [Test]
+        public void TestTextMessageTransformation()
+        {
+            ActiveMQTextMessage message = new ActiveMQTextMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+
+        [Test]
+        public void TestBytesMessageTransformation()
+        {
+            ActiveMQBytesMessage message = new ActiveMQBytesMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+
+        [Test]
+        public void TestStreamMessageTransformation()
+        {
+            ActiveMQStreamMessage message = new ActiveMQStreamMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+
+        [Test]
+        public void TestObjectMessageTransformation()
+        {
+            ActiveMQObjectMessage message = new ActiveMQObjectMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+
+        [Test]
+        public void TestMapMessageTransformation()
+        {
+            ActiveMQMapMessage message = new ActiveMQMapMessage();
+
+            Assert.AreSame(message, 
transformer.TransformMessage<ActiveMQMessage>(message));
+        }
+    }
+}
+

Propchange: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Commands/Message.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Commands/Message.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Commands/Message.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Commands/Message.cs
 Wed Aug 25 20:12:31 2010
@@ -176,6 +176,7 @@ namespace Apache.NMS.Stomp.Commands
         public IDestination NMSDestination
         {
             get { return Destination; }
+            set { this.Destination = value as Destination; }
         }
 
         private TimeSpan timeToLive = TimeSpan.FromMilliseconds(0);
@@ -286,6 +287,24 @@ namespace Apache.NMS.Stomp.Commands
         public bool NMSRedelivered
         {
             get { return (RedeliveryCounter > 0); }
+
+            set
+            {
+                if(value == true)
+                {
+                    if(this.RedeliveryCounter <= 0)
+                    {
+                        this.RedeliveryCounter = 1;
+                    }
+                }
+                else
+                {
+                    if(this.RedeliveryCounter > 0)
+                    {
+                        this.RedeliveryCounter = 0;
+                    }
+                }
+            }
         }
 
         /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Connection.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Connection.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Connection.cs 
(original)
+++ 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Connection.cs 
Wed Aug 25 20:12:31 2010
@@ -64,6 +64,7 @@ namespace Apache.NMS.Stomp
         private bool disposed = false;
         private IdGenerator clientIdGenerator;
         private CountDownLatch transportInterruptionProcessingComplete;
+        private MessageTransformation messageTransformation;
 
         public Connection(Uri connectionUri, ITransport transport, IdGenerator 
clientIdGenerator)
         {
@@ -81,6 +82,8 @@ namespace Apache.NMS.Stomp
 
             this.info = new ConnectionInfo();
             this.info.ConnectionId = id;
+
+            this.messageTransformation = new StompMessageTransformation(this);
         }
 
         ~Connection()
@@ -272,6 +275,11 @@ namespace Apache.NMS.Stomp
             set { this.prefetchPolicy = value; }
         }
 
+        internal MessageTransformation MessageTransformation
+        {
+            get { return this.messageTransformation; }
+        }
+
         #endregion
 
         /// <summary>

Modified: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/MessageProducer.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/MessageProducer.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/MessageProducer.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/MessageProducer.cs
 Wed Aug 25 20:12:31 2010
@@ -42,11 +42,14 @@ namespace Apache.NMS.Stomp
         private bool disableMessageTimestamp = false;
         protected bool disposed = false;
 
+        private MessageTransformation messageTransformation;
+
         public MessageProducer(Session session, ProducerInfo info)
         {
             this.session = session;
             this.info = info;
             this.RequestTimeout = session.RequestTimeout;
+            this.messageTransformation = 
session.Connection.MessageTransformation;
         }
 
         ~MessageProducer()
@@ -165,7 +168,7 @@ namespace Apache.NMS.Stomp
                 throw new NotSupportedException("This producer can only send 
messages to: " + this.info.Destination.PhysicalName);
             }
 
-            Message stompMessage = (Message) message;
+            Message stompMessage = 
this.messageTransformation.TransformMessage<Message>(message);
 
             stompMessage.ProducerId = info.ProducerId;
             stompMessage.FromDestination = dest;

Added: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs?rev=989335&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs
 Wed Aug 25 20:12:31 2010
@@ -0,0 +1,87 @@
+// /*
+//  * Licensed to the Apache Software Foundation (ASF) under one or more
+//  * contributor license agreements.  See the NOTICE file distributed with
+//  * this work for additional information regarding copyright ownership.
+//  * The ASF licenses this file to You under the Apache License, Version 2.0
+//  * (the "License"); you may not use this file except in compliance with
+//  * the License.  You may obtain a copy of the License at
+//  *
+//  *     http://www.apache.org/licenses/LICENSE-2.0
+//  *
+//  * Unless required by applicable law or agreed to in writing, software
+//  * distributed under the License is distributed on an "AS IS" BASIS,
+//  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  * See the License for the specific language governing permissions and
+//  * limitations under the License.
+//  */
+// 
+using System;
+using Apache.NMS.Util;
+using Apache.NMS.Stomp.Commands;
+
+namespace Apache.NMS.Stomp
+{
+    public class StompMessageTransformation : MessageTransformation
+    {
+        private Connection connection;
+
+        public StompMessageTransformation(Connection connection) : base()
+        {
+            this.connection = connection;
+        }
+
+        #region Creation Methods and Conversion Support Methods
+
+        protected override IMessage DoCreateMessage()
+        {
+            Message message = new Message();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IBytesMessage DoCreateBytesMessage()
+        {
+            BytesMessage message = new BytesMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override ITextMessage DoCreateTextMessage()
+        {
+            TextMessage message = new TextMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IStreamMessage DoCreateStreamMessage()
+        {
+            StreamMessage message = new StreamMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IMapMessage DoCreateMapMessage()
+        {
+            MapMessage message = new MapMessage();
+            message.Connection = this.connection;
+            return message;
+        }
+
+        protected override IObjectMessage DoCreateObjectMessage()
+        {
+            throw new NotSupportedException("Stomp Cannot process Object 
Messages");
+        }
+
+        protected override IDestination DoTransformDestination(IDestination 
destination)
+        {
+            return Destination.Transform(destination);
+        }
+
+        protected override void DoPostProcessMessage(IMessage message)
+        {
+        }
+
+        #endregion
+    }
+}
+

Propchange: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/src/main/csharp/Util/StompMessageTransformation.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp-test.csproj
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp-test.csproj?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp-test.csproj 
(original)
+++ activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp-test.csproj 
Wed Aug 25 20:12:31 2010
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"; ToolsVersion="3.5">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -55,27 +55,15 @@
     <NoWarn>3016</NoWarn>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="Apache.NMS.Test, Version=1.4.0.2021, Culture=neutral, 
PublicKeyToken=82756feee3957618, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.Test.dll</HintPath>
-    </Reference>
-    <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, 
PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\NUnit\net-2.0\nunit.framework.dll</HintPath>
-    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Xml" />
-    <Reference Include="Apache.NMS, Version=1.4.0.2013, Culture=neutral, 
PublicKeyToken=82756feee3957618">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>build\mono-2.0\debug\Apache.NMS.dll</HintPath>
-    </Reference>
-    <Reference Include="Apache.NMS.Stomp, Version=1.4.0.2015, Culture=neutral, 
PublicKeyToken=82756feee3957618">
+    <Reference Include="Apache.NMS.Test, Version=1.4.0.2025, Culture=neutral, 
PublicKeyToken=82756feee3957618">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>build\mono-2.0\debug\Apache.NMS.Stomp.dll</HintPath>
+      <HintPath>lib\Apache.NMS\mono-2.0\Apache.NMS.Test.dll</HintPath>
     </Reference>
-    <Reference Include="nunit.framework.extensions, Version=2.4.8.0, 
Culture=neutral, PublicKeyToken=96d09a1eb7f44a77">
+    <Reference Include="nunit.framework, Version=2.5.5.10112, Culture=neutral, 
PublicKeyToken=96d09a1eb7f44a77">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>lib\NUnit\mono-2.0\nunit.framework.extensions.dll</HintPath>
+      <HintPath>lib\NUnit\mono-2.0\nunit.framework.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>

Modified: activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp.csproj
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp.csproj?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp.csproj 
(original)
+++ activemq/activemq-dotnet/Apache.NMS.Stomp/trunk/vs2008-stomp.csproj Wed Aug 
25 20:12:31 2010
@@ -55,7 +55,7 @@
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Xml" />
-    <Reference Include="Apache.NMS, Version=1.4.0.2021, Culture=neutral, 
PublicKeyToken=82756feee3957618">
+    <Reference Include="Apache.NMS, Version=1.4.0.2049, Culture=neutral, 
PublicKeyToken=82756feee3957618">
       <SpecificVersion>False</SpecificVersion>
       <HintPath>lib\Apache.NMS\mono-2.0\Apache.NMS.dll</HintPath>
     </Reference>
@@ -161,6 +161,7 @@
     <Compile Include="src\main\csharp\State\SynchronizedObjects.cs" />
     <Compile Include="src\main\csharp\IOException.cs" />
     <Compile Include="src\main\csharp\Util\ThreadUtil.cs" />
+    <Compile Include="src\main\csharp\Util\StompMessageTransformation.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="keyfile\NMSKey.snk" />

Modified: activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IMessage.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IMessage.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IMessage.cs 
(original)
+++ activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IMessage.cs Wed 
Aug 25 20:12:31 2010
@@ -58,7 +58,7 @@ namespace Apache.NMS
                /// <summary>
                /// The destination of the message.  This property is set by 
the IMessageProducer.
                /// </summary>
-               IDestination NMSDestination { get; }
+               IDestination NMSDestination { get; set; }
 
                /// <summary>
                /// The amount of time for which this message is valid.  Zero 
if this message does not expire.
@@ -68,7 +68,7 @@ namespace Apache.NMS
                /// <summary>
                /// The message ID which is set by the provider.
                /// </summary>
-               string NMSMessageId { get; }
+               string NMSMessageId { get; set; }
 
                /// <summary>
                /// Whether or not this message is persistent.
@@ -83,7 +83,7 @@ namespace Apache.NMS
                /// <summary>
                /// Returns true if this message has been redelivered to this 
or another consumer before being acknowledged successfully.
                /// </summary>
-               bool NMSRedelivered { get; }
+               bool NMSRedelivered { get; set; }
 
                /// <summary>
                /// The destination that the consumer of this message should 
send replies to
@@ -94,7 +94,7 @@ namespace Apache.NMS
                /// The timestamp of when the message was pubished in UTC time. 
 If the publisher disables setting
                /// the timestamp on the message, the time will be set to the 
start of the UNIX epoc (1970-01-01 00:00:00).
                /// </summary>
-               DateTime NMSTimestamp { get; }
+               DateTime NMSTimestamp { get; set; }
 
                /// <summary>
                /// The type name of this message.

Modified: 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IObjectMessage.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IObjectMessage.cs?rev=989335&r1=989334&r2=989335&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IObjectMessage.cs 
(original)
+++ activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/IObjectMessage.cs 
Wed Aug 25 20:12:31 2010
@@ -21,6 +21,6 @@ namespace Apache.NMS
        /// </summary>
        public interface IObjectMessage : IMessage
        {
-               object Body { get; }
+               object Body { get; set; }
        }
 }

Added: 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs?rev=989335&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs
 Wed Aug 25 20:12:31 2010
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+using System;
+
+namespace Apache.NMS.Util
+{
+    /// <summary>
+    /// Base Utility class for conversion between IMessage type objects for 
different
+    /// NMS providers.
+    /// </summary>
+       public abstract class MessageTransformation
+       {
+               public MessageTransformation()
+               {
+               }
+
+        public T TransformMessage<T>(IMessage message)
+        {
+            if(message is T)
+            {
+                return (T) message;
+            }
+            else
+            {
+                IMessage result = null;
+    
+                if(message is IBytesMessage)
+                {
+                    IBytesMessage bytesMsg = message as IBytesMessage;
+                    bytesMsg.Reset();
+                    IBytesMessage msg = DoCreateBytesMessage();
+
+                    try
+                    {
+                        for(;;)
+                        {
+                            // Reads a byte from the message stream until the 
stream is empty
+                            msg.WriteByte(bytesMsg.ReadByte());
+                        }
+                    }
+                    catch
+                    {
+                    }
+
+                    result = msg;
+                }
+                else if(message is IMapMessage)
+                {
+                    IMapMessage mapMsg = message as IMapMessage;
+                    IMapMessage msg = DoCreateMapMessage();
+
+                    foreach(string key in mapMsg.Body.Keys)
+                    {
+                        msg.Body[key] = mapMsg.Body[key];
+                    }
+
+                    result = msg;
+                }
+                else if(message is IObjectMessage)
+                {
+                    IObjectMessage objMsg = message as IObjectMessage;
+                    IObjectMessage msg = DoCreateObjectMessage();
+                    msg.Body = objMsg.Body;
+
+                    result = msg;
+                }
+                else if(message is IStreamMessage)
+                {
+                    IStreamMessage streamMessage = message as IStreamMessage;
+                    streamMessage.Reset();
+                    IStreamMessage msg = DoCreateStreamMessage();
+
+                    object obj = null;
+
+                    try
+                    {
+                        while((obj = streamMessage.ReadObject()) != null)
+                        {
+                            msg.WriteObject(obj);
+                        }
+                    }
+                    catch
+                    {
+                    }
+
+                    result = msg;
+                }
+                else if(message is ITextMessage)
+                {
+                    ITextMessage textMsg = message as ITextMessage;
+                    ITextMessage msg = DoCreateTextMessage();
+                    msg.Text = textMsg.Text;
+                    result = msg;
+                }
+                else
+                {
+                    result = DoCreateMessage();
+                }
+
+                CopyProperties(message, result);
+
+                // Let the subclass have a chance to do any last minute 
configurations
+                // on the newly converted message.
+                DoPostProcessMessage(result);
+
+                return (T) result;
+            }
+        }
+
+        /**
+         * Copies the standard JMS and user defined properties from the givem
+         * message to the specified message
+         *
+         * @param fromMessage the message to take the properties from
+         * @param toMessage the message to add the properties to
+         * @throws JMSException
+         */
+        public virtual void CopyProperties(IMessage fromMessage, IMessage 
toMessage)
+        {
+            toMessage.NMSMessageId = fromMessage.NMSMessageId;
+            toMessage.NMSCorrelationID = fromMessage.NMSCorrelationID;
+            toMessage.NMSReplyTo = 
DoTransformDestination(fromMessage.NMSReplyTo);
+            toMessage.NMSDestination = 
DoTransformDestination(fromMessage.NMSDestination);
+            toMessage.NMSDeliveryMode = fromMessage.NMSDeliveryMode;
+            toMessage.NMSRedelivered = fromMessage.NMSRedelivered;
+            toMessage.NMSType = fromMessage.NMSType;
+            toMessage.NMSPriority = fromMessage.NMSPriority;
+            toMessage.NMSTimestamp = fromMessage.NMSTimestamp;
+            toMessage.NMSTimeToLive = fromMessage.NMSTimeToLive;
+
+            foreach(string key in fromMessage.Properties.Keys)
+            {
+                toMessage.Properties[key] = fromMessage.Properties[key];
+            }
+        }
+
+        #region Creation Methods and Conversion Support Methods
+
+        protected abstract IMessage DoCreateMessage();
+        protected abstract IBytesMessage DoCreateBytesMessage();
+        protected abstract ITextMessage DoCreateTextMessage();
+        protected abstract IStreamMessage DoCreateStreamMessage();
+        protected abstract IMapMessage DoCreateMapMessage();
+        protected abstract IObjectMessage DoCreateObjectMessage();
+
+        protected abstract IDestination DoTransformDestination(IDestination 
destination);
+        protected abstract void DoPostProcessMessage(IMessage message);
+
+        #endregion
+
+       }
+}
+

Propchange: 
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/MessageTransformation.cs
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to