private void RendererBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            _selectedItem = RendererBox.SelectedItem as RuleItem;

            btnRemove.Enabled = btnUp.Enabled = btnDown.Enabled = btnProperties.Enabled =
                _selectedItem != null;
        }
Example #2
0
        /// <summary>
        /// Maps a <see cref="LoggingRule" /> entity to a <see cref="RuleResult" /> domain object.
        /// </summary>
        /// <param name="rule">The rule entity to map to a domain object.</param>
        /// <returns>
        /// The <see cref="RuleResult" /> domain object.
        /// </returns>
        public static RuleItem ToRuleItem(LoggingRule rule)
        {
            Debug.Assert(rule != null, "The rule cannot be null.");

            var result = new RuleItem {
                Id = rule.Id
            };
            var options = LoggingRuleOptionsHelpers.Deserialize(rule.Options);

            if (options.Conditions != null)
            {
                foreach (var condition in options.Conditions)
                {
                    result.Conditions.Add(condition);
                }
            }
            if (options.Actions != null)
            {
                foreach (var action in options.Actions)
                {
                    result.Actions.Add(action);
                }
            }
            return(result);
        }
Example #3
0
        public void MainMorph()
        {
            var item = new RuleItem();

            item.Type = RuleItemType.Morphology;
            item.Key  = "ед";
            check(item, new Dictionary <Token, bool>()
            {
                { new Token("тест")
                  {
                      Morphs = new []
                      {
                          new MorphInfo("тест",
                                        new ReadOnlyDictionary <string, string>(
                                            new Dictionary <string, string>()
                            {
                                { "число", "ед" }
                            })),
                      }
                  }, true },
                { new Token("тесты")
                  {
                      Morphs = new []
                      {
                          new MorphInfo("тест",
                                        new ReadOnlyDictionary <string, string>(
                                            new Dictionary <string, string>()
                            {
                                { "число", "мн" }
                            })),
                      }
                  }, false },
                { new Token("мост"), false }
            });
        }
Example #4
0
        /// <summary>
        /// Inserts a rule.
        /// </summary>
        /// <param name="rule">The rule to insert.</param>
        /// <param name="user">The user who owns the rule.</param>
        /// <param name="cancellationToken">A token to observe while waiting for the task to complete.</param>
        /// <returns>
        /// A task that represents the asynchronous operation.
        /// </returns>
        public virtual async Task <ValidationResult> CreateAsync(RuleItem rule, AccountItem user, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();
            if (rule == null)
            {
                throw new ArgumentNullException("rule");
            }
            if (user == null)
            {
                throw new ArgumentNullException(nameof(user));
            }
            var ruleEntity = new LoggingRule
            {
                UserId  = user.Id,
                Options = LoggingRuleOptionsHelpers.Serialize(new LoggingRuleOptions {
                    Conditions = rule.Conditions, Actions = rule.Actions
                })
            };

            Context.Add(ruleEntity);
            await SaveChangesAsync(cancellationToken);

            rule.Id = ruleEntity.Id;
            return(ValidationResult.Success);
        }
        private void ShowHideLegend(RuleItem item)
        {
            if (_renderer == null)
            {
                return;
            }

            int index = RendererBox.Items.IndexOf(item);

            if (index == -1)
            {
                return;
            }

            if (!item.ShowLegend)
            {
                for (int i = index + 1; i < RendererBox.Items.Count; i++)
                {
                    if (RendererBox.Items[i] is RuleItem)
                    {
                        break;
                    }
                    RendererBox.Items.RemoveAt(i);
                    i--;
                }
            }
            else if (item.LegendItem != null)
            {
                RendererBox.Items.Insert(index + 1, new LegendItem(item.LegendItem));
            }
        }
Example #6
0
 private void Show(bool state)
 {
     if (state)
     {
         _ruleInfoPanel.SetActive(true);
         if (_isNeedClose)
         {
             _showBtn.SetActive(false);
         }
         int height = 0;
         for (int i = 0, lenth = _rulesParent.transform.childCount; i < lenth; i++)
         {
             RuleItem ruleItem = _rulesParent.transform.GetChild(i).GetComponent <RuleItem>();
             ruleItem.transform.localPosition = new Vector3(0, height);
             height -= (ruleItem.ItemHeight + _cellHeight);
         }
         iTween.MoveTo(_ruleInfoPanel.gameObject, _toPos.position, _moveTime);
     }
     else
     {
         iTween.MoveTo(_ruleInfoPanel.gameObject, _fromPos.position, _moveTime);
         float showBtnTime = _moveTime - _showPlayBtnTime;
         if (showBtnTime <= 0)
         {
             showBtnTime = 0;
         }
         Invoke("OnBackFinished", showBtnTime);
     }
 }
