/// <summary>
        /// Restituisce se la risorsa ha un attributo attivo che abilita
        /// la procedura di intestatura
        /// </summary>
        /// <param name="endPoint">Risorsa di cui valutare gli attributi</param>
        /// <param name="attributeName">Attributo da ricercare</param>
        /// <returns>Se l'attributo è presente, attivo e con valore 1</returns>
        public static bool HasActiveBooleanAttribute(this IDncEndPoint endPoint, string attributeName)
        {
            if (endPoint == null)
            {
                return(false);
            }

            var channel = endPoint.GetChannel();

            if (channel == null)
            {
                return(false);
            }

            var attributes = channel.Settings.Customization.Attributes;

            if (attributes == null)
            {
                return(false);
            }

            var outResult = false;

            var isValid = attributes.TryGetActiveAttribute(attributeName, ValueContainerType.Boolean, out outResult);

            return(isValid && outResult);
        }
        /// <summary>
        /// Verifica se è presente un attributo di tipo stringa e ne restituisce il valore
        /// </summary>
        /// <param name="endPoint">EndPoint di cui valutare gli attributi</param>
        /// <param name="attributeName">Attributo da ricercare</param>
        /// <param name="attributeValue">Valore estratto dall'attributo</param>
        /// <returns>Se l'attributo è presente e con un valore valido</returns>
        public static bool TryGetActiveEndPointStringAttribute(this IDncEndPoint endPoint, string attributeName,
                                                               out string attributeValue)
        {
            attributeValue = string.Empty;

            if (endPoint == null)
            {
                return(false);
            }

            var channel = endPoint.GetChannel();

            if (channel == null)
            {
                return(false);
            }

            var attributes = channel.Settings.Customization.Attributes;

            if (attributes == null)
            {
                return(false);
            }

            var isValid = attributes.TryGetActiveAttribute(attributeName, ValueContainerType.String, out attributeValue);

            return(isValid);
        }
        /// <summary>
        /// Verifica se è presente un attributo di tipo stringa e ne restituisce il valore
        /// </summary>
        /// <param name="endPoint">EndPoint di cui valutare gli attributi</param>
        /// <param name="attributeName">Attributo da ricercare</param>
        /// <param name="containerType">Tipo di dato</param>
        /// <param name="attributeValue">Valore estratto dall'attributo</param>
        /// <returns>Se l'attributo è presente e con un valore valido</returns>
        public static bool TryGetEndPointActiveAttribute <T>(this IDncEndPoint endPoint, string attributeName,
                                                             ValueContainerType containerType,
                                                             out T attributeValue)
        {
            attributeValue = default(T);

            if (endPoint == null)
            {
                return(false);
            }

            var channel = endPoint.GetChannel();

            if (channel == null)
            {
                return(false);
            }

            var attributes = channel.Settings.Customization.Attributes;

            if (attributes == null)
            {
                return(false);
            }

            if (attributes == null ||
                string.IsNullOrWhiteSpace(attributeName))
            {
                return(false);
            }

            var attribute = attributes.FirstOrDefault(a => a.Name == attributeName);

            if (attribute == null)
            {
                return(false);
            }

            var isValid = attribute.IsValid &&
                          attribute.Type == containerType &&
                          attribute.TryConvertValueToType(out attributeValue);

            return(isValid);
        }