/// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.enableBinding(Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData)">
        /// </seealso>
        public virtual void  enableBinding(AppRoutingData theRoutingData)
        {
            Binding b = findBinding(theRoutingData);

            if (b != null)
            {
                b.active = true;
            }
        }
        /// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.hasActiveBinding(Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData)">
        /// </seealso>
        public virtual bool hasActiveBinding(AppRoutingData theRoutingData)
        {
            bool result = false;
            NuGenReceivingApplication app = findDestination(theRoutingData);

            if (app != null)
            {
                result = true;
            }
            return(result);
        }
        /// <param name="theMessageData">routing data related to a particular message
        /// </param>
        /// <param name="theReferenceData">routing data related to a binding, which may include
        /// wildcards
        /// </param>
        /// <param name="exact">if true, each field must match exactly
        /// </param>
        /// <returns> true if the message data is consist with the reference data, ie all
        /// values either match or are wildcards in the reference
        /// </returns>
        public static bool matches(AppRoutingData theMessageData, AppRoutingData theReferenceData)
        {
            bool result = false;

            Genetibase.NuGenHL7.protocol.AppRoutingData ref_Renamed = theReferenceData;
            Genetibase.NuGenHL7.protocol.AppRoutingData msg         = theMessageData;

            if (matches(msg.MessageType, ref_Renamed.MessageType) && matches(msg.TriggerEvent, ref_Renamed.TriggerEvent) && matches(msg.ProcessingId, ref_Renamed.ProcessingId) && matches(msg.Version, ref_Renamed.Version))
            {
                result = true;
            }

            return(result);
        }
        /// <param name="theRoutingData">
        /// </param>
        /// <returns> the binding with an EXACT match on routing data if one exists
        /// </returns>
        private Binding findBinding(AppRoutingData theRoutingData)
        {
            Binding result = null;

            for (int i = 0; i < myBindings.Count && result == null; i++)
            {
                Binding binding = (Binding)myBindings[i];
                if (theRoutingData.Equals(binding.routingData))
                {
                    result = binding;
                }
            }
            return(result);
        }
        /// <param name="theRoutingData">
        /// </param>
        /// <returns> the application from the binding with a WILDCARD match, if one exists
        /// </returns>
        private NuGenReceivingApplication findDestination(AppRoutingData theRoutingData)
        {
            NuGenReceivingApplication result = null;

            for (int i = 0; i < myBindings.Count && result == null; i++)
            {
                Binding binding = (Binding)myBindings[i];
                if (matches(theRoutingData, binding.routingData) && binding.active)
                {
                    result = binding.application;
                }
            }
            return(result);
        }
 public Binding(AppRoutingData theRoutingData, bool isActive, NuGenReceivingApplication theApplication)
 {
     routingData = theRoutingData;
     active      = isActive;
     application = theApplication;
 }
        /// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.bindApplication(">
        /// Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData, Genetibase.NuGenHL7.protocol.ReceivingApplication)
        /// </seealso>
        public virtual void  bindApplication(AppRoutingData theRoutingData, NuGenReceivingApplication theApplication)
        {
            Binding binding = new Binding(theRoutingData, true, theApplication);

            myBindings.Add(binding);
        }
		/// <param name="theMessageData">routing data related to a particular message
		/// </param>
		/// <param name="theReferenceData">routing data related to a binding, which may include 
		/// wildcards 
		/// </param>
		/// <param name="exact">if true, each field must match exactly
		/// </param>
		/// <returns> true if the message data is consist with the reference data, ie all 
		/// values either match or are wildcards in the reference
		/// </returns>
		public static bool matches(AppRoutingData theMessageData, AppRoutingData theReferenceData)
		{
			
			bool result = false;
			
			Genetibase.NuGenHL7.protocol.AppRoutingData ref_Renamed = theReferenceData;
			Genetibase.NuGenHL7.protocol.AppRoutingData msg = theMessageData;
			
			if (matches(msg.MessageType, ref_Renamed.MessageType) && matches(msg.TriggerEvent, ref_Renamed.TriggerEvent) && matches(msg.ProcessingId, ref_Renamed.ProcessingId) && matches(msg.Version, ref_Renamed.Version))
			{
				
				result = true;
			}
			
			return result;
		}
			public Binding(AppRoutingData theRoutingData, bool isActive, NuGenReceivingApplication theApplication)
			{
				routingData = theRoutingData;
				active = isActive;
				application = theApplication;
			}
		/// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.enableBinding(Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData)">
		/// </seealso>
		public virtual void  enableBinding(AppRoutingData theRoutingData)
		{
			Binding b = findBinding(theRoutingData);
			if (b != null)
			{
				b.active = true;
			}
		}
		/// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.bindApplication(">
		/// Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData, Genetibase.NuGenHL7.protocol.ReceivingApplication)
		/// </seealso>
		public virtual void  bindApplication(AppRoutingData theRoutingData, NuGenReceivingApplication theApplication)
		{
			Binding binding = new Binding(theRoutingData, true, theApplication);
			myBindings.Add(binding);
		}
		/// <param name="theRoutingData">
		/// </param>
		/// <returns> the binding with an EXACT match on routing data if one exists 
		/// </returns>
		private Binding findBinding(AppRoutingData theRoutingData)
		{
			Binding result = null;
			for (int i = 0; i < myBindings.Count && result == null; i++)
			{
				Binding binding = (Binding) myBindings[i];
				if (theRoutingData.Equals(binding.routingData))
				{
					result = binding;
				}
			}
			return result;
		}
		/// <param name="theRoutingData">
		/// </param>
		/// <returns> the application from the binding with a WILDCARD match, if one exists
		/// </returns>
		private NuGenReceivingApplication findDestination(AppRoutingData theRoutingData)
		{
			NuGenReceivingApplication result = null;
			for (int i = 0; i < myBindings.Count && result == null; i++)
			{
				Binding binding = (Binding) myBindings[i];
				if (matches(theRoutingData, binding.routingData) && binding.active)
				{
					result = binding.application;
				}
			}
			return result;
		}
		/// <seealso cref="Genetibase.NuGenHL7.protocol.ApplicationRouter.hasActiveBinding(Genetibase.NuGenHL7.protocol.ApplicationRouter.AppRoutingData)">
		/// </seealso>
		public virtual bool hasActiveBinding(AppRoutingData theRoutingData)
		{
			bool result = false;
			NuGenReceivingApplication app = findDestination(theRoutingData);
			if (app != null)
			{
				result = true;
			}
			return result;
		}