Example #7
0
        private static IEnumerable <RuleItem> FindUpRule(RuleList ruleList, RuleItem emptyItem, ref List <Used> usedRules)
        {
            var lead = new HashSet <RuleItem>();

            foreach (var rule in ruleList.Rules)
            {
                var item = rule.Items.Where(x => x.Value == emptyItem.Value).ToList();
                if (item.Count != 0)
                {
                    foreach (var index in item.Select(t => rule.Items.IndexOf(t)))
                    {
                        if (!usedRules.Contains(new Used(rule, index)))
                        {
                            if (index == rule.Items.Count - 1)
                            {
                                usedRules.Add(new Used(rule, index));
                                var newEmptyItem = new RuleItem(rule.NonTerminal, false);
                                lead.UnionWith(FindUpRule(ruleList, newEmptyItem, ref usedRules));
                            }
                            else
                            {
                                lead.Add(rule.Items[index + 1]);
                            }
                        }
                    }
                }
            }

            return(lead);
        }
Example #8
0
        public async Task <SaveRuleItemResponse> SaveRuleItem([FromBody] SaveRuleItemRequest request)
        {
            var response = new SaveRuleItemResponse();

            try
            {
                var ruleItem = new RuleItem
                {
                    Id           = request.Id,
                    RuleId       = request.RuleId,
                    RuleItemType = request.RuleItemType,
                    ComputeType  = request.ComputeType,
                    Value        = request.Value,
                    Enabled      = request.Enabled,
                    Desciption   = request.Desciption
                };
                await _ruleRepository.SaveRuleItem(ruleItem);

                response.Success = true;
            }
            catch (Exception e)
            {
                response.Message = e.Message;
                _logger.LogError($"SaveRuleItem 出现异常:{e.Message}", e);
            }
            return(response);
        }
Example #9
0
        public void Ready(RuleItem option)
        {
            tag = option.Param1.Trim();
            var v = option.Param2.Trim().ToUpper();

            tagFunc = v != "0" && v != "F" && v != "N" && v != "FALSE" ? "html" : "text";
            SplitTag(ref tag, ref tagFunc);
        }
Example #10
0
        public async Task <IActionResult> Index()
        {
            //SettingsModel settings;

            MongoClient    _client;
            IMongoDatabase _db;

            _client = new MongoClient("mongodb://localhost:27017");
            _db     = _client.GetDatabase("Thermostat");

            //var collection = _db.GetCollection<SettingsModel>("Settings");
            //var emptyFilter = FilterDefinition<SettingsModel>.Empty;
            ////new FilterDefinitionBuilder<SettingsModel>().
            //var result = await collection.FindAsync(emptyFilter);
            //settings = result.FirstOrDefault();

            //// TODO: this is a good candidate to move to startup?
            //if (settings == null)
            //{
            //    //create the settings
            //    settings = new SettingsModel();
            //    await collection.InsertOneAsync(settings);
            //}

            ViewData["Zones"] = Status.Instance.Zones;

            //TODO: show multiple zones in the UI?
            ViewData["HeatingStatus"] = _engine.Rules.Evaluate(channel: 0) ? "ON" : "OFF";

            //TODO: this is not exactly the MVC way, we should be making a new POST action for this
            if (Request.Method == "POST")
            {
                string newRule = Request.Form["SelectedRules"];
                if (newRule != _engine.Rules.GetType().Name)
                {
                    RuleItem rulesEngine = Status.Instance.Rules.Single(x => newRule == x.ClassName);
                    if (rulesEngine != null)
                    {
                        _engine.Enable(rulesEngine.ClassName);

                        Repository rep      = new Repository();
                        var        settings = rep.GetSettings();
                        settings.ActiveEngine = rulesEngine.ClassName;
                        rep.UpdateSettings(settings);
                    }
                }
            }

            var rules = Status.Instance.Rules.Select(x => new SelectListItem {
                Text     = x.FriendlyName,
                Value    = x.ClassName,
                Selected = _engine.Rules.GetType().Name == x.ClassName
            });

            ViewData["Rules"] = rules;

            return(View());
        }
