예제 #1
0
        private static PivotViewerPropertyOptions GetPropertyOptions(FacetCategory category, PivotViewerPropertyType type)
        {
            var option = PivotViewerPropertyOptions.None;

            if (category.Type == FacetType.LongString)
            {
                option |= PivotViewerPropertyOptions.WrappingText;
            }

            if (!category.IsFilterVisibleSpecified || category.IsFilterVisible)
            {
                option |= PivotViewerPropertyOptions.CanFilter;
            }

            if (category.IsMetaDataVisibleSpecified && !category.IsMetaDataVisible)
            {
                option |= PivotViewerPropertyOptions.Private;
            }

            if ((!category.IsWordWheelVisibleSpecified || category.IsWordWheelVisible) && PivotViewerProperty.IsSearchableSchemaType(type))
            {
                option |= PivotViewerPropertyOptions.CanSearchText;
            }

            return(option);
        }
예제 #2
0
        private static Dictionary <string, int> GetSortOrderValues(FacetCategory category, string name)
        {
            if (category.Extension?.SortOrder == null)
            {
                return(null);
            }

            if (category.Type != FacetType.String && category.Type != FacetType.LongString)
            {
                throw new InvalidDataException($"A sort order was provided for facet category {name} of type {category.Type}.");
            }

            var sortOrderValues = new Dictionary <string, int>(StringComparer.InvariantCultureIgnoreCase);

            for (int k = 0; k < category.Extension.SortOrder.SortValue.Length; k++)
            {
                var key = category.Extension.SortOrder.SortValue[k].Value;

                if (sortOrderValues.ContainsKey(key))
                {
                    throw new InvalidDataException($"The sort order contains contains multiple {key} keys for facet category {name}.");
                }
                ;

                sortOrderValues.Add(category.Extension.SortOrder.SortValue[k].Value, k);
            }
            return(sortOrderValues);
        }
예제 #3
0
        private static string GetFormatString(FacetCategory category, PivotViewerPropertyType propType)
        {
            var format = category.Format;

            // special case for decimal with the "C[#]" format
            if (propType == PivotViewerPropertyType.Decimal && !string.IsNullOrEmpty(category.Format) && category.Format.StartsWith("C"))
            {
                format = "'$'##,0";
                if (category.Format.Length <= 1 || !int.TryParse(category.Format.Substring(1, 1), NumberStyles.Any, CultureInfo.InvariantCulture, out int digits))
                {
                    digits = 2;
                }
                if (digits > 0)
                {
                    format = string.Concat(format, ".");
                    format.PadRight(digits, '0');
                }
            }

            return(format);
        }
예제 #4
0
        private static PivotViewerPropertyType GetPropertyType(FacetCategory category)
        {
            switch (category.Type)
            {
            case FacetType.String:
                return(PivotViewerPropertyType.Text);

            case FacetType.LongString:
                return(PivotViewerPropertyType.Text);

            case FacetType.Number:
                return(PivotViewerPropertyType.Decimal);

            case FacetType.DateTime:
                return(PivotViewerPropertyType.DateTime);

            case FacetType.Link:
                return(PivotViewerPropertyType.Link);

            default:
                throw new ArgumentException($"Facet type {category.Type} is unsupported.", nameof(category));
            }
        }
예제 #5
0
        private static List <CalendarDateRange> GetDateRanges(FacetCategory category, string name)
        {
            if (category.Extension?.DateRanges == null)
            {
                return(null);
            }

            if (category.Type != FacetType.DateTime)
            {
                throw new InvalidDataException($"Date ranges were provided on the non-date/time facet category {name}.");
            }

            var calendarDateRanges = new List <CalendarDateRange>();
            var addedRangeNames    = new HashSet <string>();

            foreach (var range in category.Extension.DateRanges)
            {
                var rangeName = range.Name.Trim();

                if (string.IsNullOrEmpty(rangeName))
                {
                    throw new InvalidDataException($"Some date ranges do not have a valid name for facet category {name}.");
                }
                if (!addedRangeNames.Add(rangeName))
                {
                    throw new InvalidDataException($"Duplicate date range name {rangeName} for facet category {name}.");
                }
                if (range.UpperBound < range.LowerBound)
                {
                    throw new InvalidDataException($"Date range upper bown is less than the lower bound for facet category {name}.");
                }

                calendarDateRanges.Add(new CalendarDateRange(range.LowerBound, range.UpperBound, rangeName));
            }
            return(calendarDateRanges);
        }