コード例 #1
0
        private static FiltersDefinition ShuffleSimpleRandomFiltersCombination(Mission mission, Dictionary <string, DataCollectionDefinition> collections, string FilterSetkey, Func <ItemNumberRange, string> rangeReformatter = null, int limit = 3)
        {
            FiltersDefinition _filtersDefinition = new FiltersDefinition(FilterSetkey);
            var collection = collections.ToArray()[rnd.Next(0, collections.Count())].Value;

            _filtersDefinition.AddFilters(collection.Parameters, mission);
            // _filtersDefinition.AddFilter("missionName", "{http://a9.com/-/opensearch/extensions/eo/1.0/}platform",  mission.MissionName.Value, mission.MissionName.Label, mission.MissionName.Validator, null);

            IEnumerable <System.Reflection.PropertyInfo> props = mission.GetType().GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(SimpleChoiceAttribute)));

            foreach (var prop in props)
            {
                if (_filtersDefinition.GetFilters().Count() >= limit)
                {
                    continue;
                }
                if (rnd.Next() % 2 == 0)
                {
                    continue;
                }
                var choice = prop.GetValue(mission);
                if (choice == null)
                {
                    continue;
                }
                if (_filtersDefinition.Filters.Any(fd => fd.FullName == ((IMissionFilter)choice).FullName))
                {
                    continue;
                }
                if (choice is StringListChoice)
                {
                    var sl    = choice as StringListChoice;
                    var value = sl.LabelStrings.ToArray()[rnd.Next(0, sl.LabelStrings.Count())];
                    _filtersDefinition.AddFilter(sl.Key, sl.FullName, value.Value, value.Label, value.Validator, null);
                }
                if (choice is ItemNumberRange)
                {
                    var     nb        = choice as ItemNumberRange;
                    int     randomMin = rnd.Next((int)(nb.Min / nb.Step), (int)(nb.Max / nb.Step));
                    decimal min       = new decimal(randomMin * nb.Step);
                    int     randomMax = rnd.Next((int)((int)min / nb.Step), (int)(nb.Max / nb.Step));
                    decimal max       = new decimal(randomMax * nb.Step);
                    var     value     = new double[2] {
                        (double)min, (double)max
                    };
                    var formatter = nb.Formatter;
                    if (rangeReformatter != null)
                    {
                        formatter = rangeReformatter.Invoke(nb);
                    }
                    Func <IOpenSearchResultItem, bool> ivalidator = null;
                    if (nb.ItemValueValidator != null)
                    {
                        ivalidator = nb.ItemValueValidator.Invoke(value);
                    }
                    Func <IOpenSearchResultCollection, bool> cvalidator = null;
                    if (nb.ResultsValidator != null)
                    {
                        cvalidator = nb.ResultsValidator.Invoke(value);
                    }
                    _filtersDefinition.AddFilter(nb.Key, nb.FullName, string.Format(formatter, value.Cast <object>().ToArray()), string.Format("{0} {1}", nb.Label, string.Format(formatter, value.Cast <object>().ToArray())), ivalidator, cvalidator);
                }
            }

            return(_filtersDefinition);
        }