Example #11
0
        /// <summary>
        /// TODO 查詢規則編號,查詢詳細信息
        /// </summary>
        /// <param name="ruleNo"></param>
        /// <returns></returns>
        public CodeRule queryRuleById(string ruleNo)
        {
            CodeRule      codeRule = null;
            StringBuilder strSql   = new StringBuilder();

            strSql.Append("SELECT uuid,rule_no,rule_desc,op_user,create_time,update_user,update_time FROM t_rule_info where rule_no=@ruleNo AND del_flag is null");
            MySqlParameter[] parameters =
            {
                new MySqlParameter("@ruleNo", MySqlDbType.VarChar, 900),
            };
            parameters[0].Value = ruleNo;
            DataSet ds = SQLHelper.ExecuteDataset(SQLHelper.ConnectionString, CommandType.Text, strSql.ToString(), parameters);

            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                codeRule            = new CodeRule();
                codeRule.Uuid       = ds.Tables[0].Rows[0]["uuid"].ToString();
                codeRule.Ruleno     = ds.Tables[0].Rows[0]["rule_no"].ToString();
                codeRule.RuleDesc   = ds.Tables[0].Rows[0]["rule_desc"].ToString();
                codeRule.Opuser     = ds.Tables[0].Rows[0]["op_user"].ToString();
                codeRule.Createtime = ds.Tables[0].Rows[0]["create_time"].ToString();
                codeRule.UpdateUser = ds.Tables[0].Rows[0]["update_user"].ToString();
                codeRule.Updatetime = ds.Tables[0].Rows[0]["update_time"].ToString();
            }
            if (codeRule != null)
            {
                List <RuleItem> ruleItems = null;
                StringBuilder   strSql1   = new StringBuilder();
                strSql1.Append("SELECT uuid,rule_no,seq_no,rule_type,rule_value,rule_length,op_user,create_time,update_user,update_time FROM t_code_rule WHERE rule_no = @ruleNo AND del_flag is null ORDER BY seq_no ASC");
                MySqlParameter[] parameters1 =
                {
                    new MySqlParameter("@ruleNo", MySqlDbType.VarChar, 900),
                };
                parameters1[0].Value = ruleNo;
                DataSet ds1 = SQLHelper.ExecuteDataset(SQLHelper.ConnectionString, CommandType.Text, strSql1.ToString(), parameters1);
                if (ds1 != null && ds1.Tables.Count > 0 && ds1.Tables[0].Rows.Count > 0)
                {
                    ruleItems = new List <RuleItem>();
                    foreach (DataRow dr in ds1.Tables[0].Rows)
                    {
                        RuleItem ruleItem = new RuleItem();
                        ruleItem.Uuid       = dr["uuid"].ToString();
                        ruleItem.Ruleno     = dr["rule_no"].ToString();
                        ruleItem.Seqno      = dr["seq_no"].ToString();
                        ruleItem.Ruletype   = dr["rule_type"].ToString();
                        ruleItem.Rulevalue  = dr["rule_value"].ToString();
                        ruleItem.Rulelength = int.Parse(dr["rule_length"].ToString());
                        ruleItem.Opuser     = dr["op_user"].ToString();
                        ruleItem.Createtime = dr["create_time"].ToString();
                        ruleItem.UpdateUser = dr["update_user"].ToString();
                        ruleItem.Updatetime = dr["update_time"].ToString();
                        ruleItems.Add(ruleItem);
                    }
                }
                codeRule.RuleItem = ruleItems;
            }
            return(codeRule);
        }
Example #12
0
 /// <summary>
 /// Returns with a <see cref="RuleResultDto" /> view of the <see cref="RuleItem" /> domain object.
 /// </summary>
 /// <param name="rule">The domain object to map to a data transfer object (DTO).</param>
 /// <returns>
 /// The <see cref="RuleResultDto" />.
 /// </returns>
 public static RuleResultDto ToRuleResultDto(RuleItem rule)
 {
     return(new RuleResultDto
     {
         Id = rule.Id,
         Actions = rule.Actions,
         Conditions = rule.Conditions
     });
 }
Example #13
0
        public void EnableRule(string order)
        {
            RuleItem rule = this.FindRuleByOrder(order);

            if (rule != null)
            {
                rule.Enabled = "true";
            }
        }
