Пример #1
0
            /// <summary>
            /// Detects whether an item satisfies a label condition.
            /// </summary>
            /// <param name="item">The input item.</param>
            /// <param name="valueComparison">Specifies how label value comparisons are to be performed.</param>
            /// <returns><c>true</c> if the label selector was satisfied.</returns>
            public bool Execute(TItem item, StringComparison valueComparison)
            {
                string actualValue;

                var labels = item.GetLabels();

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

                switch (type)
                {
                case ConditionType.Equal:

                    if (!labels.TryGetValue(this.labelKey, out actualValue))
                    {
                        return(false);
                    }

                    return(string.Equals(labelValue, actualValue, valueComparison));

                case ConditionType.NotEqual:

                    if (!labels.TryGetValue(this.labelKey, out actualValue))
                    {
                        return(false);
                    }

                    return(!string.Equals(labelValue, actualValue, valueComparison));

                case ConditionType.In:

                    if (!labels.TryGetValue(this.labelKey, out actualValue))
                    {
                        return(false);
                    }

                    foreach (var value in labelValues)
                    {
                        if (string.Equals(value, actualValue, valueComparison))
                        {
                            return(true);
                        }
                    }

                    return(false);

                case ConditionType.NotIn:

                    if (!labels.TryGetValue(this.labelKey, out actualValue))
                    {
                        return(false);
                    }

                    foreach (var value in labelValues)
                    {
                        if (string.Equals(value, actualValue, valueComparison))
                        {
                            return(false);
                        }
                    }

                    return(true);

                case ConditionType.Has:

                    return(labels.ContainsKey(this.labelKey));

                case ConditionType.NotHas:

                    return(!labels.ContainsKey(this.labelKey));

                default:

                    throw new NotImplementedException();
                }
            }