@@ -1848,6 +1848,12 @@ void PrepareInputSchemaMappingParameters(
1848
1848
}
1849
1849
}
1850
1850
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
+
1851
1857
void UpdatedAdvancedFilterParameters ( Hashtable [ ] advancedFilter , EventSubscriptionFilter filter )
1852
1858
{
1853
1859
filter . AdvancedFilters = new List < AdvancedFilter > ( ) ;
@@ -1856,15 +1862,14 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1856
1862
for ( int i = 0 ; i < advancedFilter . Count ( ) ; i ++ )
1857
1863
{
1858
1864
// Validate entries.
1859
- if ( advancedFilter [ i ] . Count != 3 )
1865
+ if ( advancedFilter [ i ] . Count < 2 || advancedFilter [ i ] . Count > 3 )
1860
1866
{
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 } ") ;
1862
1868
}
1863
1869
1864
1870
if ( ! advancedFilter [ i ] . ContainsKey ( "Operator" ) ||
1865
1871
! 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" ) ) ) )
1868
1873
{
1869
1874
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.") ;
1870
1875
}
@@ -1885,6 +1890,7 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1885
1890
1886
1891
List < string > keyValuesList = null ;
1887
1892
List < double ? > keyValuesListForDouble = null ;
1893
+ List < IList < double ? > > keyValuesListForDoubleRanges = null ;
1888
1894
Object [ ] tempValues = ( Object [ ] ) advancedFilter [ i ] [ "values" ] ;
1889
1895
1890
1896
if ( tempValues != null )
@@ -1897,6 +1903,23 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1897
1903
keyValuesList . Add ( ( string ) tempValues [ val ] ) ;
1898
1904
}
1899
1905
}
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
+ }
1900
1923
else if ( operatorValue . ToLower ( ) . Contains ( "number" ) )
1901
1924
{
1902
1925
keyValuesListForDouble = new List < double ? > ( ) ;
@@ -1944,6 +1967,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1944
1967
1945
1968
filter . AdvancedFilters . Add ( stringContainsAdvFilter ) ;
1946
1969
}
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
+ }
1947
1980
else if ( string . Equals ( operatorValue , "StringBeginsWith" , StringComparison . OrdinalIgnoreCase ) )
1948
1981
{
1949
1982
var stringBeginsWithAdvFilter = new StringBeginsWithAdvancedFilter
@@ -1954,6 +1987,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1954
1987
1955
1988
filter . AdvancedFilters . Add ( stringBeginsWithAdvFilter ) ;
1956
1989
}
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
+ }
1957
2000
else if ( string . Equals ( operatorValue , "StringEndsWith" , StringComparison . OrdinalIgnoreCase ) )
1958
2001
{
1959
2002
var stringEndsWithAdvFilter = new StringEndsWithAdvancedFilter
@@ -1964,6 +2007,16 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
1964
2007
1965
2008
filter . AdvancedFilters . Add ( stringEndsWithAdvFilter ) ;
1966
2009
}
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
+ }
1967
2020
else if ( string . Equals ( operatorValue , "NumberIn" , StringComparison . OrdinalIgnoreCase ) )
1968
2021
{
1969
2022
var numberInAdvFilter = new NumberInAdvancedFilter
@@ -2024,6 +2077,26 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
2024
2077
2025
2078
filter . AdvancedFilters . Add ( numberLessThanOrEqualsAdvFilter ) ;
2026
2079
}
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
+ }
2027
2100
else if ( string . Equals ( operatorValue , "BoolEquals" , StringComparison . OrdinalIgnoreCase ) )
2028
2101
{
2029
2102
var boolEqualsAdvFilter = new BoolEqualsAdvancedFilter
@@ -2034,6 +2107,24 @@ void UpdatedAdvancedFilterParameters(Hashtable[] advancedFilter, EventSubscripti
2034
2107
2035
2108
filter . AdvancedFilters . Add ( boolEqualsAdvFilter ) ;
2036
2109
}
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
+ }
2037
2128
else
2038
2129
{
2039
2130
throw new Exception ( $ "Invalid Advanced Filter parameter. Unsupported operator for advanced filter #{ i + 1 } .") ;
0 commit comments