Example #1
0
        private IRRuleToken ProcessRRulePart(string rrulePart)
        {
            var rruleKeyValue = SplitRRulePart(rrulePart);

            if (rruleKeyValue.Length != 2)
            {
                throw new RRuleTokenizeException(
                          $"RRule part {rrulePart} contains more than key/value");
            }

            var rruleKey   = rruleKeyValue[0];
            var rruleValue = rruleKeyValue[1];

            var rruleToken = ERRuleToken.SearchRRuleToken(rruleKey);

            if (rruleToken == null)
            {
                throw new RRuleTokenizeException($"RRule key {rruleKey} not found");
            }

            var valueInstance = ParseValue(rruleToken, rruleValue);

            if (valueInstance == null)
            {
                throw new RRuleTokenizeException($"RRule value {rruleValue} is not applicable for key {rruleKey}");
            }

            return(rruleToken.GetTokenInstance(valueInstance));
        }
Example #2
0
        private IRRuleToken ProcessRRulePart(string rrulePart)
        {
            var rruleKeyValue = SplitRRulePart(rrulePart);

            if (rruleKeyValue.Length != 2)
            {
                throw new RRuleTokenizeException(string.Format("RRule part {0} contains more than key/value", rrulePart));
            }

            string rruleKey   = rruleKeyValue[0];
            string rruleValue = rruleKeyValue[1];

            ERRuleToken rruleToken = ERRuleToken.SearchRRuleToken(rruleKey);

            if (rruleToken == null)
            {
                throw new RRuleTokenizeException(string.Format("RRule key {0} not found", rruleKey));
            }

            object valueInstance = ParseValue(rruleToken, rruleValue);

            if (valueInstance == null)
            {
                throw new RRuleTokenizeException(string.Format("RRule value {0} is not applicable for key {1}", rruleValue, rruleKey));
            }

            return(rruleToken.GetTokenInstance(valueInstance));
        }
        public object ParseValue(ERRuleToken rRuleToken, string value)
        {
            try
            {
                if (rRuleToken == ERRuleToken.Freq)
                {
                    return(GetFreqValue(value));
                }

                if (rRuleToken == ERRuleToken.Until)
                {
                    return(GetUntilValue(value));
                }

                if (rRuleToken == ERRuleToken.Count)
                {
                    return(ParseInteger(value));
                }

                if (rRuleToken == ERRuleToken.Interval)
                {
                    return(ParseInteger(value));
                }

                if (rRuleToken == ERRuleToken.ByDay)
                {
                    return(GetByDay(value));
                }

                if (rRuleToken == ERRuleToken.ByMonth)
                {
                    return(ParseInteger(value));
                }

                if (rRuleToken == ERRuleToken.ByMonthDay)
                {
                    return(ParseInteger(value));
                }

                if (rRuleToken == ERRuleToken.BySetPos)
                {
                    return(ParseInteger(value));
                }

                if (rRuleToken == ERRuleToken.Start)
                {
                    return(GetUntilValue(value));
                }
                throw new System.Exception($"Unknown token {rRuleToken.Name.ToUpperInvariant()}");
            }
            catch (RRuleTokenizeException error)
            {
                throw new RRuleTokenizeException($"Value {value} is invalid for key {rRuleToken.Name.ToUpperInvariant()}: {error.Message}");
            }
            catch (System.Exception error)
            {
                throw new RRuleTokenizeException($"Value {value} is invalid for key {rRuleToken.Name.ToUpperInvariant()}: {error.Message}");
            }
        }
Example #4
0
 private object ParseValue(ERRuleToken rruleToken, string payload)
 {
     return(_valueParser.ParseValue(rruleToken, payload));
 }