Added: 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionFactory.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionFactory.cs?rev=1723221&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionFactory.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionFactory.cs
 Wed Jan  6 02:19:56 2016
@@ -0,0 +1,1502 @@
+/*
+ * 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 System.Collections;
+using System.Collections.Specialized;
+using Apache.NMS.XMS.Util;
+using Apache.NMS.Policies;
+using Apache.NMS.Util;
+using IBM.XMS;
+
+namespace Apache.NMS.XMS
+{
+       /// <summary>
+       /// A Factory that can establish NMS connections to IBM MQ.
+       /// </summary>
+       /// <remarks>
+       /// XMS connection factories can either be created from definitions
+       /// administered in a repository ("administered object"), or created
+       /// from an <c>XMSFactoryFactory</c>.
+       ///
+       /// Addressable repositories for administered objects are:
+       /// - file system context
+       ///   (URL format: "file://Path").
+       /// - LDAP context
+       ///   (URL format: "ldap:[Hostname][:Port]["/"[DistinguishedName]]").
+       /// - WSS context:
+       ///   (URL format: "http://Url";, "cosnaming://Url" or "wsvc://Url").
+       ///
+       /// A non-administered object is instanciated for a specific protocol:
+       /// - WebSphere Application Server Service Integration Bus
+       ///   (protocol prefix: <c>"wpm:"</c>; XMS key: <c>XMSC.CT_WPM</c>).
+       /// - IBM Integration Bus using WebSphere MQ Real-Time Transport
+       ///   (protocol prefix: <c>"rtt:"</c>; XMS key: <c>XMSC.CT_RTT</c>).
+       /// - WebSphere MQ queue manager
+       ///   (protocol prefix: <c>"wmq:"</c>; XMS key: <c>XMSC.CT_WMQ</c>).
+       /// </remarks>
+       public class ConnectionFactory : Apache.NMS.IConnectionFactory
+       {
+               public IBM.XMS.IConnectionFactory xmsConnectionFactory = null;
+
+               private Uri brokerUri = null;
+               private IRedeliveryPolicy redeliveryPolicy = new 
RedeliveryPolicy();
+
+               #region Constructors
+
+               /// <summary>
+               /// Constructs a <c>ConnectionFactory</c> object using default 
values.
+               /// </summary>
+               public ConnectionFactory()
+                       : this(new Uri("xms:wmq:"))
+               {
+               }
+
+               /// <summary>
+               /// Constructs a <c>ConnectionFactory</c> object.
+               /// </summary>
+               /// <param name="brokerUri">Factory URI.</param>
+               public ConnectionFactory(Uri brokerUri)
+               {
+                       try
+                       {
+                               // BrokerUri will construct the 
xmsConnectionFactory
+                               this.BrokerUri = brokerUri;
+                       }
+                       catch(Exception ex)
+                       {
+                               Apache.NMS.Tracer.DebugFormat(
+                                       "Exception instantiating 
IBM.XMS.ConnectionFactory: {0}",
+                                       ex.Message);
+                               ExceptionUtil.WrapAndThrowNMSException(ex);
+                       }
+                       // In case WrapAndThrowNMSException masks the exception
+                       if(this.xmsConnectionFactory == null)
+                       {
+                               throw new Apache.NMS.NMSException(
+                                       "Error instantiating XMS connection 
factory object.");
+                       }
+               }
+
+               /// <summary>
+               /// Constructs the internal <c>ConnectionFactory</c> object 
from the
+               /// parameters specified in the input URI.
+               /// </summary>
+               /// <param name="factoryUri">Factory URI.</param>
+               /// <returns>URI stripped out from overridable property values.
+               /// </returns>
+               private Uri CreateConnectionFactoryFromURI(Uri factoryUri)
+               {
+                       try
+                       {
+                               // Remove "xms:" scheme prefix
+                               string originalString = 
factoryUri.OriginalString;
+                               factoryUri = new Uri(originalString.Substring(
+                                       originalString.IndexOf(":") + 1));
+
+                               // Parse URI properties
+                               StringDictionary properties = 
URISupport.ParseQuery(
+                                       factoryUri.Query);
+
+                               // The URI scheme specifies either the 
repository of
+                               // administered objects where the 
ConnectionFactory object
+                               // is defined, or the target connection type for
+                               // non-administered objects.
+                               switch(factoryUri.Scheme.ToLower())
+                               {
+                               case "rtt":
+                               case "wmq":
+                               case "wpm":
+                                       CreateNonAdministeredConnectionFactory(
+                                               factoryUri, properties);
+                                       break;
+                               case "http":
+                               case "ldap":
+                               case "cosnaming":
+                               case "wsvc":
+                               default:
+                                       CreateAdministeredConnectionFactory(
+                                               factoryUri, properties);
+                                       break;
+                               }
+
+                               // Configure the instanciated connection factory
+                               ConfigureConnectionFactory(factoryUri, 
properties);
+
+                               return new Uri("xms:" + factoryUri.Scheme);
+                       }
+                       catch(Exception ex)
+                       {
+                               ExceptionUtil.WrapAndThrowNMSException(ex);
+                               return null;
+                       }
+               }
+
+               /// <summary>
+               /// Creates a connection factory from the object definition 
retrieved
+               /// from a repository of administered objects.
+               /// </summary>
+               /// <param name="factoryUri">Factory URI.</param>
+               /// <param name="properties">URI properties.</param>
+               private void CreateAdministeredConnectionFactory(
+                       Uri factoryUri, StringDictionary properties)
+               {
+                       // The initial context URL is the non-query part of the 
factory URI
+                       string icUrl = factoryUri.OriginalString.Substring(0,
+                               factoryUri.OriginalString.IndexOf('?'));
+
+                       // Extract other InitialContext property values from URI
+                       string icPrefix = "ic.";
+                       StringDictionary icProperties = 
URISupport.ExtractProperties(
+                               properties, icPrefix);
+
+                       // Initialize environment Hashtable
+                       Hashtable environment = new Hashtable();
+                       environment[XMSC.IC_URL] = icUrl;
+                       foreach(DictionaryEntry de in icProperties)
+                       {
+                               string key = 
((string)de.Key).Substring(icPrefix.Length);
+                               //TODO: convert "environment." attribute types.
+                               environment[key] = de.Value;
+                       }
+
+                       // Create an InitialContext
+                       InitialContext ic = new InitialContext(environment);
+
+                       // Extract administered object name
+                       string objectNameKey = "object.Name";
+                       if(!properties.ContainsKey(objectNameKey))
+                       {
+                               throw new NMSException(string.Format(
+                                       "URI attribute {0} must be specified.", 
objectNameKey));
+                       }
+            string objectName = properties[objectNameKey];
+                       properties.Remove(objectNameKey);
+
+                       // Lookup for object
+                       this.xmsConnectionFactory =
+                               
(IBM.XMS.IConnectionFactory)ic.Lookup(objectName);
+               }
+
+               /// <summary>
+               /// Creates a non-administered connection factory.
+               /// </summary>
+               /// <param name="factoryUri">Factory URI.</param>
+               /// <param name="properties">URI properties.</param>
+               private void CreateNonAdministeredConnectionFactory(
+                       Uri factoryUri, StringDictionary properties)
+               {
+                       // Get an XMS factory factory for the requested protocol
+                       IBM.XMS.XMSFactoryFactory xmsFactoryFactory = null;
+                       string scheme = factoryUri.Scheme.ToLower();
+                       switch(scheme)
+                       {
+                       case "rtt":
+                               xmsFactoryFactory =
+                                       
IBM.XMS.XMSFactoryFactory.GetInstance(IBM.XMS.XMSC.CT_RTT);
+
+                               if(!string.IsNullOrEmpty(factoryUri.Host))
+                               {
+                                       this.RTTHostName = factoryUri.Host;
+                               }
+
+                               if(factoryUri.Port != -1)
+                               {
+                                       this.RTTPort = factoryUri.Port;
+                               }
+                               break;
+
+                       case "wmq":
+                               xmsFactoryFactory =
+                                       
IBM.XMS.XMSFactoryFactory.GetInstance(IBM.XMS.XMSC.CT_WMQ);
+                               break;
+
+                       case "wpm":
+                               xmsFactoryFactory =
+                                       
IBM.XMS.XMSFactoryFactory.GetInstance(IBM.XMS.XMSC.CT_WPM);
+                               break;
+                       }
+
+                       // Create the connection factory
+                       this.xmsConnectionFactory =
+                               xmsFactoryFactory.CreateConnectionFactory();
+
+                       // For RTT and WMQ protocols, set the host name and 
port if
+                       // they are specified
+                       switch(scheme)
+                       {
+                               case "rtt":
+                                       
if(!string.IsNullOrEmpty(factoryUri.Host))
+                                       {
+                                               this.RTTHostName = 
factoryUri.Host;
+                                       }
+
+                                       if(factoryUri.Port != -1)
+                                       {
+                                               this.RTTPort = factoryUri.Port;
+                                       }
+                                       break;
+
+                               case "wmq":
+                                       
if(!string.IsNullOrEmpty(factoryUri.Host))
+                                       {
+                                               this.WMQHostName = 
factoryUri.Host;
+                                       }
+
+                                       if(factoryUri.Port != -1)
+                                       {
+                                               this.WMQPort = factoryUri.Port;
+                                       }
+                                       break;
+                       }
+               }
+
+               /// <summary>
+               /// Configures the connection factory.
+               /// </summary>
+               /// <param name="factoryUri">Factory URI.</param>
+               /// <param name="properties">URI properties.</param>
+               private void ConfigureConnectionFactory(
+                       Uri factoryUri, StringDictionary properties)
+               {
+                       if(properties != null && properties.Count > 0)
+                       {
+                               IntrospectionSupport.SetProperties(this, 
properties);
+                       }
+               }
+
+               #endregion
+
+               #region Redelivery Policy
+
+               /// <summary>
+               /// Get/or set the redelivery policy that new IConnection 
objects are
+               /// assigned upon creation.
+               /// </summary>
+               public IRedeliveryPolicy RedeliveryPolicy
+               {
+                       get { return this.redeliveryPolicy; }
+                       set
+                       {
+                               if(value != null)
+                               {
+                                       this.redeliveryPolicy = value;
+                               }
+                       }
+               }
+
+               #endregion
+
+               #region Properties (configure via URL parameters)
+
+               // 
http://www-01.ibm.com/support/knowledgecenter/?lang=en#!/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/props_connf.htm
+
+               #region Connection Factory Properties common to all protocols
+
+               /// <summary>
+               /// The client identifier for a connection.
+               /// </summary>
+               [UriAttribute("factory.ClientId")]
+               public string ClientId
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.CLIENT_ID); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.CLIENT_ID, value); }
+               }
+
+               /// <summary>
+               /// The type of messaging server to which an application 
connects.
+               /// </summary>
+               [UriAttribute("factory.XMSConnectionType")]
+               public Int32 XMSConnectionType
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.CONNECTION_TYPE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.CONNECTION_TYPE, value); }
+               }
+
+               /// <summary>
+               /// The type of messaging server to which an application 
connects.
+               /// </summary>
+               [UriAttribute("factory.ConnectionType")]
+               public ConnectionType ConnectionType
+               {
+                       get { return 
XMSConvert.ToConnectionType(this.XMSConnectionType); }
+                       set { this.XMSConnectionType = 
XMSConvert.ToXMSConnectionType(value); }
+               }
+
+               /// <summary>
+               /// A user identifier that can be used to authenticate the 
application
+               /// when it attempts to connect to a messaging server.
+               /// </summary>
+               [UriAttribute("factory.UserId")]
+               public string UserId
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.USERID); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.USERID, value); }
+               }
+
+               /// <summary>
+               /// A password that can be used to authenticate the application 
when it
+               /// attempts to connect to a messaging server.
+               /// </summary>
+               [UriAttribute("factory.XMSPassword")]
+               public byte[] XMSPassword
+               {
+                       get { return 
this.xmsConnectionFactory.GetBytesProperty(XMSC.PASSWORD); }
+                       set { 
this.xmsConnectionFactory.SetBytesProperty(XMSC.PASSWORD, value); }
+               }
+
+               /// <summary>
+               /// A password that can be used to authenticate the application 
when it
+               /// attempts to connect to a messaging server, specified as a 
string.
+               /// </summary>
+               [UriAttribute("factory.Password")]
+               public string Password
+               {
+                       get { return Convert.ToBase64String(this.XMSPassword); }
+                       set { this.XMSPassword = 
Convert.FromBase64String(value); }
+               }
+
+               /// <summary>
+               /// This property determines whether XMS informs an 
ExceptionListener
+               /// only when a connection is broken, or when any exception 
occurs
+               /// asynchronously to an XMS API call.
+               /// </summary>
+               /// <remarks>
+               /// This property applies to all Connections created from this
+               /// ConnectionFactory that have an ExceptionListener registered.
+               /// </remarks>
+               [UriAttribute("factory.XMSAsynchronousExceptions")]
+               public Int32 XMSAsynchronousExceptions
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.ASYNC_EXCEPTIONS); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.ASYNC_EXCEPTIONS, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether XMS informs an
+               /// <c>ExceptionListener</c> only when a connection is broken, 
or when
+               /// any exception occurs asynchronously to an XMS API call.
+               /// </summary>
+               [UriAttribute("factory.AsynchronousExceptions")]
+               public AsynchronousExceptions AsynchronousExceptions
+               {
+                       get { return 
XMSConvert.ToAsynchronousExceptions(this.XMSAsynchronousExceptions); }
+                       set { this.XMSAsynchronousExceptions = 
XMSConvert.ToXMSAsynchronousExceptions(value); }
+               }
+
+               #endregion
+
+               #region RTT-specific properties
+
+               /// <summary>
+               /// The communications protocol used for a real-time connection 
to a broker.
+               /// </summary>
+               [UriAttribute("rtt.XMSConnectionProtocol")]
+               public Int32 XMSConnectionProtocol
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.RTT_CONNECTION_PROTOCOL); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.RTT_CONNECTION_PROTOCOL, value); }
+               }
+
+               /// <summary>
+               /// The communications protocol used for a real-time connection 
to a broker.
+               /// </summary>
+               [UriAttribute("rtt.ConnectionProtocol")]
+               public RTTConnectionProtocol ConnectionProtocol
+               {
+                       get { return 
XMSConvert.ToRTTConnectionProtocol(this.XMSConnectionProtocol); }
+                       set { this.XMSConnectionProtocol = 
XMSConvert.ToXMSRTTConnectionProtocol(value); }
+               }
+
+               /// <summary>
+               /// The host name or IP address of the system on which a broker 
runs.
+               /// </summary>
+               [UriAttribute("rtt.HostName")]
+               public string RTTHostName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.RTT_HOST_NAME); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.RTT_HOST_NAME, value); }
+               }
+
+               /// <summary>
+               /// The number of the port on which a broker listens for 
incoming requests.
+               /// </summary>
+               [UriAttribute("rtt.Port")]
+               public Int32 RTTPort
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.RTT_PORT); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.RTT_PORT, value); }
+               }
+
+               /// <summary>
+               /// The host name or IP address of the local network interface 
to be
+               /// used for a real-time connection to a broker.
+               /// </summary>
+               [UriAttribute("rtt.LocalAddress")]
+               public string RTTLocalAddress
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.RTT_LOCAL_ADDRESS); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.RTT_LOCAL_ADDRESS, value); }
+               }
+
+               /// <summary>
+               /// The multicast setting for the connection factory.
+               /// </summary>
+               [UriAttribute("rtt.XMSMulticast")]
+               public Int32 XMSMulticast
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.RTT_MULTICAST); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.RTT_MULTICAST, value); }
+               }
+
+               /// <summary>
+               /// The multicast setting for a connection factory or 
destination.
+               /// </summary>
+               [UriAttribute("rtt.Multicast")]
+               public Multicast Multicast
+               {
+                       get { return XMSConvert.ToMulticast(this.XMSMulticast); 
}
+                       set { this.XMSMulticast = 
XMSConvert.ToXMSMulticast(value); }
+               }
+
+               /// <summary>
+               /// The time interval, in milliseconds, after which XMS .NET 
checks the
+               /// connection to a Real Time messaging server to detect any 
activity.
+               /// </summary>
+               [UriAttribute("rtt.BrokerPingInterval")]
+               public Int32 BrokerPingInterval
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.RTT_BROKER_PING_INTERVAL); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.RTT_BROKER_PING_INTERVAL, value); 
}
+               }
+
+               #endregion
+
+               #region WMQ-specific properties
+
+               /// <summary>
+               /// The host name or IP address of the system on which a queue 
manager
+               /// runs.
+               /// </summary>
+               [UriAttribute("wmq.HostName")]
+               public string WMQHostName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_HOST_NAME); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_HOST_NAME, value); }
+               }
+
+               /// <summary>
+               /// The number of the port on which a queue manager listens for
+               /// incoming requests.
+               /// </summary>
+               [UriAttribute("wmq.Port")]
+               public Int32 WMQPort
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_PORT); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_PORT, value); }
+               }
+
+               /// <summary>
+               /// For a connection to a queue manager, this property 
specifies the
+               /// local network interface to be used, or the local port or 
range of
+               /// local ports to be used, or both.
+               /// </summary>
+               [UriAttribute("wmq.LocalAddress")]
+               public string WMQLocalAddress
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_LOCAL_ADDRESS); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_LOCAL_ADDRESS, value); }
+               }
+
+               /// <summary>
+               /// The name of the queue manager to connect to.
+               /// </summary>
+               [UriAttribute("wmq.QueueManagerName")]
+               public string QueueManagerName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_QUEUE_MANAGER); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, value); }
+               }
+
+               /// <summary>
+               /// The version, release, modification level and fix pack of 
the queue
+               /// manager to which the application intends to connect.
+               /// </summary>
+               [UriAttribute("wmq.ProviderVersion")]
+               public string ProviderVersion
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_PROVIDER_VERSION); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_PROVIDER_VERSION, value); }
+               }
+
+               /// <summary>
+               /// The name of the channel to be used for a connection.
+               /// </summary>
+               [UriAttribute("wmq.ChannelName")]
+               public string ChannelName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_CHANNEL); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_CHANNEL, value); }
+               }
+
+               /// <summary>
+               /// A Uniform Resource Locator (URL) that identifies the name 
and
+               /// location of the file that contains the client channel 
definition
+               /// table and also specifies how the file can be accessed.
+               /// </summary>
+               [UriAttribute("wmq.ClientChannelDefinitionTableURL")]
+               public string ClientChannelDefinitionTableURL
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_CCDTURL); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_CCDTURL, value); }
+               }
+
+               /// <summary>
+               /// The mode by which an application connects to a queue 
manager.
+               /// </summary>
+               [UriAttribute("wmq.XMSConnectionMode")]
+               public Int32 XMSConnectionMode
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_CONNECTION_MODE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, value); }
+               }
+
+               /// <summary>
+               /// The mode by which an application connects to a queue 
manager,
+               /// specified as a string.
+               /// </summary>
+               [UriAttribute("wmq.ConnectionMode")]
+               public ConnectionMode ConnectionMode
+               {
+                       get { return 
XMSConvert.ToConnectionMode(this.XMSConnectionMode); }
+                       set { this.XMSConnectionMode = 
XMSConvert.ToXMSConnectionMode(value); }
+               }
+
+               /// <summary>
+               /// This property specifies the client reconnect options for new
+               /// connections created by this factory.
+               /// </summary>
+               [UriAttribute("wmq.ClientReconnectOptions")]
+               public string ClientReconnectOptions
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS); 
}
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, 
value); }
+               }
+
+               /// <summary>
+               /// This property specifies the duration of time, in seconds, 
that a
+               /// client connection attempts to reconnect.
+               /// </summary>
+               [UriAttribute("wmq.ClientReconnectTimeout")]
+               public string ClientReconnectTimeout
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT); 
}
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, 
value); }
+               }
+
+               /// <summary>
+               /// This property specifies the hosts to which the client 
attempts to
+               /// reconnect to after its connection are broken.
+               /// </summary>
+               [UriAttribute("wmq.ConnectionNameList")]
+               public string ConnectionNameList
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, 
value); }
+               }
+
+               /// <summary>
+               /// Whether calls to certain methods fail if the queue manager 
to which
+               /// the application is connected is in a quiescing state.
+               /// </summary>
+               [UriAttribute("wmq.XMSFailIfQuiesce")]
+               public Int32 XMSFailIfQuiesce
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_FAIL_IF_QUIESCE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_FAIL_IF_QUIESCE, value); }
+               }
+
+               /// <summary>
+               /// Whether calls to certain methods fail if the queue manager 
to which
+               /// the application is connected is in a quiescing state.
+               /// </summary>
+               [UriAttribute("wmq.FailIfQuiesce")]
+               public bool FailIfQuiesce
+               {
+                       get { return 
XMSConvert.ToFailIfQuiesce(this.XMSFailIfQuiesce); }
+                       set { this.XMSFailIfQuiesce = 
XMSConvert.ToXMSFailIfQuiesce(value); }
+               }
+
+               /// <summary>
+               /// The type of broker used by the application for a connection 
or for
+               /// the destination.
+               /// </summary>
+               [UriAttribute("wmq.XMSBrokerVersion")]
+               public Int32 XMSBrokerVersion
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_BROKER_VERSION); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_BROKER_VERSION, value); }
+               }
+
+               /// <summary>
+               /// The type of broker used by the application for a connection 
or for
+               /// the destination.
+               /// </summary>
+               [UriAttribute("wmq.BrokerVersion")]
+               public BrokerVersion BrokerVersion
+               {
+                       get { return 
XMSConvert.ToBrokerVersion(this.XMSBrokerVersion); }
+                       set { this.XMSBrokerVersion = 
XMSConvert.ToXMSBrokerVersion(value); }
+               }
+
+               /// <summary>
+               /// The name of the queue manager to which a broker is 
connected.
+               /// </summary>
+               [UriAttribute("wmq.BrokerQueueManagerName")]
+               public string BrokerQueueManagerName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_BROKER_QMGR); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_BROKER_QMGR, value); }
+               }
+
+               /// <summary>
+               /// The name of the control queue used by a broker.
+               /// </summary>
+               [UriAttribute("wmq.BrokerControlQueueName")]
+               public string BrokerControlQueueName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_BROKER_CONTROLQ); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_BROKER_CONTROLQ, value); }
+               }
+
+               /// <summary>
+               /// The name of the queue monitored by a broker where 
applications send
+               /// messages that they publish.
+               /// </summary>
+               [UriAttribute("wmq.BrokerPublishQueueName")]
+               public string BrokerPublishQueueName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_BROKER_PUBQ); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_BROKER_PUBQ, value); }
+               }
+
+               /// <summary>
+               /// The name of the subscriber queue for a nondurable message 
consumer.
+               /// </summary>
+               [UriAttribute("wmq.BrokerSubscriberQueueName")]
+               public string BrokerSubscriberQueueName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_BROKER_SUBQ); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_BROKER_SUBQ, value); }
+               }
+
+               /// <summary>
+               /// Determines whether message selection is done by the XMS 
client or
+               /// by the broker.
+               /// </summary>
+               [UriAttribute("wmq.XMSMessageSelection")]
+               public Int32 XMSMessageSelection
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_MESSAGE_SELECTION); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_MESSAGE_SELECTION, value); }
+               }
+
+               /// <summary>
+               /// Determines whether message selection is done by the XMS 
client or
+               /// by the broker.
+               /// </summary>
+               [UriAttribute("wmq.MessageSelection")]
+               public MessageSelection MessageSelection
+               {
+                       get { return 
XMSConvert.ToMessageSelection(this.XMSMessageSelection); }
+                       set { this.XMSMessageSelection = 
XMSConvert.ToXMSMessageSelection(value); }
+               }
+
+               /// <summary>
+               /// The maximum number of messages to be retrieved from a queue 
in one
+               /// batch when using asynchronous message delivery.
+               /// </summary>
+               [UriAttribute("wmq.MessageBatchSize")]
+               public Int32 MessageBatchSize
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_MSG_BATCH_SIZE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_MSG_BATCH_SIZE, value); }
+               }
+
+               /// <summary>
+               /// If each message listener within a session has no suitable 
message
+               /// on its queue, this value is the maximum interval, in 
milliseconds,
+               /// that elapses before each message listener tries again to 
get a
+               /// message from its queue.
+               /// </summary>
+               [UriAttribute("wmq.PollingInterval")]
+               public Int32 PollingInterval
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_POLLING_INTERVAL); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_POLLING_INTERVAL, value); }
+               }
+
+               /// <summary>
+               /// The number of messages published by a publisher before the 
XMS
+               /// client requests an acknowledgement from the broker.
+               /// </summary>
+               [UriAttribute("wmq.PublishAcknowledgementInterval")]
+               public Int32 PublishAcknowledgementInterval
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_PUB_ACK_INTERVAL); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_PUB_ACK_INTERVAL, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether message producers are 
allowed to
+               /// use asynchronous puts to send messages to this destination.
+               /// </summary>
+               [UriAttribute("wmq.XMSAsynchronousPutsAllowed")]
+               public Int32 XMSAsynchronousPutsAllowed
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_PUT_ASYNC_ALLOWED); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_PUT_ASYNC_ALLOWED, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether message producers are 
allowed to
+               /// use asynchronous puts to send messages to this destination.
+               /// </summary>
+               [UriAttribute("wmq.AsynchronousPutsAllowed")]
+               public AsynchronousPutsAllowed AsynchronousPutsAllowed
+               {
+                       get { return 
XMSConvert.ToAsynchronousPutsAllowed(this.XMSAsynchronousPutsAllowed); }
+                       set { this.XMSAsynchronousPutsAllowed = 
XMSConvert.ToXMSAsynchronousPutsAllowed(value); }
+               }
+
+               /// <summary>
+               /// The identifier (CCSID) of the coded character set, or code 
page,
+               /// in which fields of character data defined in the Message 
Queue
+               /// Interface (MQI) are exchanged between the XMS client and the
+               /// WebSphere MQ client.
+               /// </summary>
+               [UriAttribute("wmq.QueueManagerCCSID")]
+               public string QueueManagerCCSID
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_QMGR_CCSID); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_QMGR_CCSID, value); }
+               }
+
+               /// <summary>
+               /// Identifies a channel receive exit to be run.
+               /// </summary>
+               [UriAttribute("wmq.ReceiveExit")]
+               public string ReceiveExit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_RECEIVE_EXIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_RECEIVE_EXIT, value); }
+               }
+
+               /// <summary>
+               /// The user data that is passed to a channel receive exit when 
it
+               /// is called.
+               /// </summary>
+               [UriAttribute("wmq.ReceiveExitInit")]
+               public string ReceiveExitInit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_RECEIVE_EXIT_INIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_RECEIVE_EXIT_INIT, value); 
}
+               }
+
+               /// <summary>
+               /// Identifies a channel security exit.
+               /// </summary>
+               [UriAttribute("wmq.SecurityExit")]
+               public string SecurityExit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SECURITY_EXIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SECURITY_EXIT, value); }
+               }
+
+               /// <summary>
+               /// The user data that is passed to a channel security exit 
when it
+               /// is called.
+               /// </summary>
+               [UriAttribute("wmq.SecurityExitInit")]
+               public string SecurityExitInit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SECURITY_EXIT_INIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SECURITY_EXIT_INIT, 
value); }
+               }
+
+               /// <summary>
+               /// Identifies a channel send exit.
+               /// </summary>
+               [UriAttribute("wmq.SendExit")]
+               public string SendExit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SEND_EXIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SEND_EXIT, value); }
+               }
+
+               /// <summary>
+               /// The user data that is passed to channel send exits when they
+               /// are called.
+               /// </summary>
+               [UriAttribute("wmq.SendExitInit")]
+               public string SendExitInit
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SEND_EXIT_INIT); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SEND_EXIT_INIT, value); }
+               }
+
+               /// <summary>
+               /// The number of send calls to allow between checking for 
asynchronous
+               /// put errors, within a single non-transacted XMS session.
+               /// </summary>
+               [UriAttribute("wmq.SendCheckCount")]
+               public Int32 SendCheckCount
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_SEND_CHECK_COUNT); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_SEND_CHECK_COUNT, value); }
+               }
+
+               /// <summary>
+               /// Whether a client connection can share its socket with other
+               /// top-level XMS connections from the same process to the same 
queue
+               /// manager, if the channel definitions match.
+               /// </summary>
+               [UriAttribute("wmq.XMSShareSocketAllowed")]
+               public Int32 XMSShareSocketAllowed
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_SHARE_CONV_ALLOWED); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_SHARE_CONV_ALLOWED, value); }
+               }
+
+               /// <summary>
+               /// Whether a client connection can share its socket with other
+               /// top-level XMS connections from the same process to the same 
queue
+               /// manager, if the channel definitions match.
+               /// </summary>
+               [UriAttribute("wmq.ShareSocketAllowed")]
+               public bool ShareSocketAllowed
+               {
+                       get { return 
XMSConvert.ToShareSocketAllowed(this.XMSShareSocketAllowed); }
+                       set { this.XMSShareSocketAllowed = 
XMSConvert.ToXMSShareSocketAllowed(value); }
+               }
+
+               /// <summary>
+               /// The locations of the servers that hold the certificate 
revocation
+               /// lists (CRLs) to be used on an SSL connection to a queue 
manager.
+               /// </summary>
+               [UriAttribute("wmq.SSLCertificateStores")]
+               public string SSLCertificateStores
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_CERT_STORES); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_CERT_STORES, value); }
+               }
+
+               /// <summary>
+               /// The name of the CipherSpec to be used on a secure 
connection to
+               /// a queue manager.
+               /// </summary>
+               [UriAttribute("wmq.SSLCipherSpec")]
+               public string SSLCipherSpec
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SPEC, value); }
+               }
+
+               /// <summary>
+               /// The name of the CipherSuite to be used on an SSL or TLS 
connection
+               /// to a queue manager. The protocol used in negotiating the 
secure
+               /// connection depends on the specified CipherSuite.
+               /// </summary>
+               [UriAttribute("wmq.SSLCipherSuite")]
+               public string SSLCipherSuite
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_CIPHER_SUITE); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_CIPHER_SUITE, value); }
+               }
+
+               /// <summary>
+               /// Configuration details for the cryptographic hardware 
connected
+               /// to the client system.
+               /// </summary>
+               [UriAttribute("wmq.SSLCryptoHardware")]
+               public string SSLCryptoHardware
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_CRYPTO_HW); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_CRYPTO_HW, value); }
+               }
+
+               /// <summary>
+               /// The value of this property determines whether an 
application can
+               /// or cannot use non-FIPS compliant cipher suites. If this 
property
+               /// is set to true, only FIPS algorithms are used for the 
client-server
+               /// connection.
+               /// </summary>
+               [UriAttribute("wmq.SSLFipsRequired")]
+               public bool SSLFipsRequired
+               {
+                       get { return 
this.xmsConnectionFactory.GetBooleanProperty(XMSC.WMQ_SSL_FIPS_REQUIRED); }
+                       set { 
this.xmsConnectionFactory.SetBooleanProperty(XMSC.WMQ_SSL_FIPS_REQUIRED, 
value); }
+               }
+
+               /// <summary>
+               /// The location of the key database file in which keys and
+               /// certificates are stored.
+               /// </summary>
+               [UriAttribute("wmq.SSLKeyRepository")]
+               public string SSLKeyRepository
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_KEY_REPOSITORY, 
value); }
+               }
+
+               /// <summary>
+               /// The KeyResetCount represents the total number of 
unencrypted bytes
+               /// sent and received within an SSL conversation before the 
secret key
+               /// is renegotiated.
+               /// </summary>
+               [UriAttribute("wmq.SSLKeyResetCount")]
+               public Int32 SSLKeyResetCount
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_SSL_KEY_RESETCOUNT); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_SSL_KEY_RESETCOUNT, value); }
+               }
+
+               /// <summary>
+               /// The peer name to be used on an SSL connection to a queue 
manager.
+               /// </summary>
+               [UriAttribute("wmq.SSLPeerName")]
+               public string SSLPeerName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_SSL_PEER_NAME); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_SSL_PEER_NAME, value); }
+               }
+
+               /// <summary>
+               /// Whether all messages must be retrieved from queues within 
sync point control.
+               /// </summary>
+               [UriAttribute("wmq.SyncpointAllGets")]
+               public bool SyncpointAllGets
+               {
+                       get { return 
this.xmsConnectionFactory.GetBooleanProperty(XMSC.WMQ_SYNCPOINT_ALL_GETS); }
+                       set { 
this.xmsConnectionFactory.SetBooleanProperty(XMSC.WMQ_SYNCPOINT_ALL_GETS, 
value); }
+               }
+
+               /// <summary>
+               /// Whether messages sent to the destination contain an MQRFH2 
header.
+               /// </summary>
+               [UriAttribute("wmq.XMSTargetClient")]
+               public Int32 XMSTargetClient
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WMQ_TARGET_CLIENT); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WMQ_TARGET_CLIENT, value); }
+               }
+
+               /// <summary>
+               /// Whether messages sent to the destination contain an 
<c>MQRFH2</c>
+               /// header.
+               /// </summary>
+               [UriAttribute("wmq.TargetClient")]
+               public TargetClient TargetClient
+               {
+                       get { return 
XMSConvert.ToTargetClient(this.XMSTargetClient); }
+                       set { this.XMSTargetClient = 
XMSConvert.ToXMSTargetClient(value); }
+               }
+
+               /// <summary>
+               /// The prefix used to form the name of the WebSphere MQ 
dynamic queue
+               /// that is created when the application creates an XMS 
temporary queue.
+               /// </summary>
+               [UriAttribute("wmq.TemporaryQueuePrefix")]
+               public string WMQTemporaryQueuePrefix
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_TEMP_Q_PREFIX); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_TEMP_Q_PREFIX, value); }
+               }
+
+               /// <summary>
+               /// When creating temporary topics, XMS generates a topic 
string of
+               /// the form "TEMP/TEMPTOPICPREFIX/unique_id", or if this 
property
+               /// contains the default value, then this string, 
"TEMP/unique_id", is
+               /// generated. Specifying a non-empty value allows specific 
model
+               /// queues to be defined for creating the managed queues for 
subscribers
+               /// to temporary topics created under this connection.
+               /// </summary>
+               [UriAttribute("wmq.TemporaryTopicPrefix")]
+               public string WMQTemporaryTopicPrefix
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX, value); 
}
+               }
+
+               /// <summary>
+               /// The name of the WebSphere MQ model queue from which a 
dynamic
+               /// queue is created when the application creates an XMS 
temporary
+               /// queue.
+               /// </summary>
+               [UriAttribute("wmq.TemporaryModel")]
+               public string WMQTemporaryModel
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX, value); 
}
+               }
+
+               #endregion
+
+               #region WPM-specific properties
+
+               /// <summary>
+               /// For a connection to a service integration bus, this property
+               /// specifies the local network interface to be used, or the 
local
+               /// port or range of local ports to be used, or both.
+               /// </summary>
+               [UriAttribute("wpm.LocalAddress")]
+               public string WPMLocalAddress
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_LOCAL_ADDRESS); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_LOCAL_ADDRESS, value); }
+               }
+
+               /// <summary>
+               /// The name of the service integration bus that the application
+               /// connects to.
+               /// </summary>
+               [UriAttribute("wpm.BusName")]
+               public string BusName
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_BUS_NAME); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_BUS_NAME, value); }
+               }
+
+               /// <summary>
+               /// The connection proximity setting for the connection.
+               /// </summary>
+               [UriAttribute("wpm.XMSConnectionProximity")]
+               public Int32 XMSConnectionProximity
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WPM_CONNECTION_PROXIMITY); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WPM_CONNECTION_PROXIMITY, value); 
}
+               }
+
+               /// <summary>
+               /// The connection proximity setting for the connection.
+               /// </summary>
+               [UriAttribute("wpm.ConnectionProximity")]
+               public ConnectionProximity ConnectionProximity
+               {
+                       get { return 
XMSConvert.ToConnectionProximity(this.XMSConnectionProximity); }
+                       set { this.XMSConnectionProximity = 
XMSConvert.ToXMSConnectionProximity(value); }
+               }
+
+               /// <summary>
+               /// The name of the messaging engine where all durable 
subscriptions
+               /// for a connection or a destination are managed.
+               /// </summary>
+               [UriAttribute("wpm.DurableSubscriptionHome")]
+               public string DurableSubscriptionHome
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_DUR_SUB_HOME); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_DUR_SUB_HOME, value); }
+               }
+
+               /// <summary>
+               /// The reliability level of nonpersistent messages that are 
sent
+               /// using the connection.
+               /// </summary>
+               [UriAttribute("wpm.XMSNonPersistentMap")]
+               public Int32 XMSNonPersistentMap
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WPM_NON_PERSISTENT_MAP); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WPM_NON_PERSISTENT_MAP, value); }
+               }
+
+               /// <summary>
+               /// The reliability level of nonpersistent messages that are 
sent
+               /// using the connection.
+               /// </summary>
+               [UriAttribute("wpm.NonPersistentMap")]
+               public Mapping NonPersistentMap
+               {
+                       get { return 
XMSConvert.ToMapping(this.XMSNonPersistentMap); }
+                       set { this.XMSNonPersistentMap = 
XMSConvert.ToXMSMapping(value); }
+               }
+
+               /// <summary>
+               /// The reliability level of persistent messages that are sent
+               /// using the connection.
+               /// </summary>
+               [UriAttribute("wpm.XMSPersistentMap")]
+               public Int32 XMSPersistentMap
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WPM_PERSISTENT_MAP); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WPM_PERSISTENT_MAP, value); }
+               }
+
+               /// <summary>
+               /// The reliability level of persistent messages that are sent
+               /// using the connection.
+               /// </summary>
+               [UriAttribute("wpm.PersistentMap")]
+               public Mapping PersistentMap
+               {
+                       get { return 
XMSConvert.ToMapping(this.XMSPersistentMap); }
+                       set { this.XMSPersistentMap = 
XMSConvert.ToXMSMapping(value); }
+               }
+
+               /// <summary>
+               /// A sequence of one or more endpoint addresses of bootstrap 
servers.
+               /// </summary>
+               [UriAttribute("wpm.ProviderEndpoints")]
+               public string ProviderEndpoints
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_PROVIDER_ENDPOINTS); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_PROVIDER_ENDPOINTS, 
value); }
+               }
+
+               /// <summary>
+               /// The name of a target group of messaging engines.
+               /// </summary>
+               [UriAttribute("wpm.TargetGroup")]
+               public string TargetGroup
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_TARGET_GROUP); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_TARGET_GROUP, value); }
+               }
+
+               /// <summary>
+               /// The significance of the target group of messaging engines.
+               /// </summary>
+               [UriAttribute("wpm.XMSTargetSignificance")]
+               public Int32 XMSTargetSignificance
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WPM_TARGET_SIGNIFICANCE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WPM_TARGET_SIGNIFICANCE, value); }
+               }
+
+               /// <summary>
+               /// The significance of the target group of messaging engines.
+               /// </summary>
+               [UriAttribute("wpm.TargetSignificance")]
+               public TargetSignificance TargetSignificance
+               {
+                       get { return 
XMSConvert.ToTargetSignificance(this.XMSTargetSignificance); }
+                       set { this.XMSTargetSignificance = 
XMSConvert.ToXMSTargetSignificance(value); }
+               }
+
+               /// <summary>
+               /// The name of the inbound transport chain that the 
application must
+               /// use to connect to a messaging engine.
+               /// </summary>
+               [UriAttribute("wpm.TargetTransportChain")]
+               public string TargetTransportChain
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WPM_TARGET_TRANSPORT_CHAIN); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WPM_TARGET_TRANSPORT_CHAIN, 
value); }
+               }
+
+               /// <summary>
+               /// The type of the target group of messaging engines.
+               /// </summary>
+               [UriAttribute("wpm.XMSTargetType")]
+               public Int32 XMSTargetType
+               {
+                       get { return 
this.xmsConnectionFactory.GetIntProperty(XMSC.WPM_TARGET_TYPE); }
+                       set { 
this.xmsConnectionFactory.SetIntProperty(XMSC.WPM_TARGET_TYPE, value); }
+               }
+
+               /// <summary>
+               /// The type of the target group of messaging engines.
+               /// </summary>
+               [UriAttribute("wpm.TargetType")]
+               public TargetType TargetType
+               {
+                       get { return 
XMSConvert.ToTargetType(this.XMSTargetType); }
+                       set { this.XMSTargetType = 
XMSConvert.ToXMSTargetType(value); }
+               }
+
+               /// <summary>
+               /// The prefix used to form the name of the temporary queue 
that is
+               /// created in the service integration bus when the application 
creates
+               /// an XMS temporary queue.
+               /// </summary>
+               [UriAttribute("wpm.TemporaryQueuePrefix")]
+               public string WPMTemporaryQueuePrefix
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_TEMP_Q_PREFIX); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_TEMP_Q_PREFIX, value); }
+               }
+
+               /// <summary>
+               /// The prefix used to form the name of a temporary topic that 
is
+               /// created by the application.
+               /// </summary>
+               [UriAttribute("wpm.TemporaryTopicPrefix")]
+               public string WPMTemporaryTopicPrefix
+               {
+                       get { return 
this.xmsConnectionFactory.GetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX); }
+                       set { 
this.xmsConnectionFactory.SetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX, value); 
}
+               }
+
+               #endregion
+
+               #region Common properties having protocol-specific keys
+
+               /// <summary>
+               /// The host name or IP address of the system on which a broker 
(RTT)
+               /// or queue manager (WMQ) runs.
+               /// </summary>
+               public string HostName
+               {
+                       get
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case XMSC.CT_RTT: return 
this.RTTHostName;
+                                       case XMSC.CT_WMQ: return 
this.WMQHostName;
+                                       case XMSC.CT_WPM: return null;
+                                       default         : return null;
+                               }
+                       }
+                       set
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case XMSC.CT_RTT: this.RTTHostName = 
value; break;
+                                       case XMSC.CT_WMQ: this.WMQHostName = 
value; break;
+                                       case XMSC.CT_WPM: break;
+                                       default         : break;
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// The number of the port on which a broker (RTT) or queue 
manager
+               /// (WMQ) listens for incoming requests.
+               /// </summary>
+               public Int32 Port
+               {
+                       get
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: return 
this.RTTPort;
+                                       case IBM.XMS.XMSC.CT_WMQ: return 
this.WMQPort;
+                                       case IBM.XMS.XMSC.CT_WPM: return 0;
+                                       default         : return 0;
+                               }
+                       }
+                       set
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: this.RTTPort 
= value; break;
+                                       case IBM.XMS.XMSC.CT_WMQ: this.WMQPort 
= value; break;
+                                       case IBM.XMS.XMSC.CT_WPM: break;
+                                       default         : break;
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// The host name or IP address of the local network interface 
to be
+               /// used for a RTT real-time connection to a broker.
+               /// For a WMQ connection to a queue manager, this property 
specifies
+               /// the local network interface to be used, or the local port 
or range
+               /// of local ports to be used, or both.
+               /// For a WPM connection to a service integration bus, this 
property
+               /// specifies the local network interface to be used, or the 
local
+               /// port or range of local ports to be used, or both.
+               /// </summary>
+               public string LocalAddress
+               {
+                       get
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: return 
this.RTTLocalAddress;
+                                       case IBM.XMS.XMSC.CT_WMQ: return 
this.WMQLocalAddress;
+                                       case IBM.XMS.XMSC.CT_WPM: return 
this.WPMLocalAddress;
+                                       default         : return null;
+                               }
+                       }
+                       set
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: 
this.RTTLocalAddress = value; break;
+                                       case IBM.XMS.XMSC.CT_WMQ: 
this.WMQLocalAddress = value; break;
+                                       case IBM.XMS.XMSC.CT_WPM: 
this.WPMLocalAddress = value; break;
+                                       default         : break;
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// The prefix used to form the name of the WebSphere MQ 
dynamic queue
+               /// that is created (WMQ), or the name of the temporary queue 
that is
+               /// created in the service integration bus (WPM) when the 
application
+               /// creates an XMS temporary queue.
+               /// </summary>
+               public string TemporaryQueuePrefix
+               {
+                       get
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: return null;
+                                       case IBM.XMS.XMSC.CT_WMQ: return 
this.WMQTemporaryQueuePrefix;
+                                       case IBM.XMS.XMSC.CT_WPM: return 
this.WPMTemporaryQueuePrefix;
+                                       default         : return null;
+                               }
+                       }
+                       set
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: break;
+                                       case IBM.XMS.XMSC.CT_WMQ: 
this.WMQTemporaryQueuePrefix = value; break;
+                                       case IBM.XMS.XMSC.CT_WPM: 
this.WPMTemporaryQueuePrefix = value; break;
+                                       default         : break;
+                               }
+                       }
+               }
+
+               /// <summary>
+               /// The prefix used to form the name of a temporary topic that 
is
+               /// created by the application (WMQ and WPM).
+               /// </summary>
+               public string TemporaryTopicPrefix
+               {
+                       get
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: return null;
+                                       case IBM.XMS.XMSC.CT_WMQ: return 
this.WMQTemporaryTopicPrefix;
+                                       case IBM.XMS.XMSC.CT_WPM: return 
this.WPMTemporaryTopicPrefix;
+                                       default         : return null;
+                               }
+                       }
+                       set
+                       {
+                               switch(this.XMSConnectionType)
+                               {
+                                       case IBM.XMS.XMSC.CT_RTT: break;
+                                       case IBM.XMS.XMSC.CT_WMQ: 
this.WMQTemporaryTopicPrefix = value; break;
+                                       case IBM.XMS.XMSC.CT_WPM: 
this.WPMTemporaryTopicPrefix = value; break;
+                                       default         : break;
+                               }
+                       }
+               }
+
+               #endregion
+
+               #endregion
+
+               #region IConnectionFactory Members
+
+               /// <summary>
+               /// Creates a new connection to IBM MQ with the default 
properties.
+               /// </summary>
+               public Apache.NMS.IConnection CreateConnection()
+               {
+                       Apache.NMS.IConnection connection = null;
+                       try
+                       {
+                               connection = new Apache.NMS.XMS.Connection(
+                                       
this.xmsConnectionFactory.CreateConnection());
+                               ConfigureConnection(connection);
+                       }
+                       catch(Exception ex)
+                       {
+                               ExceptionUtil.WrapAndThrowNMSException(ex);
+                       }
+                       return connection;
+               }
+
+               /// <summary>
+               /// Creates a new connection to IBM MQ using a specified user 
identity.
+               /// </summary>
+               /// <param name="userName">User name.</param>
+               /// <param name="password">Password.</param>
+               public Apache.NMS.IConnection CreateConnection(
+                                       string userName, string password)
+               {
+                       Apache.NMS.IConnection connection = null;
+                       try
+                       {
+                               connection = new Apache.NMS.XMS.Connection(
+                                       
this.xmsConnectionFactory.CreateConnection(
+                                               userName, password));
+                               ConfigureConnection(connection);
+                       }
+                       catch(Exception ex)
+                       {
+                               ExceptionUtil.WrapAndThrowNMSException(ex);
+                       }
+                       return connection;
+               }
+
+               /// <summary>
+               /// Configure the newly created connection.
+               /// </summary>
+               /// <param name="connection">Connection.</param>
+               private void ConfigureConnection(IConnection connection)
+               {
+                       connection.RedeliveryPolicy = 
this.redeliveryPolicy.Clone() as IRedeliveryPolicy;
+                       connection.ConsumerTransformer = 
this.consumerTransformer;
+                       connection.ProducerTransformer = 
this.producerTransformer;
+               }
+
+               /// <summary>
+               /// Get or set the broker URI.
+               /// </summary>
+               public Uri BrokerUri
+               {
+                       get { return this.brokerUri; }
+                       set { this.brokerUri = 
CreateConnectionFactoryFromURI(value); }
+               }
+
+               private ConsumerTransformerDelegate consumerTransformer;
+               /// <summary>
+               /// A Delegate that is called each time a Message is dispatched 
to allow the client to do
+               /// any necessary transformations on the received message 
before it is delivered.  The
+               /// ConnectionFactory sets the provided delegate instance on 
each Connection instance that
+               /// is created from this factory, each connection in turn 
passes the delegate along to each
+               /// Session it creates which then passes that along to the 
Consumers it creates.
+               /// </summary>
+               public ConsumerTransformerDelegate ConsumerTransformer
+               {
+                       get { return this.consumerTransformer; }
+                       set { this.consumerTransformer = value; }
+               }
+
+               private ProducerTransformerDelegate producerTransformer;
+               /// <summary>
+               /// A delegate that is called each time a Message is sent from 
this Producer which allows
+               /// the application to perform any needed transformations on 
the Message before it is sent.
+               /// The ConnectionFactory sets the provided delegate instance 
on each Connection instance that
+               /// is created from this factory, each connection in turn 
passes the delegate along to each
+               /// Session it creates which then passes that along to the 
Producers it creates.
+               /// </summary>
+               public ProducerTransformerDelegate ProducerTransformer
+               {
+                       get { return this.producerTransformer; }
+                       set { this.producerTransformer = value; }
+               }
+
+               #endregion
+       }
+}

Added: 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionMetaData.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionMetaData.cs?rev=1723221&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionMetaData.cs
 (added)
+++ 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/ConnectionMetaData.cs
 Wed Jan  6 02:19:56 2016
@@ -0,0 +1,106 @@
+/*
+ * 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 System.Reflection;
+
+namespace Apache.NMS.XMS
+{
+       /// <summary>
+       /// Implements the Connection Meta-Data feature for Apache.NMS.EMS
+       /// </summary>
+       public class ConnectionMetaData : IConnectionMetaData
+       {
+               private int nmsMajorVersion;
+               private int nmsMinorVersion;
+
+               private string nmsProviderName;
+               private string nmsVersion;
+
+               private int providerMajorVersion;
+               private int providerMinorVersion;
+               private string providerVersion;
+
+               private string[] nmsxProperties;
+
+               public ConnectionMetaData()
+               {
+                       Assembly self = Assembly.GetExecutingAssembly();
+                       AssemblyName asmName = self.GetName();
+
+                       this.nmsProviderName = asmName.Name;
+                       this.providerMajorVersion = asmName.Version.Major;
+                       this.providerMinorVersion = asmName.Version.Minor;
+                       this.providerVersion = asmName.Version.ToString();
+
+                       this.nmsxProperties = new String[] { };
+
+                       foreach(AssemblyName name in 
self.GetReferencedAssemblies())
+                       {
+                               if(0 == string.Compare(name.Name, "Apache.NMS", 
true))
+                               {
+                                       this.nmsMajorVersion = 
name.Version.Major;
+                                       this.nmsMinorVersion = 
name.Version.Minor;
+                                       this.nmsVersion = 
name.Version.ToString();
+
+                                       return;
+                               }
+                       }
+
+                       throw new NMSException("Could not find a reference to 
the Apache.NMS Assembly.");
+               }
+
+               public int NMSMajorVersion
+               {
+                       get { return this.nmsMajorVersion; }
+               }
+
+               public int NMSMinorVersion
+               {
+                       get { return this.nmsMinorVersion; }
+               }
+
+               public string NMSProviderName
+               {
+                       get { return this.nmsProviderName; }
+               }
+
+               public string NMSVersion
+               {
+                       get { return this.nmsVersion; }
+               }
+
+               public string[] NMSXPropertyNames
+               {
+                       get { return this.nmsxProperties; }
+               }
+
+               public int ProviderMajorVersion
+               {
+                       get { return this.providerMajorVersion; }
+               }
+
+               public int ProviderMinorVersion
+               {
+                       get { return this.providerMinorVersion; }
+               }
+
+               public string ProviderVersion
+               {
+                       get { return this.providerVersion; }
+               }
+       }
+}

Added: 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/Destination.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/Destination.cs?rev=1723221&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/Destination.cs 
(added)
+++ 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/Destination.cs 
Wed Jan  6 02:19:56 2016
@@ -0,0 +1,524 @@
+/*
+ * 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;
+using Apache.NMS.Util;
+using Apache.NMS.XMS.Util;
+using IBM.XMS;
+
+namespace Apache.NMS.XMS
+{
+       public class Destination : IDestination
+       {
+               public IBM.XMS.IDestination xmsDestination;
+
+               #region Constructors
+
+               /// <summary>
+               /// Constructs a destination object.
+               /// </summary>
+               /// <param name="destination">IBM XMS destination.</param>
+               public Destination(IBM.XMS.IDestination destination)
+               {
+                       this.xmsDestination = destination;
+               }
+
+               /// <summary>
+               /// Constructs a destination object specifying if the 
destination is
+               /// temporary.
+               /// </summary>
+               /// <param name="destination">IBM XMS destination.</param>
+               /// <param name="isTemporary">Whether the destination is 
temporary.
+               /// </param>
+               public Destination(IBM.XMS.IDestination destination, bool 
isTemporary)
+               {
+                       this.xmsDestination = destination;
+                       this.isTemporary = isTemporary;
+               }
+
+               #endregion
+
+               #region IDestination implementation
+
+               /// <summary>
+               /// Destination type.
+               /// </summary>
+               public DestinationType DestinationType
+               {
+                       get
+                       {
+                               return XMSConvert.ToDestinationType(
+                                       this.xmsDestination.TypeId,
+                                       this.isTemporary);
+                       }
+               }
+
+               /// <summary>
+               /// Checks if destination is a topic.
+               /// </summary>
+               public bool IsTopic
+               {
+                       get
+                       {
+                               return (this.xmsDestination.TypeId
+                                       == IBM.XMS.DestinationType.Topic);
+                       }
+               }
+
+               /// <summary>
+               /// Checks if destination is a queue.
+               /// </summary>
+               public bool IsQueue
+               {
+                       get
+                       {
+                               return (this.xmsDestination.TypeId
+                                       == IBM.XMS.DestinationType.Queue);
+                       }
+               }
+
+               private readonly bool isTemporary;
+               /// <summary>
+               /// Checks if destination is temporary.
+               /// </summary>
+               public bool IsTemporary
+               {
+                       get { return this.isTemporary; }
+               }
+
+               #endregion
+
+               #region XMS IDestination properties
+
+               // 
http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/props_dest.htm?lang=en
+
+               #region Common properties
+
+               /// <summary>
+               /// Destination name.
+               /// </summary>
+               public string Name
+               {
+                       get { return this.xmsDestination.Name; }
+               }
+
+               /// <summary>
+               /// The delivery mode of messages sent to the destination.
+               /// </summary>
+               public Int32 XMSDeliveryMode
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.DELIVERY_MODE); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.DELIVERY_MODE, value); }
+               }
+
+               /// <summary>
+               /// The delivery mode of messages sent to the destination.
+               /// </summary>
+               public Apache.NMS.XMS.Util.DeliveryMode DeliveryMode
+               {
+                       get { return 
XMSConvert.ToDeliveryMode(this.XMSDeliveryMode); }
+                       set { this.XMSDeliveryMode = 
XMSConvert.ToXMSDeliveryMode(value); }
+               }
+
+               /// <summary>
+               /// The priority of messages sent to the destination.
+               /// </summary>
+               public Int32 Priority
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.PRIORITY); }
+                       set { this.xmsDestination.SetIntProperty(XMSC.PRIORITY, 
value); }
+               }
+
+               /// <summary>
+               /// The time to live in milliseconds for messages sent to the
+               /// destination.
+               /// </summary>
+               public Int32 TimeToLive
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.TIME_TO_LIVE); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.TIME_TO_LIVE, value); }
+               }
+
+               #endregion
+
+               #region RTT-specific properties
+
+               /// <summary>
+               /// The multicast setting for the destination.
+               /// </summary>
+               [UriAttribute("rtt.XMSMulticast")]
+               public Int32 XMSMulticast
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.RTT_MULTICAST); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.RTT_MULTICAST, value); }
+               }
+
+               /// <summary>
+               /// The multicast setting for the destination.
+               /// </summary>
+               [UriAttribute("rtt.Multicast")]
+               public Multicast Multicast
+               {
+                       get { return XMSConvert.ToMulticast(this.XMSMulticast); 
}
+                       set { this.XMSMulticast = 
XMSConvert.ToXMSMulticast(value); }
+               }
+
+               #endregion
+
+               #region WMQ-specific properties
+
+               /// <summary>
+               /// The type of broker used by the application for the 
destination.
+               /// </summary>
+               [UriAttribute("wmq.XMSBrokerVersion")]
+               public Int32 XMSBrokerVersion
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_BROKER_VERSION); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_BROKER_VERSION, value); }
+               }
+
+               /// <summary>
+               /// The type of broker used by the application for the 
destination.
+               /// </summary>
+               [UriAttribute("wmq.BrokerVersion")]
+               public BrokerVersion BrokerVersion
+               {
+                       get { return 
XMSConvert.ToBrokerVersion(this.XMSBrokerVersion); }
+                       set { this.XMSBrokerVersion = 
XMSConvert.ToXMSBrokerVersion(value); }
+               }
+
+               /// <summary>
+               /// The identifier (CCSID) of the coded character set, or code 
page,
+               /// that the strings of character data in the body of a message 
are in
+               /// when the XMS client forwards the message to the destination.
+               /// </summary>
+               [UriAttribute("wmq.DestinationCCSID")]
+               public Int32 DestinationCCSID
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_CCSID); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_CCSID, value); }
+               }
+
+               /// <summary>
+               /// The name of the subscriber queue for a durable subscriber 
that is
+               /// receiving messages from the destination.
+               /// </summary>
+               [UriAttribute("wmq.SubscriberQueueName")]
+               public string SubscriberQueueName
+               {
+                       get { return 
this.xmsDestination.GetStringProperty(XMSC.WMQ_DUR_SUBQ); }
+                       set { 
this.xmsDestination.SetStringProperty(XMSC.WMQ_DUR_SUBQ, value); }
+               }
+
+               /// <summary>
+               /// How numerical data in the body of a message is represented 
when
+               /// the XMS client forwards the message to the destination.
+               /// </summary>
+               [UriAttribute("wmq.XMSEncoding")]
+               public Int32 XMSEncoding
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_ENCODING); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_ENCODING, value); }
+               }
+
+               /// <summary>
+               /// How numerical data in the body of a message is represented 
when
+               /// the XMS client forwards the message to the destination.
+               /// </summary>
+               [UriAttribute("wmq.Encoding")]
+               public Encoding Encoding
+               {
+                       get { return XMSConvert.ToEncoding(this.XMSEncoding); }
+                       set { this.XMSEncoding = 
XMSConvert.ToXMSEncoding(value); }
+               }
+
+               /// <summary>
+               /// Whether calls to certain methods fail if the queue manager 
to which
+               /// the application is connected is in a quiescing state.
+               /// </summary>
+               [UriAttribute("wmq.XMSFailIfQuiesce")]
+               public Int32 XMSFailIfQuiesce
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_FAIL_IF_QUIESCE); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_FAIL_IF_QUIESCE, value); }
+               }
+
+               /// <summary>
+               /// Whether calls to certain methods fail if the queue manager 
to which
+               /// the application is connected is in a quiescing state.
+               /// </summary>
+               [UriAttribute("wmq.FailIfQuiesce")]
+               public bool FailIfQuiesce
+               {
+                       get { return 
XMSConvert.ToFailIfQuiesce(this.XMSFailIfQuiesce); }
+                       set { this.XMSFailIfQuiesce = 
XMSConvert.ToXMSFailIfQuiesce(value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application 
processes the
+               /// <c>MQRFH2</c> of a WebSphere MQ message as part of the 
message
+               /// payload (that is, as part of the message body).
+               /// </summary>
+               [UriAttribute("wmq.XMSMessageBody")]
+               public Int32 XMSMessageBody
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_MESSAGE_BODY); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_MESSAGE_BODY, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application 
processes the
+               /// <c>MQRFH2</c> of a WebSphere MQ message as part of the 
message
+               /// payload (that is, as part of the message body).
+               /// </summary>
+               [UriAttribute("wmq.MessageBody")]
+               public MessageBody MessageBody
+               {
+                       get { return 
XMSConvert.ToMessageBody(this.XMSMessageBody); }
+                       set { this.XMSMessageBody = 
XMSConvert.ToXMSMessageBody(value); }
+               }
+
+               /// <summary>
+               /// Determines what level of message context is to be set by 
the XMS
+               /// application. The application must be running with 
appropriate
+               /// context authority for this property to take effect.
+               /// </summary>
+               [UriAttribute("wmq.XMSMessageContext")]
+               public Int32 XMSMessageContext
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_MQMD_MESSAGE_CONTEXT); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_MQMD_MESSAGE_CONTEXT, value); }
+               }
+
+               /// <summary>
+               /// Determines what level of message context is to be set by 
the XMS
+               /// application. The application must be running with 
appropriate
+               /// context authority for this property to take effect.
+               /// </summary>
+               [UriAttribute("wmq.MessageContext")]
+               public MessageContext MessageContext
+               {
+                       get { return 
XMSConvert.ToMessageContext(this.XMSMessageContext); }
+                       set { this.XMSMessageContext = 
XMSConvert.ToXMSMessageContext(value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application can 
extract
+               /// the values of MQMD fields or not.
+               /// </summary>
+               [UriAttribute("wmq.XMSMQMDReadEnabled")]
+               public Int32 XMSMQMDReadEnabled
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_MQMD_READ_ENABLED); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_MQMD_READ_ENABLED, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application can 
extract
+               /// the values of MQMD fields or not.
+               /// </summary>
+               [UriAttribute("wmq.MQMDReadEnabled")]
+               public bool MQMDReadEnabled
+               {
+                       get { return 
XMSConvert.ToMQMDReadEnabled(this.XMSMQMDReadEnabled); }
+                       set { this.XMSMQMDReadEnabled = 
XMSConvert.ToXMSMQMDReadEnabled(value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application can set
+               /// the values of MQMD fields or not.
+               /// </summary>
+               [UriAttribute("wmq.XMSMQMDWriteEnabled")]
+               public Int32 XMSMQMDWriteEnabled
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_MQMD_WRITE_ENABLED); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_MQMD_WRITE_ENABLED, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether an XMS application can set
+               /// the values of MQMD fields or not.
+               /// </summary>
+               [UriAttribute("wmq.MQMDWriteEnabled")]
+               public bool MQMDWriteEnabled
+               {
+                       get { return 
XMSConvert.ToMQMDWriteEnabled(this.XMSMQMDWriteEnabled); }
+                       set { this.XMSMQMDWriteEnabled = 
XMSConvert.ToXMSMQMDWriteEnabled(value); }
+               }
+
+               /// <summary>
+               /// This property determines whether message consumers and queue
+               /// browsers are allowed to use read ahead to get 
non-persistent,
+               /// non-transactional messages from this destination into an 
internal
+               /// buffer before receiving them.
+               /// </summary>
+               [UriAttribute("wmq.XMSReadAheadAllowed")]
+               public Int32 XMSReadAheadAllowed
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_READ_AHEAD_ALLOWED); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_READ_AHEAD_ALLOWED, value); }
+               }
+
+               /// <summary>
+               /// This property determines whether message consumers and queue
+               /// browsers are allowed to use read ahead to get 
non-persistent,
+               /// non-transactional messages from this destination into an 
internal
+               /// buffer before receiving them.
+               /// </summary>
+               [UriAttribute("wmq.ReadAheadAllowed")]
+               public ReadAheadAllowed ReadAheadAllowed
+               {
+                       get { return 
XMSConvert.ToReadAheadAllowed(this.XMSReadAheadAllowed); }
+                       set { this.XMSReadAheadAllowed = 
XMSConvert.ToXMSReadAheadAllowed(value); }
+               }
+
+
+               /// <summary>
+               /// This property determines, for messages being delivered to an
+               /// asynchronous message listener, what happens to messages in 
the
+               /// internal read ahead buffer when the message consumer is 
closed.
+               /// </summary>
+               [UriAttribute("wmq.XMSReadAheadClosePolicy")]
+               public Int32 XMSReadAheadClosePolicy
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_READ_AHEAD_CLOSE_POLICY); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_READ_AHEAD_CLOSE_POLICY, value); }
+               }
+
+               /// <summary>
+               /// This property determines, for messages being delivered to an
+               /// asynchronous message listener, what happens to messages in 
the
+               /// internal read ahead buffer when the message consumer is 
closed.
+               /// </summary>
+               [UriAttribute("wmq.ReadAheadClosePolicy")]
+               public ReadAheadClosePolicy ReadAheadClosePolicy
+               {
+                       get { return 
XMSConvert.ToReadAheadClosePolicy(this.XMSReadAheadClosePolicy); }
+                       set { this.XMSReadAheadClosePolicy = 
XMSConvert.ToXMSReadAheadClosePolicy(value); }
+               }
+
+               /// <summary>
+               /// Destination property that sets the target CCSID for queue 
manager
+               /// message conversion. The value is ignored unless
+               /// <c>XMSC.WMQ_RECEIVE_CONVERSION</c> is set to
+               /// <c>WMQ_RECEIVE_CONVERSION_QMGR</c>.
+               /// </summary>
+               [UriAttribute("wmq.ReceiveCCSID")]
+               public Int32 ReceiveCCSID
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_RECEIVE_CCSID); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_RECEIVE_CCSID, value); }
+               }
+
+               /// <summary>
+               /// Destination property that determines whether data 
conversion is
+               /// going to be performed by the queue manager.
+               /// </summary>
+               [UriAttribute("wmq.XMSReceiveConversion")]
+               public Int32 XMSReceiveConversion
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_RECEIVE_CONVERSION); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_RECEIVE_CONVERSION, value); }
+               }
+
+               /// <summary>
+               /// Destination property that determines whether data 
conversion is
+               /// going to be performed by the queue manager.
+               /// </summary>
+               [UriAttribute("wmq.ReceiveConversion")]
+               public ReceiveConversion ReceiveConversion
+               {
+                       get { return 
XMSConvert.ToReceiveConversion(this.XMSReceiveConversion); }
+                       set { this.XMSReceiveConversion = 
XMSConvert.ToXMSReceiveConversion(value); }
+               }
+
+               /// <summary>
+               /// Whether messages sent to the destination contain an 
<c>MQRFH2</c>
+               /// header.
+               /// </summary>
+               [UriAttribute("wmq.XMSTargetClient")]
+               public Int32 XMSTargetClient
+               {
+                       get { return 
this.xmsDestination.GetIntProperty(XMSC.WMQ_TARGET_CLIENT); }
+                       set { 
this.xmsDestination.SetIntProperty(XMSC.WMQ_TARGET_CLIENT, value); }
+               }
+
+               /// <summary>
+               /// Whether messages sent to the destination contain an 
<c>MQRFH2</c>
+               /// header.
+               /// </summary>
+               [UriAttribute("wmq.TargetClient")]
+               public TargetClient TargetClient
+               {
+                       get { return 
XMSConvert.ToTargetClient(this.XMSTargetClient); }
+                       set { this.XMSTargetClient = 
XMSConvert.ToXMSTargetClient(value); }
+               }
+
+               /// <summary>
+               /// When creating temporary topics, XMS generates a topic 
string of
+               /// the form "TEMP/TEMPTOPICPREFIX/unique_id", or if this 
property
+               /// contains the default value, then this string, 
"TEMP/unique_id",
+               /// is generated. Specifying a non-empty value allows specific 
model
+               /// queues to be defined for creating the managed queues for 
subscribers
+               /// to temporary topics created under this connection.
+               /// </summary>
+               [UriAttribute("wmq.TemporaryTopicPrefix")]
+               public string WMQTemporaryTopicPrefix
+               {
+                       get { return 
this.xmsDestination.GetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX); }
+                       set { 
this.xmsDestination.SetStringProperty(XMSC.WMQ_TEMP_TOPIC_PREFIX, value); }
+               }
+
+               #endregion
+
+               #region WPM-specific properties
+
+               /// <summary>
+               /// The name of the service integration bus in which the 
destination
+               /// exists.
+               /// </summary>
+               [UriAttribute("wpm.BusName")]
+               public string BusName
+               {
+                       get { return 
this.xmsDestination.GetStringProperty(XMSC.WPM_BUS_NAME); }
+                       set { 
this.xmsDestination.SetStringProperty(XMSC.WPM_BUS_NAME, value); }
+               }
+
+
+               /// <summary>
+               /// The name of the topic space that contains the topic.
+               /// </summary>
+               [UriAttribute("wpm.TopicSpace")]
+               public string TopicSpace
+               {
+                       get { return 
this.xmsDestination.GetStringProperty(XMSC.WPM_TOPIC_SPACE); }
+                       set { 
this.xmsDestination.SetStringProperty(XMSC.WPM_TOPIC_SPACE, value); }
+               }
+
+               #endregion
+
+               #endregion
+
+               #region IDisposable implementation
+
+               public void Dispose()
+               {
+               }
+
+               #endregion
+       }
+}

Added: 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/InitialContext.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/InitialContext.cs?rev=1723221&view=auto
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/InitialContext.cs 
(added)
+++ 
activemq/activemq-dotnet/Apache.NMS.XMS/trunk/src/main/csharp/InitialContext.cs 
Wed Jan  6 02:19:56 2016
@@ -0,0 +1,174 @@
+/*
+ * 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 System.Collections;
+using System.Collections.Specialized;
+using Apache.NMS.XMS.Util;
+using Apache.NMS.Policies;
+using Apache.NMS.Util;
+using IBM.XMS;
+
+namespace Apache.NMS.XMS
+{
+       /// <summary>
+       /// An Initial Context for querying object repositories for object
+    /// definitions.
+       /// </summary>
+       public class InitialContext : IDisposable
+       {
+        public IBM.XMS.InitialContext xmsInitialContext;
+
+        #region Constructors
+
+        /// <summary>
+        /// Constructs an <c>InitialContext</c> object.
+        /// </summary>
+        /// <param name="environment">Environment settings.</param>
+               public InitialContext(Hashtable environment)
+               {
+            this.xmsInitialContext = new IBM.XMS.InitialContext(environment);
+               }
+
+        /// <summary>
+        /// Constructs an <c>InitialContext</c> object specifying the
+        /// repository URL.
+        /// </summary>
+        /// <param name="environment">Environment settings.</param>
+        /// <param name="repositoryURL">Repository URL.</param>
+               public InitialContext(Hashtable environment, string 
repositoryURL)
+               {
+            this.xmsInitialContext = new IBM.XMS.InitialContext(environment);
+            this.RepositoryURL = repositoryURL;
+               }
+
+               #endregion
+
+               #region Initial Context Properties (configure via 
ConnectionFactory URL parameters)
+
+        // 
http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_8.0.0/com.ibm.mq.msc.doc/props_inctx.htm?lang=en
+
+        /// <summary>
+        /// Repository URL.
+        /// </summary>
+               [UriAttribute("ic.RepositoryURL")]
+        public string RepositoryURL
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_URL]; }
+            set { this.xmsInitialContext.Environment[XMSC.IC_URL] = value; }
+        }
+
+        /// <summary>
+        /// Initial context provider URL.
+        /// </summary>
+               [UriAttribute("ic.ProviderURL")]
+        public string ProviderURL
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_PROVIDER_URL]; }
+            set { this.xmsInitialContext.Environment[XMSC.IC_PROVIDER_URL] = 
value; }
+        }
+
+        /// <summary>
+        /// Initial context security protocol.
+        /// </summary>
+               [UriAttribute("ic.SecurityProtocol")]
+        public string SecurityProtocol
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_SECURITY_PROTOCOL]; }
+            set { 
this.xmsInitialContext.Environment[XMSC.IC_SECURITY_PROTOCOL] = value; }
+        }
+
+        /// <summary>
+        /// Initial context security authentication.
+        /// </summary>
+               [UriAttribute("ic.SecurityAuthentication")]
+        public string SecurityAuthentication
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_SECURITY_AUTHENTICATION]; }
+            set { 
this.xmsInitialContext.Environment[XMSC.IC_SECURITY_AUTHENTICATION] = value; }
+        }
+
+        /// <summary>
+        /// Initial context security principal.
+        /// </summary>
+               [UriAttribute("ic.SecurityPrincipal")]
+        public string SecurityPrincipal
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_SECURITY_PRINCIPAL]; }
+            set { 
this.xmsInitialContext.Environment[XMSC.IC_SECURITY_PRINCIPAL] = value; }
+        }
+
+        /// <summary>
+        /// Initial context security credentials.
+        /// </summary>
+               [UriAttribute("ic.SecurityCredentials")]
+        public string SecurityCredentials
+        {
+            get { return 
(string)this.xmsInitialContext.Environment[XMSC.IC_SECURITY_CREDENTIALS]; }
+            set { 
this.xmsInitialContext.Environment[XMSC.IC_SECURITY_CREDENTIALS] = value; }
+        }
+
+        #endregion
+
+        #region InitialContext Methods
+
+        /// <summary>
+        /// Create an object from an object definition that is retrieved from
+        /// the repository of administered objects.
+        /// </summary>
+        /// <param name="objectName">Requested object name.</param>
+        /// <returns>Requested object, or null if the requested object is
+        /// not found.</returns>
+        public object Lookup(string objectName)
+        {
+            return this.xmsInitialContext.Lookup(objectName);
+        }
+
+        /// <summary>
+        /// Add a new property to the environment.
+        /// </summary>
+        /// <param name="propertyName">Property name.</param>
+        /// <param name="propertyValue">Property value.</param>
+        /// <returns>Old property value.</returns>
+        public object AddToEnvironment(
+            string propertyName, object propertyValue)
+        {
+            return this.xmsInitialContext.AddToEnvironment(
+                propertyName, propertyValue);
+        }
+
+        /// <summary>
+        /// Remove a property from the environment.
+        /// </summary>
+        /// <param name="propertyName">Property name.</param>
+        /// <returns>Old property value.</returns>
+        public object RemoveFromEnvironment(string propertyName)
+        {
+            return this.xmsInitialContext.RemoveFromEnvironment(propertyName);
+        }
+
+        #endregion
+
+        #region IDisposable
+
+        public void Dispose()
+        {
+            this.xmsInitialContext.Close();
+        }
+
+        #endregion
+       }
+}


Reply via email to