Esempio n. 1
0
        public IEnumerable <DymeCase> CasesFromConfigs(DymeConfig mainConfig, IEnumerable <DymeConfig> configLibrary)
        {
            var postApplyConfigProperties = new List <DymeConfigProperty>();
            /// Ensure config naming and structure...
            var namedConfigLibrary = configLibrary.Select(c => c.ConfigWithNameFromConfigWithNameProperty(_regexMatchForSpecialPropertyConfigName));

            mainConfig = mainConfig.ConfigWithNameFromConfigWithNameProperty(_regexMatchForSpecialPropertyConfigName);
            /// Get relevant configs from library...
            var relevantConfigLibrary = GetRelevantConfigsFromLibrary(mainConfig, namedConfigLibrary);

            /// Pre-Process library configs (extract post-apply-cases)...
            postApplyConfigProperties.AddRange(PreProcessConfigAndReturnPostApplyConfigs(mainConfig, out DymeConfig processedMainConfig));
            var processedConfigLibrary = new List <DymeConfig>();

            foreach (var libraryConfig in relevantConfigLibrary)
            {
                postApplyConfigProperties.AddRange(PreProcessConfigAndReturnPostApplyConfigs(libraryConfig, out DymeConfig processedLibraryConfig));
                processedConfigLibrary.Add(processedLibraryConfig);
            }
            /// Convert configs to node tree...
            var nodeTree = NodeTreeFromConfigs(mainConfig, processedConfigLibrary);
            /// Convert node tree to cases...
            var cases = CasesFromNodeTree(nodeTree);
            ///Apply post-apply-cases...
            var finalCases = CreatePoolProperties(cases, postApplyConfigProperties);

            return(finalCases.ToList());
        }
Esempio n. 2
0
        private IEnumerable <DymeConfigProperty> PreProcessConfigAndReturnPostApplyConfigs(DymeConfig inConfig, out DymeConfig outConfig)
        {
            outConfig = inConfig.ConfigWithNameFromConfigWithNameProperty();
            var excludedProperties = inConfig.Properties.Where(p => p.ExpansionType == ExpansionTypeEnum.pool).ToList();

            excludedProperties.ForEach(p => p.CorrelationKey = p.CorrelationKey ?? Guid.NewGuid().ToString());
            var placeholderProperties = excludedProperties.Select(p =>
                                                                  new DymeConfigProperty()
            {
                Name           = p.Name,
                Values         = new[] { p.Values.First() },
                ExpansionType  = ExpansionTypeEnum.pool,
                CorrelationKey = p.CorrelationKey
            });
            var includedProperties = inConfig.Properties.Except(excludedProperties).Concat(placeholderProperties);

            outConfig.Properties = includedProperties.ToList();
            return(excludedProperties);
        }