예제 #1
0
        public TextRule ReadScoringRule(XmlNode nodeRepresentation)
        {
            TextPredicate criteria = null;
            double        score    = 0;

            foreach (XmlNode child in nodeRepresentation.ChildNodes)
            {
                if (child.Name == ScoringRulePredicate_Tag)
                {
                    foreach (XmlNode grandchild in child.ChildNodes)
                    {
                        criteria = this.ReadTextPredicate(grandchild);
                        continue;
                    }
                }
                if (child.Name == this.ScoreTag)
                {
                    score = this.ReadDouble(child);
                    continue;
                }
            }
            TextRule rule = new TextRule(criteria, score);

            return(rule);
        }
예제 #2
0
        public UserPreferences_Database ParseUserPreferences(string text)
        {
            UserPreferences_Database db           = new UserPreferences_Database();
            IEnumerable <XmlNode>    nodes        = this.ParseToXmlNodes(text);
            List <string>            feedUrls     = new List <string>();
            List <TextRule>          scoringRules = new List <TextRule>();

            foreach (XmlNode node in nodes)
            {
                if (node.Name == this.FeedTag)
                {
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        if (child.Name == this.FeedUrl_Tag)
                        {
                            string url = this.ReadText(child);
                            feedUrls.Add(url);
                        }
                    }
                }
                if (node.Name == this.ScoringRule_Tag)
                {
                    TextRule rule = this.ReadScoringRule(node);
                    scoringRules.Add(rule);
                }
            }
            db.FeedUrls     = feedUrls;
            db.ScoringRules = scoringRules;
            return(db);
        }
예제 #3
0
        public string ConvertToString(TextRule rule)
        {
            Dictionary <string, string> properties = new Dictionary <string, string>();

            properties[this.ScoreTag] = this.ConvertToStringBody(rule.ScoreIfMatches);
            properties[this.ScoringRulePredicate_Tag] = this.ConvertToString(rule.Criteria);
            return(this.ConvertToString(properties, this.ScoringRule_Tag));
        }
 public void OnBack(LayoutChoice_Set layout)
 {
     if (layout == this.newRule_layout)
     {
         TextRule rule = this.newRule_layout.GetRule();
         if (rule != null)
         {
             this.newRule_layout.Clear();
             this.userPreferencesDatabase.AddScoringRule(rule);
             this.viewLayout.UpdateLayout();
         }
     }
 }
예제 #5
0
        public RuleViewModelBase AddTextRule()
        {
            var textRule = new TextRule()
            {
                Name = nameof(TextRule)
            };

            _model.Rules.Add(textRule);
            var vm = _rulesFactory.Create(textRule, this);

            _rules.Add(vm);
            vm.Focus();
            return(vm);
        }
        public TextRule GetRule()
        {
            TextPredicate predicate = this.getPredicate();

            if (predicate == null)
            {
                return(null);
            }
            double score = this.getScore();

            if (score == 0)
            {
                return(null);
            }
            this.openPredicates.Clear();
            this.newWord_box.Text = "";
            this.scoreBox.Text    = "";
            TextRule rule = new TextRule(predicate, score);

            return(rule);
        }
예제 #7
0
 public TextRuleViewModel(TextRule rule)
     : base(rule)
 {
     _rule = rule;
     RefreshName();
 }
예제 #8
0
 public void AddScoringRule(TextRule rule)
 {
     this.rules.Add(rule);
 }
