public void AddDefaultRule()
        {
            RuleWithSettingsMetadata defaultRule = new RuleWithSettingsMetadata(Guid.NewGuid().ToString(), "New Rule", false, RemoteConfigDataManager.defaultRulePriority, "", 100,
                                                                                new List <RsKvtData>(), null, null);

            m_DataManager.UpdateRule(defaultRule);
        }
 /// <summary>
 /// Adds a rule to the Rules data store. This will add it to the rulesList.
 /// </summary>
 /// <param name="newRule">The RuleWithSettingsMetadata to be added</param>
 public void AddRule(RuleWithSettingsMetadata newRule)
 {
     m_DataStore.rulesList.Add(newRule);
     RulesDataStoreChanged?.Invoke();
     RemoteSettingDataStoreChanged?.Invoke();
     AddRuleToAddedRuleIDs(newRule);
 }
 /// <summary>
 /// Updates the attributes for a given rule. This will update the rule in the rulesList.
 /// </summary>
 /// <param name="ruleId">ID of the rule being updated</param>
 /// <param name="newRule">RuleWithSettingsMetadata object containing the new attributes</param>
 public void UpdateRuleAttributes(string ruleId, RuleWithSettingsMetadata newRule)
 {
     if (ValidateRule(newRule))
     {
         var ruleIndex = m_DataStore.rulesList.FindIndex(r => r.id == ruleId);
         m_DataStore.rulesList[ruleIndex] = newRule;
         RulesDataStoreChanged?.Invoke();
         AddRuleToUpdatedRuleIDs(newRule.id);
     }
 }
 /// <summary>
 /// Checks to see if the given rule's priority is valid.
 /// </summary>
 /// <param name="rule">RuleWithSettingsMetadata object to be validated</param>
 /// <returns>true if the rule's priority is valid, false if it is not valid</returns>
 public bool ValidateRulePriority(RuleWithSettingsMetadata rule)
 {
     if (rule.priority < 0 || rule.priority > 1000)
     {
         Debug.LogWarning("Rule: " + rule.name + " has an invalid priority. The set priority is " + rule.priority + ". The values for priority must be between " + minRulePriority + " and " + maxRulePriority);
         return(false);
     }
     else
     {
         return(true);
     }
 }
 /// <summary>
 /// Checks to see if the given Rule's attributes are within the accepted range.
 /// </summary>
 /// <param name="rule">RuleWithSettingsMetadata object to be validated</param>
 /// <returns>true if the rule is valid and false if the rule is not valid</returns>
 public bool ValidateRule(RuleWithSettingsMetadata rule)
 {
     if (ValidateRulePriority(rule) && ValidateRuleName(rule))
     {
         dataStoreStatus = m_DataStoreStatus.UnSynchronized;
         return(true);
     }
     else
     {
         dataStoreStatus = m_DataStoreStatus.Error;
         return(false);
     }
 }
        /// <summary>
        /// Checks to see if the given rule's name is valid.
        /// </summary>
        /// <param name="rule">RuleWithSettingsMetadata object to be validated</param>
        /// <returns>true if the rule's name is valid, false if it is not valid</returns>
        public bool ValidateRuleName(RuleWithSettingsMetadata rule)
        {
            var duplicateIndex = m_DataStore.rulesList.FindIndex(rules => rules.name == rule.name);

            if (duplicateIndex == -1)
            {
                return(true);
            }
            else if (m_DataStore.rulesList[duplicateIndex].id == rule.id)
            {
                return(true);
            }
            else
            {
                Debug.LogWarning(m_DataStore.rulesList[duplicateIndex].name + " already exists. Rule names must be unique.");
                return(false);
            }
        }
        /// <summary>
        /// Copies last list of rules from the Remote Config Data Store
        /// </summary>
        public void SetLastCachedRulesList()
        {
            m_DataStore.lastCachedRulesList = new List <RuleWithSettingsMetadata>(m_DataStore.rulesList.Count);

            for (var i = 0; i < m_DataStore.rulesList.Count; i++)
            {
                var newRule = new RuleWithSettingsMetadata(m_DataStore.rulesList[i].id,
                                                           m_DataStore.rulesList[i].name,
                                                           m_DataStore.rulesList[i].enabled,
                                                           m_DataStore.rulesList[i].priority,
                                                           m_DataStore.rulesList[i].condition,
                                                           m_DataStore.rulesList[i].rolloutPercentage,
                                                           new List <RsKvtData>(m_DataStore.rulesList[i].value),
                                                           m_DataStore.rulesList[i].startDate,
                                                           m_DataStore.rulesList[i].endDate);
                m_DataStore.lastCachedRulesList.Add(newRule);
            }
        }
        private void AddRuleToDeletedRuleIDs(RuleWithSettingsMetadata deletedRule)
        {
            bool ruleAdded = false;

            if (m_DataStore.addedRulesIDs.Contains(deletedRule.id))
            {
                m_DataStore.addedRulesIDs.Remove(deletedRule.id);
                ruleAdded = true;
            }

            if (m_DataStore.updatedRulesIDs.Contains(deletedRule.id))
            {
                m_DataStore.updatedRulesIDs.Remove(deletedRule.id);
            }

            if (!ruleAdded)
            {
                m_DataStore.deletedRulesIDs.Add(deletedRule.id);
            }
        }
 /// <summary>
 /// Adds a rule to the Rules data store. This will add it to the rulesList.
 /// </summary>
 /// <param name="newRule">The RuleWithSettingsMetadata to be added</param>
 public void UpdateRule(RuleWithSettingsMetadata newRule)
 {
     if (newRule.name.StartsWith("New Rule"))
     {
         int maxNewRuleNumber = 1;
         List <RuleWithSettingsMetadata> newRuleList = m_DataStore.rulesList.FindAll(rule => rule.name.Contains(newRule.name));
         if (newRuleList.Count > 0)
         {
             if (newRuleList[0].name == "New Rule" && newRuleList.Count == 1)
             {
                 newRule.name = newRule.name.Insert(8, " " + maxNewRuleNumber);
                 AddRule(newRule);
             }
             else if (newRuleList.Count == 1)
             {
                 maxNewRuleNumber = Int32.Parse(newRuleList[0].name.Replace("New Rule ", "")) + 1;
                 newRule.name     = newRule.name.Insert(8, " " + maxNewRuleNumber);
                 AddRule(newRule);
             }
             else
             {
                 var maxNewRule = newRuleList.OrderByDescending(rule => rule.name).First().name;
                 maxNewRuleNumber = Int32.Parse(maxNewRule.Replace("New Rule ", "")) + 1;
                 newRule.name     = newRule.name.Insert(8, " " + maxNewRuleNumber);
                 AddRule(newRule);
             }
         }
         else
         {
             AddRule(newRule);
         }
     }
     else
     {
         AddRule(newRule);
     }
 }
 Rule StringMetadataFromRule(RuleWithSettingsMetadata ruleWithSettingsMetadata)
 {
     return(new Rule(ruleWithSettingsMetadata.id, ruleWithSettingsMetadata.name, ruleWithSettingsMetadata.enabled, ruleWithSettingsMetadata.priority,
                     ruleWithSettingsMetadata.condition, ruleWithSettingsMetadata.rolloutPercentage, StripMetadataFromRSList(ruleWithSettingsMetadata.value),
                     ruleWithSettingsMetadata.startDate, ruleWithSettingsMetadata.endDate));
 }
 public void UpdateRuleAttributes(string ruleId, RuleWithSettingsMetadata newRule)
 {
     m_DataManager.UpdateRuleAttributes(ruleId, newRule);
 }
 private void AddRuleToAddedRuleIDs(RuleWithSettingsMetadata newRule)
 {
     m_DataStore.addedRulesIDs.Add(newRule.id);
 }