private void CreateChecker(Type checkerType, ParameterizableConfigurationElement checkerConfiguration, Validator validator) { CheckerBase checker = ConfigurableBase.CreateConfigurableItem <CheckerBase>(checkerType, checkerConfiguration != null ? checkerConfiguration.Parameters : null); checker.Arrangement = ArrangementFactory.GetArrangement(checkerConfiguration, validator); _checkers.Add(checker); }
private void CreatePattern(Type patternType, ParameterizableConfigurationElement patternConfiguration, Data.Matcher matcher) { PatternBase pattern = ConfigurableBase.CreateConfigurableItem <PatternBase>(patternType, patternConfiguration != null ? patternConfiguration.Parameters : null); pattern.Configuration = ConfigurationFactory.GetConfiguration(patternConfiguration, matcher); _patterns.Add(pattern); }
internal static Arrangement GetArrangement(ParameterizableConfigurationElement checkerConfiguration, Validator validator) { if (checkerConfiguration == null) { checkerConfiguration = new ParameterizableConfigurationElement(); } IQueryable <Arrangement> arrangements = DataContext.Instance.ArrangementSet .Where(c => c.Validator.ValidatorId == validator.ValidatorId && c.Parameters.Count == checkerConfiguration.Parameters.Count && c.Parameters.All(p => checkerConfiguration.Parameters.AllKeys.Contains(p.Name))); Arrangement arrangement = null; foreach (Arrangement dbArrangement in arrangements) { if (dbArrangement.Parameters.All(p => checkerConfiguration.Parameters[p.Name].Value == p.Value)) { arrangement = dbArrangement; break; } } bool pendingChanges = false; if (arrangement == null) { arrangement = DataContext.Instance.ArrangementSet.Add(new Arrangement { Validator = validator, Description = checkerConfiguration.Description }); foreach (NameValueConfigurationElement parameter in checkerConfiguration.Parameters) { arrangement.Parameters.Add(new Parameter { Name = parameter.Name, Value = parameter.Value }); } pendingChanges = true; } else if (arrangement.Description != checkerConfiguration.Description) { arrangement.Description = checkerConfiguration.Description; pendingChanges = true; } if (pendingChanges) { DataContext.Instance.SaveChanges(); } return(arrangement); }
internal static Configuration GetConfiguration(ParameterizableConfigurationElement patternConfiguration, Matcher matcher) { if (patternConfiguration == null) { patternConfiguration = new ParameterizableConfigurationElement(); } IQueryable <Configuration> configurations = DataContext.Instance.ConfigurationSet .Where(c => c.Matcher.MatcherId == matcher.MatcherId && c.Parameters.Count == patternConfiguration.Parameters.Count && c.Parameters.All(p => patternConfiguration.Parameters.AllKeys.Contains(p.Name))); Configuration configuration = null; foreach (Configuration dbConfiguration in configurations) { if (dbConfiguration.Parameters.All(p => patternConfiguration.Parameters[p.Name].Value == p.Value)) { configuration = dbConfiguration; break; } } bool pendingChanges = false; if (configuration == null) { configuration = DataContext.Instance.ConfigurationSet.Add(new Configuration { Matcher = matcher, Description = patternConfiguration.Description }); foreach (NameValueConfigurationElement parameter in patternConfiguration.Parameters) { configuration.Parameters.Add(new Parameter { Name = parameter.Name, Value = parameter.Value }); } pendingChanges = true; } else if (configuration.Description != patternConfiguration.Description) { configuration.Description = patternConfiguration.Description; pendingChanges = true; } if (pendingChanges) { DataContext.Instance.SaveChanges(); } return(configuration); }