Ejemplo n.º 1
0
        private static FilterType ReadAdvancedFilterType(JsonElement element)
        {
            var filterType = FilterType.Unknown;

            var comparisonKind = element
                                 .GetOptionalChild(ReportLayoutDocument.FilterCondition)
                                 ?.GetChild(ReportLayoutDocument.FilterComparison)
                                 ?.GetChild(ReportLayoutDocument.FilterComparisonKind);

            var negatedComparisonKind = element
                                        .GetOptionalChild(ReportLayoutDocument.FilterCondition)
                                        ?.GetChild(ReportLayoutDocument.FilterNot)
                                        ?.GetChild(ReportLayoutDocument.FilterExpression)
                                        ?.GetChild(ReportLayoutDocument.FilterComparison)
                                        ?.GetChild(ReportLayoutDocument.FilterComparisonKind);

            if (comparisonKind.HasValue &&
                comparisonKind.Value.ValueKind == JsonValueKind.Number)
            {
                var kind = comparisonKind.Value.GetInt32();
                filterType = kind switch
                {
                    0 => GetDirectComparisonFllterType(element),

                    1 => FilterType.IsGreaterThan,

                    2 => FilterType.IsGreaterThanOrEqualTo,

                    3 => FilterType.IsLessThan,

                    4 => FilterType.IsLessThanOrEqualTo,

                    _ => FilterType.Unknown
                };
            }

            if (negatedComparisonKind.HasValue &&
                negatedComparisonKind.Value.ValueKind == JsonValueKind.Number)
            {
                var kind = negatedComparisonKind.Value.GetInt32();
                filterType = kind switch
                {
                    0 => GetDirectComparisonFllterType(element, true),

                    _ => FilterType.Unknown
                };
            }

            return(filterType);
        }
Ejemplo n.º 2
0
        private static FilterType GetDirectComparisonFllterType(JsonElement whereElement, bool negateFilter = false)
        {
            var valueElement = whereElement
                               .GetOptionalChild(ReportLayoutDocument.FilterCondition)
                               ?.GetOptionalChild(ReportLayoutDocument.FilterNot)
                               ?.GetOptionalChild(ReportLayoutDocument.FilterExpression)
                               ?.GetChild(ReportLayoutDocument.FilterComparison)
                               ?.GetChild(ReportLayoutDocument.FilterRight)
                               ?.GetChild(ReportLayoutDocument.FilterLiteral)
                               ?.GetChild(ReportLayoutDocument.FilterValue);

            var nullValue = valueElement.HasValue &&
                            valueElement.Value.ValueKind == JsonValueKind.String &&
                            valueElement.Value.GetString() == ReportLayoutDocument.FilterBlankValue;

            return(negateFilter
                ? nullValue
                    ? FilterType.IsNotBlank
                    : FilterType.IsNot
                : nullValue
                    ? FilterType.IsBlank
                    : FilterType.Is);
        }