Example #1
0
            private static FeedRequestContext?ExtractRequestContextFromJsonElement(JsonElement stacc)
            {
                var mode       = stacc.GetProperty("param").GetPropertyString("mode");
                var unifyToken = stacc.GetProperty("param").GetPropertyString("unify_token");
                var sid        = stacc.GetPropertyString("next_max_sid");
                var isLastPage = stacc.GetPropertyLong("is_last_page") == 1;

                return(unifyToken is null || sid is null || mode is null ? null : new FeedRequestContext(unifyToken, sid, mode, isLastPage));
            }
        private static FilterConfiguration BuildFilterConfiguration(JsonElement element)
        {
            if (element.ValueKind == JsonValueKind.Object)
            {
                var filterName     = element.GetPropertyString(ReportLayoutDocument.Name) ?? string.Empty;
                var filterEntity   = GetFilterSourceEntity(element);
                var filterProperty = GetFilterSourceProperty(element);
                var filterTypes    = GetFilterTypes(element);

                return(new FilterConfiguration
                {
                    Name = filterName,
                    SourceEntity = filterEntity,
                    SourceProperty = filterProperty,
                    FilterType = filterTypes.Item1,
                    SecondaryFilterType = filterTypes.Item2,
                    SecondaryFilterCondition = filterTypes.Item3
                });
            }

            return(new FilterConfiguration());
        }
        private static Tuple <FilterType, FilterType?, SecondaryFilterCondition> GetFilterTypes(JsonElement element)
        {
            var        filterType          = FilterType.Unknown;
            FilterType?secondaryFilterType = null;
            var        secondaryConfition  = SecondaryFilterCondition.NotSet;

            var typeProperty = element.GetPropertyString(ReportLayoutDocument.Type);

            if (typeProperty == null)
            {
                return(Tuple.Create <FilterType, FilterType?, SecondaryFilterCondition>
                           (filterType, secondaryFilterType, secondaryConfition));
            }

            if (string.Compare(typeProperty, "Categorical", true) == 0)
            {
                filterType = FilterType.BasicCategorical;
            }
            else if (string.Compare(typeProperty, "TopN", true) == 0)
            {
                filterType = FilterType.TopN;
            }
            else if (string.Compare(typeProperty, "Advanced", true) == 0)
            {
                var whereArray = element.GetChild(ReportLayoutDocument.Filter)
                                 ?.GetChild(ReportLayoutDocument.FilterWhere);

                if (whereArray != null && whereArray.Value.ValueKind == JsonValueKind.Array)
                {
                    var whereEnumerator = whereArray.Value.EnumerateArray();
                    whereEnumerator.MoveNext();

                    var conditionalAnd = whereEnumerator.Current
                                         .GetChild(ReportLayoutDocument.FilterCondition)
                                         ?.GetChild("And");

                    var conditionalOr = whereEnumerator.Current
                                        .GetChild(ReportLayoutDocument.FilterCondition)
                                        ?.GetChild("Or");

                    if (conditionalAnd.HasValue || conditionalOr.HasValue)
                    {
                        var conditionalElement = conditionalAnd ?? conditionalOr;

                        //main
                        var leftCondition = conditionalElement?.GetChild("Left");
                        if (leftCondition.HasValue)
                        {
                            filterType = ReadAdvancedFilterType(leftCondition.Value);
                        }

                        var rightCondition = conditionalElement?.GetChild("Right");
                        if (rightCondition.HasValue)
                        {
                            secondaryFilterType = ReadAdvancedFilterType(rightCondition.Value);
                        }

                        secondaryConfition = conditionalAnd.HasValue
                            ? SecondaryFilterCondition.And
                            : SecondaryFilterCondition.Or;
                    }
                    else
                    {
                        filterType = ReadAdvancedFilterType(whereEnumerator.Current);
                    }
                }
            }

            return(Tuple.Create <FilterType, FilterType?, SecondaryFilterCondition>
                       (filterType, secondaryFilterType, secondaryConfition));
        }