예제 #9
0
        private void Initialize()
        {
            var mapper = BsonMapper.Global;

            mapper.Entity <RuleInfo>()
            .Id(x => x.Id);

            mapper.RegisterType <CompositeRule>(rule =>
            {
                var bson = new BsonDocument
                {
                    ["Type"] = new BsonValue(rule.GetType().Name),
                    [nameof(rule.SelectedType)] = new BsonValue(rule.SelectedType.ToString()),
                    [nameof(rule.IsEnabled)]    = new BsonValue(rule.IsEnabled),
                    [nameof(rule.Name)]         = new BsonValue(rule.Name)
                };
                bson.Add(nameof(rule.Rules), new BsonArray(rule.Rules.Select(r => mapper.ToDocument(r))));
                return(bson);
            }, value =>
            {
                var rule          = new CompositeRule();
                rule.IsEnabled    = value.AsDocument[nameof(rule.IsEnabled)].AsBoolean;
                rule.Name         = value.AsDocument[nameof(rule.Name)].AsString;
                rule.SelectedType =
                    (RuleGroupType)
                    Enum.Parse(typeof(RuleGroupType), value.AsDocument[nameof(rule.SelectedType)].AsString);
                rule.Rules = value.AsDocument[nameof(rule.Rules)].AsArray.Select(v =>
                {
                    var type =
                        typeof(RuleBase).Assembly.GetType(
                            $"{typeof(RuleBase).Namespace}.{v.AsDocument["Type"].AsString}", true);
                    return(mapper.ToObject(type, v.AsDocument) as IRule);
                }).ToList();

                return(rule);
            });
            mapper.RegisterType <TextRule>(
                serialize: rule =>
            {
                var bson = new BsonDocument
                {
                    ["Type"]                       = new BsonValue(rule.GetType().Name),
                    [nameof(rule.Name)]            = new BsonValue(rule.Name),
                    [nameof(rule.IsEnabled)]       = new BsonValue(rule.IsEnabled),
                    [nameof(rule.SelectedAction)]  = new BsonValue(rule.SelectedAction.ToString()),
                    [nameof(rule.Text)]            = new BsonValue(rule.Text),
                    [nameof(rule.IsCaseSensitive)] = new BsonValue(rule.IsCaseSensitive)
                };
                return(bson);
            },
                deserialize: bson =>
            {
                var rule             = new TextRule();
                rule.Name            = bson.AsDocument[nameof(rule.Name)].AsString;
                rule.IsEnabled       = bson.AsDocument[nameof(rule.IsEnabled)].AsBoolean;
                rule.IsCaseSensitive = bson.AsDocument[nameof(rule.IsCaseSensitive)].AsBoolean;
                rule.SelectedAction  =
                    (TextRuleAction)
                    Enum.Parse(typeof(TextRuleAction), bson.AsDocument[nameof(rule.SelectedAction)].AsString);
                rule.Text = bson.AsDocument[nameof(rule.Text)].AsString;


                return(rule);
            });

            mapper.RegisterType <DateRule>(
                serialize: rule =>
            {
                var bson = new BsonDocument
                {
                    ["Type"]                      = new BsonValue(rule.GetType().Name),
                    [nameof(rule.Name)]           = new BsonValue(rule.Name),
                    [nameof(rule.IsEnabled)]      = new BsonValue(rule.IsEnabled),
                    [nameof(rule.SelectedAction)] = new BsonValue(rule.SelectedAction.ToString()),
                    [nameof(rule.Date)]           = !rule.Date.HasValue ? BsonValue.Null : new BsonValue(rule.Date)
                };
                return(bson);
            },
                deserialize: bson =>
            {
                var rule            = new DateRule();
                rule.Name           = bson.AsDocument[nameof(rule.Name)].AsString;
                rule.IsEnabled      = bson.AsDocument[nameof(rule.IsEnabled)].AsBoolean;
                rule.SelectedAction = (DateRuleAction)Enum.Parse(typeof(DateRuleAction), bson.AsDocument[nameof(rule.SelectedAction)].AsString);
                rule.Date           = bson.AsDocument[nameof(rule.Date)].IsNull
                        ? new DateTime?()
                        : bson.AsDocument[nameof(rule.Date)].AsDateTime;

                return(rule);
            });

            mapper.RegisterType <RegexRule>(
                serialize: rule =>
            {
                var bson = new BsonDocument
                {
                    ["Type"]                      = new BsonValue(rule.GetType().Name),
                    [nameof(rule.Name)]           = new BsonValue(rule.Name),
                    [nameof(rule.IsEnabled)]      = new BsonValue(rule.IsEnabled),
                    [nameof(rule.SelectedAction)] = new BsonValue(rule.SelectedAction.ToString()),
                    [nameof(rule.Pattern)]        = new BsonValue(rule.Pattern)
                };
                return(bson);
            },
                deserialize: bson =>
            {
                var rule            = new RegexRule();
                rule.Name           = bson.AsDocument[nameof(rule.Name)].AsString;
                rule.IsEnabled      = bson.AsDocument[nameof(rule.IsEnabled)].AsBoolean;
                rule.SelectedAction = (RegexRuleAction)
                                      Enum.Parse(typeof(RegexRuleAction), bson.AsDocument[nameof(rule.SelectedAction)].AsString);
                rule.Pattern = bson.AsDocument[nameof(rule.Pattern)].AsString;
                return(rule);
            });

            mapper.RegisterType <IRule>(
                serialize: rule => mapper.ToDocument(rule.GetType(), rule),
                deserialize: value =>
            {
                var type =
                    typeof(RuleBase).Assembly.GetType(
                        $"{typeof(RuleBase).Namespace}.{value.AsDocument["Type"].AsString}", true);
                return(mapper.ToObject(type, value.AsDocument) as IRule);
            }
                );
        }