Skip to content

Commit 2cb394f

Browse files
Add remaining advanced filters (#19670)
1 parent 8d9609d commit 2cb394f

File tree

2 files changed

+103
-4
lines changed

2 files changed

+103
-4
lines changed

src/EventGrid/EventGrid/ChangeLog.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818
- Additional information about change #1
1919
-->
2020
## Upcoming Release
21+
* Add remaining advanced filters
22+
- StringNotContains
23+
- StringNotBeginsWith
24+
- StringNotEndsWith
25+
- NumberInRange
26+
- NumberNotInRange
27+
- IsNullOrUndefined
28+
- IsNotNull
2129

2230
## Version 1.4.0
2331
* Updated to use the 2021-12-01 API version.

src/EventGrid/EventGrid/Utilities/EventGridClient.cs

Lines changed: 95 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1848,6 +1848,12 @@ void PrepareInputSchemaMappingParameters(
18481848
}
18491849
}
18501850

1851+
List<string> NoValueOperators = new List<string>() { "IsNullOrUndefined", "IsNotNull" };
1852+
bool IsValueRequired(string operatorValue)
1853+
{
1854+
return !NoValueOperators.Exists(o => string.Equals(o, operatorValue, StringComparison.OrdinalIgnoreCase));
1855+
}
1856+
18511857
void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscriptionFilter filter)
18521858
{
18531859
filter.AdvancedFilters = new List<AdvancedFilter>();
@@ -1856,15 +1862,14 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
18561862
for (int i = 0; i < advancedFilter.Count(); i++)
18571863
{
18581864
// Validate entries.
1859-
if (advancedFilter[i].Count != 3)
1865+
if (advancedFilter[i].Count < 2 || advancedFilter[i].Count > 3)
18601866
{
1861-
throw new Exception($"Invalid Advanced Filter parameter:. Unexpected number of entries for advanced filter #{i + 1} as we expect 3 key-value pair while we received {advancedFilter[i].Count}");
1867+
throw new Exception($"Invalid Advanced Filter parameter:. Unexpected number of entries for advanced filter #{i + 1} as we expect 2-3 key-value pair while we received {advancedFilter[i].Count}");
18621868
}
18631869

18641870
if (!advancedFilter[i].ContainsKey("Operator") ||
18651871
!advancedFilter[i].ContainsKey("keY") ||
1866-
!(advancedFilter[i].ContainsKey("value")
1867-
|| advancedFilter[i].ContainsKey("values")))
1872+
(IsValueRequired((string)advancedFilter[i]["operator"]) && !(advancedFilter[i].ContainsKey("value") || advancedFilter[i].ContainsKey("values"))))
18681873
{
18691874
throw new Exception($"Invalid Advanced Filter parameter:. At least one of the key parameters is invalid for advanced filter #{i + 1}. The expected keys are either: Operator, key, and value or values.");
18701875
}
@@ -1885,6 +1890,7 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
18851890

18861891
List<string> keyValuesList = null;
18871892
List<double?> keyValuesListForDouble = null;
1893+
List<IList<double?>> keyValuesListForDoubleRanges = null;
18881894
Object[] tempValues = (Object[])advancedFilter[i]["values"];
18891895

18901896
if (tempValues != null)
@@ -1897,6 +1903,23 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
18971903
keyValuesList.Add((string)tempValues[val]);
18981904
}
18991905
}
1906+
else if (operatorValue.ToLower().Contains("range"))
1907+
{
1908+
keyValuesListForDoubleRanges = new List<IList<double?>>();
1909+
for (int val = 0; val < tempValues.Count(); val++)
1910+
{
1911+
var range = ((object[])tempValues[val]);
1912+
double? minimum = Convert.ToDouble(range[0]);
1913+
double? maximum = Convert.ToDouble(range[1]);
1914+
1915+
if (minimum > maximum)
1916+
{
1917+
throw new Exception($"Invalid Advanced Filter parameter. The minimum value of the range cannot be greater than the maximum value for advanced filter #{i + 1}");
1918+
}
1919+
1920+
keyValuesListForDoubleRanges.Add(new List<double?>() { minimum, maximum });
1921+
}
1922+
}
19001923
else if (operatorValue.ToLower().Contains("number"))
19011924
{
19021925
keyValuesListForDouble = new List<double?>();
@@ -1944,6 +1967,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
19441967

19451968
filter.AdvancedFilters.Add(stringContainsAdvFilter);
19461969
}
1970+
else if (string.Equals(operatorValue, "StringNotContains", StringComparison.OrdinalIgnoreCase))
1971+
{
1972+
var stringNotContainsAdvFilter = new StringNotContainsAdvancedFilter
1973+
{
1974+
Key = keyValue,
1975+
Values = keyValuesList
1976+
};
1977+
1978+
filter.AdvancedFilters.Add(stringNotContainsAdvFilter);
1979+
}
19471980
else if (string.Equals(operatorValue, "StringBeginsWith", StringComparison.OrdinalIgnoreCase))
19481981
{
19491982
var stringBeginsWithAdvFilter = new StringBeginsWithAdvancedFilter
@@ -1954,6 +1987,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
19541987

19551988
filter.AdvancedFilters.Add(stringBeginsWithAdvFilter);
19561989
}
1990+
else if (string.Equals(operatorValue, "StringNotBeginsWith", StringComparison.OrdinalIgnoreCase))
1991+
{
1992+
var stringNotBeginsWithAdvFilter = new StringNotBeginsWithAdvancedFilter
1993+
{
1994+
Key = keyValue,
1995+
Values = keyValuesList
1996+
};
1997+
1998+
filter.AdvancedFilters.Add(stringNotBeginsWithAdvFilter);
1999+
}
19572000
else if (string.Equals(operatorValue, "StringEndsWith", StringComparison.OrdinalIgnoreCase))
19582001
{
19592002
var stringEndsWithAdvFilter = new StringEndsWithAdvancedFilter
@@ -1964,6 +2007,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
19642007

19652008
filter.AdvancedFilters.Add(stringEndsWithAdvFilter);
19662009
}
2010+
else if (string.Equals(operatorValue, "StringNotEndsWith", StringComparison.OrdinalIgnoreCase))
2011+
{
2012+
var stringNotEndsWithAdvFilter = new StringNotEndsWithAdvancedFilter
2013+
{
2014+
Key = keyValue,
2015+
Values = keyValuesList
2016+
};
2017+
2018+
filter.AdvancedFilters.Add(stringNotEndsWithAdvFilter);
2019+
}
19672020
else if (string.Equals(operatorValue, "NumberIn", StringComparison.OrdinalIgnoreCase))
19682021
{
19692022
var numberInAdvFilter = new NumberInAdvancedFilter
@@ -2024,6 +2077,26 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
20242077

20252078
filter.AdvancedFilters.Add(numberLessThanOrEqualsAdvFilter);
20262079
}
2080+
else if (string.Equals(operatorValue, "NumberInRange", StringComparison.OrdinalIgnoreCase))
2081+
{
2082+
var numberInRangeAdvFilter = new NumberInRangeAdvancedFilter
2083+
{
2084+
Key = keyValue,
2085+
Values = (IList<IList<double?>>)keyValuesListForDoubleRanges
2086+
};
2087+
2088+
filter.AdvancedFilters.Add(numberInRangeAdvFilter);
2089+
}
2090+
else if (string.Equals(operatorValue, "NumberNotInRange", StringComparison.OrdinalIgnoreCase))
2091+
{
2092+
var numberNotInRangeAdvFilter = new NumberNotInRangeAdvancedFilter
2093+
{
2094+
Key = keyValue,
2095+
Values = (IList<IList<double?>>)keyValuesListForDoubleRanges
2096+
};
2097+
2098+
filter.AdvancedFilters.Add(numberNotInRangeAdvFilter);
2099+
}
20272100
else if (string.Equals(operatorValue, "BoolEquals", StringComparison.OrdinalIgnoreCase))
20282101
{
20292102
var boolEqualsAdvFilter = new BoolEqualsAdvancedFilter
@@ -2034,6 +2107,24 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
20342107

20352108
filter.AdvancedFilters.Add(boolEqualsAdvFilter);
20362109
}
2110+
else if (string.Equals(operatorValue, "IsNullOrUndefined", StringComparison.OrdinalIgnoreCase))
2111+
{
2112+
var isNullOrUndefinedAdvFilter = new IsNullOrUndefinedAdvancedFilter
2113+
{
2114+
Key = keyValue
2115+
};
2116+
2117+
filter.AdvancedFilters.Add(isNullOrUndefinedAdvFilter);
2118+
}
2119+
else if (string.Equals(operatorValue, "IsNotNull", StringComparison.OrdinalIgnoreCase))
2120+
{
2121+
var isNotNullAdvFilter = new IsNotNullAdvancedFilter
2122+
{
2123+
Key = keyValue
2124+
};
2125+
2126+
filter.AdvancedFilters.Add(isNotNullAdvFilter);
2127+
}
20372128
else
20382129
{
20392130
throw new Exception($"Invalid Advanced Filter parameter. Unsupported operator for advanced filter #{i + 1}.");

0 commit comments

Comments
 (0)