/// <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(); } }