Example #14
0
        private void _createRules(RuleItem item, out RuleItem resultItem, out IEnumerable <Rule> resultRules)
        {
            int?min      = item.Counter == Counter.Number ? (int?)item.CounterValue.MinValue : null;
            int?max      = item.Counter == Counter.Number ? (int?)item.CounterValue.MaxValue : null;
            var cacheKey = new Tuple <string, Counter, RuleItemType, int?, int?>(item.Key, item.Counter, item.Type, min, max);

            if (_cache.ContainsKey(cacheKey))
            {
                resultItem = new RuleItem(RuleItemType.NonTerminal,
                                          _cache[cacheKey],
                                          conditions: item.Conditions,
                                          localName: item.LocalName);
                resultRules = null;
                return;
            }


            string key = item.Type == RuleItemType.NonTerminal ? item.Key : $"TERMINAL_{_termId++}";

            key        = $"{key}_{_keyPrefix(item.Counter, min, max)}";
            resultItem = new RuleItem(RuleItemType.NonTerminal,
                                      key,
                                      conditions: item.Conditions,
                                      localName: item.LocalName);
            item.LocalName = null;
            switch (item.Counter)
            {
            case Counter.Star:
            {
                var starItem = new RuleItem(RuleItemType.NonTerminal,
                                            key,
                                            conditions: item.Conditions);
                resultRules = new[]
                {
                    new Rule(key, new [] { item, starItem }, isPossibleList: true),
                    new Rule(key, new RuleItem[0])
                };
                break;
            }

            case Counter.Plus:
            {
                var starTerm = new RuleItem(item.Type, item.Key, Counter.Star);
                _createRules(starTerm, out var rezStarTerm, out var rezStarRules);
                var list = new List <Rule>()
                {
                    new Rule(key, new[] { item, rezStarTerm }, isPossibleList: true)
                };
                list.AddRange(rezStarRules);
                resultRules = list;
                break;
            }

            case Counter.Question:
            {
                resultRules = new[]
Example #15
0
        public void ModifyRule(string order, string type, string match)
        {
            RuleItem rule = this.FindRuleByOrder(order);

            if (rule != null)
            {
                rule.Type  = type;
                rule.Match = match;
            }
        }
        private void Add_Value_Click(object sender, RoutedEventArgs e)
        {
            Button         bt        = (Button)sender;
            ParamValueItem valueItem = bt.DataContext as ParamValueItem;
            RuleItem       ruleItem  = valueItem.parent;
            int            index     = ruleItem.valuesOfParams.IndexOf(valueItem);

            ruleItem.addValueOfParamByIndex("Пустое значение параметра", index + 1);
            CollectionViewSource.GetDefaultView(ruleItem.valuesOfParams).Refresh();
        }
Example #17
0
        private void btnEditRule_Click(object sender, RoutedEventArgs e)
        {
            RuleItem item = (rulesGrid.SelectedItem as RuleItem);

            if (item == null)
            {
                return;
            }

            firewallPage.ShowRuleWindow(item.Rule);
        }
Example #18
0
 public void WrongConditionArgArray()
 {
     Assert.Throws <WrongConditionArgsException>(() =>
     {
         var item  = new RuleItem();
         item.Type = RuleItemType.Terminal;
         item.Key  = "123";
         item.AddCondition(new Condition("морф", false));
         var rezCond = _manager.GetCondition(item);
     });
 }
        public IRule?Render(RuleItem rule)
        {
            var instance = Render(rule.Name);

            if (instance == null)
            {
                return(null);
            }
            instance.Ready(rule);
            return(instance);
        }
Example #20
0
        public IActionResult On(string applianceId, string accessToken)
        {
            RuleItem rulesEngine = Status.Instance.Rules.Single(x => applianceId == x.ClassName);

            if (rulesEngine != null)
            {
                _engine.Enable(rulesEngine.ClassName);
            }

            return(Ok());
        }
Example #21
0
        public void MainText()
        {
            var item = new RuleItem();

            item.Type = RuleItemType.Terminal;
            item.Key  = "123";
            check(item, new Dictionary <Token, bool>()
            {
                { new Token("123"), true },
                { new Token("1234"), false }
            });
        }
Example #22
0
        public static List <HashSet <RuleItem> > FindLeads(RuleList ruleList)
        {
            var leads = new List <HashSet <RuleItem> >(ruleList.Rules.Count);

            for (var i = 0; i < ruleList.Rules.Count; i++)
            {
                leads.Add(new HashSet <RuleItem>());
                var rule = ruleList.Rules[i];
                if (rule.Items[0].Value == Constants.EmptySymbol)
                {
                    var emptyItem = new RuleItem(rule.NonTerminal, false);
                    var usedRules = new List <Used>();
                    var lead      = FindUpRule(ruleList, emptyItem, ref usedRules).ToHashSet().ToList();
                    leads[i].UnionWith(lead);
                    usedRules.Clear();
                }
                else
                {
                    leads[i].Add(rule.Items[0]);
                }
            }

            while (true)
            {
                var somethingChanged = false;
                foreach (var lead in leads)
                {
                    var nonTerms = lead.Where(x => !x.IsTerminal).ToList();
                    if (nonTerms.Count > 0)
                    {
                        somethingChanged = true;
                    }

                    foreach (var nonTerm in nonTerms)
                    {
                        lead.Remove(nonTerm);
                        var rulesWithNonTerm = ruleList.Rules.Select((x, i) => (x, i))
                                               .Where(x => x.x.NonTerminal == nonTerm.Value).Select(x => x.i).ToList();
                        foreach (var fVal in rulesWithNonTerm.SelectMany(rule => leads[rule]).ToList())
                        {
                            lead.Add(fVal);
                        }
                    }
                }

                if (!somethingChanged)
                {
                    break;
                }
            }

            return(leads);
        }
Example #23
0
        public override void ExitRule_inline_expression(CfgGramParser.Rule_inline_expressionContext context)
        {
            IsInline = false;
            var rule = Grammar.Rules.Last();

            rule.Name       = $"{RulesStack.Peek().Name}:{Guid.NewGuid()}";
            rule.WasInline  = true;
            RuleItem        = new RuleItem();
            RuleItem.Type   = RuleItemType.NonTerminal;
            RuleItem.Key    = rule.Name;
            RuleItem.IsHead = InlineIsHead;
        }
        private void Delete_Value_Click(object sender, RoutedEventArgs e)
        {
            Button         bt        = (Button)sender;
            ParamValueItem valueItem = bt.DataContext as ParamValueItem;
            RuleItem       ruleItem  = valueItem.parent;

            if (ruleItem.valuesOfParams.Count != 1)
            {
                ruleItem.removeValueOfParam(valueItem);
                CollectionViewSource.GetDefaultView(ruleItem.valuesOfParams).Refresh();
            }
        }
        private void Delete_Rule_Click(object sender, RoutedEventArgs e)
        {
            Button   bt       = (Button)sender;
            RuleItem ruleItem = bt.DataContext as RuleItem;

            if (ruleItems.Count != 1)
            {
                ruleItems.Remove(ruleItem);
                refreshNumbersOfRules(ruleItems);
                CollectionViewSource.GetDefaultView(ruleItems).Refresh();
            }
        }
Example #26
0
        public void MainRegex()
        {
            var item = new RuleItem();

            item.Type = RuleItemType.Regex;
            item.Key  = @"123\d*";
            check(item, new Dictionary <Token, bool>()
            {
                { new Token("123"), true },
                { new Token("1234"), true },
                { new Token("123t"), false }
            });
        }
Example #27
0
        private bool Compute(RuleItem ruleItem, Fact fact)
        {
            #region 参数校验
            if (ruleItem.IsNull())
            {
                throw new ArgumentNullException(nameof(ruleItem));
            }
            if (fact.IsNull())
            {
                throw new ArgumentNullException(nameof(fact));
            }
            if (ruleItem.ComputeType.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(ruleItem.ComputeType));
            }
            if (ruleItem.Value.IsNullOrEmpty())
            {
                throw new ArgumentNullException(nameof(ruleItem.Value));
            }
            #endregion

            try
            {
                var ruleValue = ruleItem.Value.Trim().ToLower();

                foreach (var factKey in fact.Keys)
                {
                    var factName  = factKey.Trim().ToLower();
                    var factValue = fact[factName].Trim().ToLower();

                    if (factKey != ruleItem.RuleItemType)
                    {
                        continue;
                    }

                    //是否为基础运算类型
                    var isBaseComputeType = Enum.IsDefined(typeof(BaseComputeType), ruleItem.ComputeType);

                    return(isBaseComputeType
                        ? BaseCompute(ruleItem.ComputeType, ruleValue, factValue)
                        : CustomCompute(ruleItem.ComputeType, ruleValue, factValue));
                }

                return(false);
            }
            catch (Exception ex)
            {
                throw new RuleComputeException($"规则运算出错:{ex.Message}", ex);
            }
        }
Example #28
0
        private void check(RuleItem item, Dictionary <Token, bool> tasks)
        {
            var rezCond = _manager.GetCondition(item);

            foreach (var kp in tasks)
            {
                var rez = rezCond.IsValid(kp.Key);
                Assert.AreEqual(kp.Value,
                                rez,
                                "Wrong result for condition '{1}' for text '{0}'",
                                rezCond,
                                kp.Key);
            }
        }
        public MainWindow(ClassificatorForm classificatorForm, InfosStorage storage, List <BuiltInCategory> allCats)
        {
            InitializeComponent();
            this.classificatorForm                = classificatorForm;
            this.storage                          = storage;
            this.ruleItems                        = new ObservableCollection <RuleItem>();
            this.Collection.ItemsSource           = ruleItems;
            this.settings                         = new Settings();
            this.CollectionParamNames.ItemsSource = settings.paramNameItems;
            RuleItem.builtInCats                  = allCats;
            this.checkedExit                      = true;

            if (storage.classificator == null)
            {
                this.storage.classificator  = new List <Classificator>();
                this.storage.instanseParams = new List <string>();
                RuleItem firstRuleItem = new RuleItem("", "", BuiltInCategory.INVALID);
                firstRuleItem.addValueOfParam("Пустое значение параметра");
                ruleItems.Add(firstRuleItem);
                settings.addParamName("Введите имя параметра");
            }
            else
            {
                if (storage.instanceOrType == 1)
                {
                    InstanceRadioButton.IsChecked = true;
                }
                else if (storage.instanceOrType == 2)
                {
                    TypeRadioButton.IsChecked = true;
                }
                foreach (var item in storage.classificator)
                {
                    RuleItem ruleItem = new RuleItem(item.FamilyName, item.TypeName, item.BuiltInName);
                    foreach (var pv in item.paramsValues)
                    {
                        ruleItem.addValueOfParam(pv);
                    }
                    ruleItem.colourOfRule = "#4C87B3";
                    ruleItems.Add(ruleItem);
                }
                foreach (var item in storage.instanseParams)
                {
                    settings.addParamName(item);
                }
            }

            refreshNumbersOfRules(ruleItems);
        }
Example #30
0
        private RuleItem FindRuleByOrder(string order)
        {
            RuleItem result = null;

            foreach (RuleItem item in this.RuleList)
            {
                if (item.Order == order)
                {
                    result = item;
                    break;
                }
            }

            return(result);
        }
Example #31
0
        private void LoadRuleList()
        {
            this.RuleList = new List<RuleItem>();

            XmlDocument document = new XmlDocument();
            document.Load(FiddlerPath.RuleFilePath);

            XmlNodeList ruleNodes = document.DocumentElement.SelectNodes("//InjectionRules/Rule");

            RuleItem rule = null;

            for (int i = 0, l = ruleNodes.Count; i < l; i++ )
            {
                rule = new RuleItem();
                rule.Type = ruleNodes[i].Attributes["Type"].Value;
                rule.Match = ruleNodes[i].Attributes["Match"].Value;
                rule.Enabled = ruleNodes[i].Attributes["Enabled"].Value;
                rule.Order = ruleNodes[i].Attributes["Order"].Value;

                this.RuleList.Add(rule);
            }
        }
Example #32
0
        private void SetColorForCompositeRule(FillColorSource? source, string fillAlpha, RuleItem entry, ICompositeRule r)
        {
            // NOTE: Same naivete as IdentifyColorSource(). Refer to that method for all the gory details

            bool bSetFill = false;
            foreach (ISymbolInstance symInst in r.CompositeSymbolization.SymbolInstance)
            {
                if (bSetFill)
                    break;

                var symRef = GetSymbolFromReference(m_editor.ResourceService, symInst.Reference);
                var simpleSym = symRef as ISimpleSymbolDefinition;
                if (simpleSym == null)
                    throw new NotSupportedException(Strings.CannotCreateThemeFromCompoundSymbolInstance);

                var symName = simpleSym.Name;
                //Find the first path graphic with a fill color
                foreach (var graphic in simpleSym.Graphics)
                {
                    if (bSetFill)
                        break;

                    if (graphic.Type == GraphicElementType.Path)
                    {
                        IPathGraphic path = (IPathGraphic)graphic;
                        if (path.FillColor != null)
                        {
                            string color = path.FillColor;
                            if (source.Value == FillColorSource.PathFillColor)
                            {
                                path.FillColor = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                Debug.WriteLine(string.Format("Set fill color to {0} for symbol instance {1} of symbolization {2} in rule {3}", path.FillColor, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                bSetFill = true;
                                break;
                            }
                            //Is this a parameter?
                            if (color.StartsWith("%") && color.EndsWith("%"))
                            {
                                string paramName = color.Substring(1, color.Length - 2);
                                if (simpleSym.ParameterDefinition != null)
                                {
                                    foreach (var paramDef in simpleSym.ParameterDefinition.Parameter)
                                    {
                                        if (bSetFill)
                                            break;

                                        if (paramDef.Name == paramName)
                                        {
                                            if (source.Value == FillColorSource.SymbolParameterFillColorDefaultValue)
                                            {
                                                paramDef.DefaultValue = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                                Debug.WriteLine(string.Format("Set fill color default parameter value to {0} for symbol instance {1} of symbolization {2} in rule {3}", paramDef.DefaultValue, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                                bSetFill = true;
                                                break;
                                            }

                                            //But wait ... Is there an override for this too?
                                            var ov = symInst.ParameterOverrides;
                                            if (ov != null)
                                            {
                                                foreach (var pov in ov.Override)
                                                {
                                                    if (bSetFill)
                                                        break;

                                                    if (pov.SymbolName == symName && pov.ParameterIdentifier == paramName)
                                                    {
                                                        if (source.Value == FillColorSource.SymbolParameterFillColorOverride)
                                                        {
                                                            pov.ParameterValue = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                                            Debug.WriteLine(string.Format("Set fill color parameter override value to {0} for symbol instance {1} of symbolization {2} in rule {3}", pov.ParameterValue, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                                            bSetFill = true;
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (path.LineColor != null && simpleSym.LineUsage != null)
                        {
                            string color = path.LineColor;
                            if (source.Value == FillColorSource.PathLineColor)
                            {
                                path.LineColor = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                Debug.WriteLine(string.Format("Set line color to {0} for symbol instance {1} of symbolization {2} in rule {3}", path.FillColor, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                bSetFill = true;
                                break;
                            }
                            //Is this a parameter?
                            if (color.StartsWith("%") && color.EndsWith("%"))
                            {
                                string paramName = color.Substring(1, color.Length - 2);
                                if (simpleSym.ParameterDefinition != null)
                                {
                                    foreach (var paramDef in simpleSym.ParameterDefinition.Parameter)
                                    {
                                        if (bSetFill)
                                            break;

                                        if (paramDef.Name == paramName)
                                        {
                                            if (source.Value == FillColorSource.SymbolParameterLineColorDefaultValue)
                                            {
                                                paramDef.DefaultValue = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                                Debug.WriteLine(string.Format("Set line color default parameter value to {0} for symbol instance {1} of symbolization {2} in rule {3}", paramDef.DefaultValue, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                                bSetFill = true;
                                                break;
                                            }

                                            //But wait ... Is there an override for this too?
                                            var ov = symInst.ParameterOverrides;
                                            if (ov != null)
                                            {
                                                foreach (var pov in ov.Override)
                                                {
                                                    if (bSetFill)
                                                        break;

                                                    if (pov.SymbolName == symName && pov.ParameterIdentifier == paramName)
                                                    {
                                                        if (source.Value == FillColorSource.SymbolParameterLineColorOverride)
                                                        {
                                                            pov.ParameterValue = "0x" + fillAlpha + Utility.SerializeHTMLColor(entry.Color, string.IsNullOrEmpty(fillAlpha));
                                                            Debug.WriteLine(string.Format("Set line color parameter override value to {0} for symbol instance {1} of symbolization {2} in rule {3}", pov.ParameterValue, symInst.GetHashCode(), r.CompositeSymbolization.GetHashCode(), r.GetHashCode()));
                                                            bSetFill = true;
                                                            break;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="user">The AdWords user.</param>
        public void Run(AdWordsUser user)
        {
            // Get the UserListService.
              AdwordsUserListService userListService =
              (AdwordsUserListService) user.GetService(AdWordsService.v201601.AdwordsUserListService);

              // First rule item group - users who visited the checkout page and had
              // more than one item in their shopping cart.
              StringRuleItem checkoutStringRuleItem = new StringRuleItem();
              checkoutStringRuleItem.key = new StringKey();
              checkoutStringRuleItem.key.name = "ecomm_pagetype";
              checkoutStringRuleItem.op = StringRuleItemStringOperator.EQUALS;
              checkoutStringRuleItem.value = "checkout";

              RuleItem checkoutRuleItem = new RuleItem();
              checkoutRuleItem.Item = checkoutStringRuleItem;

              NumberRuleItem cartSizeNumberRuleItem = new NumberRuleItem();
              cartSizeNumberRuleItem.key = new NumberKey();
              cartSizeNumberRuleItem.key.name = "cartsize";
              cartSizeNumberRuleItem.op = NumberRuleItemNumberOperator.GREATER_THAN;
              cartSizeNumberRuleItem.value = 1;

              RuleItem cartSizeRuleItem = new RuleItem();
              cartSizeRuleItem.Item = cartSizeNumberRuleItem;

              // Combine the two rule items into a RuleItemGroup so AdWords will AND
              // their rules together.
              RuleItemGroup checkoutMultipleItemGroup = new RuleItemGroup();
              checkoutMultipleItemGroup.items = new RuleItem[] { checkoutRuleItem, cartSizeRuleItem };

              // Second rule item group - users who check out within the next 3 months.
              DateRuleItem startDateDateRuleItem = new DateRuleItem();
              startDateDateRuleItem.key = new DateKey();
              startDateDateRuleItem.key.name = "checkoutdate";
              startDateDateRuleItem.op = DateRuleItemDateOperator.AFTER;
              startDateDateRuleItem.value = DateTime.Now.ToString(DATE_FORMAT_STRING);
              RuleItem startDateRuleItem = new RuleItem();
              startDateRuleItem.Item = startDateDateRuleItem;

              DateRuleItem endDateDateRuleItem = new DateRuleItem();
              endDateDateRuleItem.key = new DateKey();
              endDateDateRuleItem.key.name = "checkoutdate";
              endDateDateRuleItem.op = DateRuleItemDateOperator.BEFORE;
              endDateDateRuleItem.value = DateTime.Now.AddMonths(3).ToString(DATE_FORMAT_STRING);
              RuleItem endDateRuleItem = new RuleItem();
              endDateRuleItem.Item = endDateDateRuleItem;

              // Combine the date rule items into a RuleItemGroup.
              RuleItemGroup checkedOutNextThreeMonthsItemGroup = new RuleItemGroup();
              checkedOutNextThreeMonthsItemGroup.items =
              new RuleItem[] { startDateRuleItem, endDateRuleItem };

              // Combine the rule item groups into a Rule so AdWords will OR the groups
              // together.
              Rule rule = new Rule();
              rule.groups = new RuleItemGroup[] {checkoutMultipleItemGroup,
            checkedOutNextThreeMonthsItemGroup};

              // Create the user list with no restrictions on site visit date.
              ExpressionRuleUserList expressionUserList = new ExpressionRuleUserList();
              expressionUserList.name = "Expression based user list created at " + DateTime.Now.ToString(
              "yyyyMMdd_HHmmss");
              expressionUserList.description = "Users who checked out in three month window OR visited " +
              "the checkout page with more than one item in their cart.";
              expressionUserList.rule = rule;

              // Create the user list restricted to users who visit your site within
              // the next six months.
              DateTime startDate = DateTime.Now;
              DateTime endDate = startDate.AddMonths(6);

              DateSpecificRuleUserList dateUserList = new DateSpecificRuleUserList();
              dateUserList.name = "Date rule user list created at " +
              DateTime.Now.ToString("yyyyMMdd_HHmmss");
              dateUserList.description = String.Format("Users who visited the site between {0} and " +
              "{1} and checked out in three month window OR visited the checkout page " +
              "with more than one item in their cart.", startDate.ToString(DATE_FORMAT_STRING),
              endDate.ToString(DATE_FORMAT_STRING));
              dateUserList.rule = rule;

              // Set the start and end dates of the user list.
              dateUserList.startDate = startDate.ToString(DATE_FORMAT_STRING);
              dateUserList.endDate = endDate.ToString(DATE_FORMAT_STRING);

              // Create operations to add the user lists.
              List<UserListOperation> operations = new List<UserListOperation>();
              foreach (UserList userList in new UserList[] { expressionUserList, dateUserList }) {
            UserListOperation operation = new UserListOperation();
            operation.operand = userList;
            operation.@operator = Operator.ADD;
            operations.Add(operation);
              }

              try {
            // Submit the operations.
            UserListReturnValue result = userListService.mutate(operations.ToArray());

            // Display the results.
            foreach (UserList userListResult in result.value) {
              Console.WriteLine("User list added with ID {0}, name '{1}', status '{2}', " +
              "list type '{3}', accountUserListStatus '{4}', description '{5}'.",
              userListResult.id,
              userListResult.name,
              userListResult.status,
              userListResult.listType,
              userListResult.accountUserListStatus,
              userListResult.description);
            }
              } catch (Exception e) {
            throw new System.ApplicationException("Failed to add rule based user lists.", e);
              }
        }
Example #34
0
        private string GeneratePFX(string word, RuleItem item)
        {
            int deleteCount = 0;
            if (!int.TryParse(item.CharsToDelete, out deleteCount))
            {
                for (int pos = 0; pos < item.CharsToDelete.Length; pos++)
                {
                    if (item.CharsToDelete[pos] == word[pos])
                    {
                        deleteCount++;
                    }
                }
            }

            string tempWord = word.Substring(deleteCount);

            // condition prozatimne
            if (item.Conditions.Count == 1 && item.Conditions.First().First() == '.')
            {
                tempWord = item.StringToAdd + tempWord;
            }

            return tempWord;
        }
Example #35
0
        private string GenerateSFX(string word, RuleItem item)
        {
            string tempWord;
            bool cond = this.CheckCondition(word, item.Conditions, RuleType.SFX);
            if (cond)
            {
                int deleteCount = 0;
                if (!int.TryParse(item.CharsToDelete, out deleteCount))
                {
                    string wordEnd = word.Substring(word.Length - item.CharsToDelete.Length);
                    if (wordEnd == item.CharsToDelete)
                    {
                        deleteCount = item.CharsToDelete.Length;
                    }

                    /*for (int pos = word.Length; pos > (word.Length - item.CharsToDelete.Length); pos--)
                    {
                        if (item.CharsToDelete[pos - word.Length] == word[pos - 1])
                        {
                            deleteCount++;
                        }
                    }*/
                }

                tempWord = word.Substring(0, word.Length - deleteCount) + item.StringToAdd;
            }
            else
            {
                tempWord = null;
            }

            return tempWord;
        }
Example #36
0
 public void AddItem(string key, RuleItem item)
 {
     rules[key].Add(item);
 }
Example #37
0
        public string AddRule(string type, string match)
        {
            int newOrder = 1;

            if (this.RuleList.Count > 0)
            {
                newOrder = int.Parse(this.RuleList[this.RuleList.Count - 1].Order) + 1;
            }

            RuleItem newRule = new RuleItem();
            newRule.Type = type;
            newRule.Match = match;
            newRule.Order = newOrder.ToString();
            newRule.Enabled = "true";

            this.RuleList.Add(newRule);

            return newRule.Order;
        }