private static IEnumerable <FiltersDefinition> GenerateFilterDefinitionsFromCollectionsDefinition(CatalogueSetConfiguration catDefinition) { List <FiltersDefinition> filtersDefinition = new List <FiltersDefinition>(); foreach (var collection in catDefinition.Collections) { var fds = new FiltersDefinition(collection.Key); fds.AddFilters(collection.Value.Parameters); fds.AddFilters(catDefinition.Parameters); filtersDefinition.Add(fds); } return(filtersDefinition); }
/// <summary> /// Creates a list of cross filter definitions for a target site against a reference target site. /// </summary> /// <param name="setName">The name of the catalogue set.</param> /// <param name="setConfiguration">The configuration set</param> /// <param name="target">The target</param> /// <returns>A list of cross filter definitions.</returns> internal static IEnumerable <CrossCatalogueCoverageFiltersDefinition> GenerateCrossCatalogueCoverageFiltersDefinition(string setName, CatalogueSetConfiguration setConfiguration, TargetSiteWrapper target) { List <CrossCatalogueCoverageFiltersDefinition> bulkDataDefs = new List <CrossCatalogueCoverageFiltersDefinition>(); // Let's get the baseline var catalogueSetConfiguration = ResolveBaseline(setName, setConfiguration); // Let's get the reference target TargetSiteWrapper ref_target = new TargetSiteWrapper(setConfiguration.ReferenceTargetSite, Configuration.Current.GetTargetSiteConfiguration(setConfiguration.ReferenceTargetSite)); // Let's build the filter defintions foreach (FiltersDefinition pt in GenerateFilterDefinitionsFromCollectionsDefinition(catalogueSetConfiguration)) { FiltersDefinition _targetFiltersDefinition = new FiltersDefinition("[target]"); _targetFiltersDefinition.AddFilters(pt.Filters); _targetFiltersDefinition.AddFilter("count", "{http://a9.com/-/spec/opensearch/1.1/}count", "0", "", null, null); try { _targetFiltersDefinition.AddFilters(catalogueSetConfiguration.Parameters); } catch { } FiltersDefinition _refFiltersDefinition = new FiltersDefinition(_targetFiltersDefinition); _refFiltersDefinition.Name = "[reference]"; // special filter for filtering out product that are not considered as in the reference baseline try { _targetFiltersDefinition.AddFilters(setConfiguration.Parameters); } catch { } bulkDataDefs.Add(new CrossCatalogueCoverageFiltersDefinition( new TargetAndFiltersDefinition(target, _targetFiltersDefinition), new TargetAndFiltersDefinition(ref_target, _refFiltersDefinition) )); } return(bulkDataDefs); }
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); }