Exemplo n.º 1
0
        /// <summary>
        /// Add a parameter with a given name and value.
        /// </summary>
        /// <param name="name">The name of the parameter</param>
        /// <param name="value">The value of the parameter as a FHIR datatype or Resource</param>
        /// <returns>this (Parameters), so you can chain AddParameter calls</returns>
        public SearchParams Add(string name, string value)
        {
            if (name == null)
            {
                throw Error.ArgumentNull("name");
            }
            if (value == null)
            {
                throw Error.ArgumentNull("value");
            }
            if (String.IsNullOrEmpty(value))
            {
                throw Error.Argument("value", "value cannot be empty");
            }

            if (name == SEARCH_PARAM_QUERY)
            {
                Query = value;
            }
            else if (name == SEARCH_PARAM_TEXT)
            {
                Text = value;
            }
            else if (name == SEARCH_PARAM_CONTENT)
            {
                Content = value;
            }
            else if (name == SEARCH_PARAM_COUNT)
            {
                Count = Int32.Parse(value);
            }
            else if (name == SEARCH_PARAM_INCLUDE)
            {
                Include.Add(value);
            }
            else if (name == SEARCH_PARAM_REVINCLUDE)
            {
                RevInclude.Add(value);
            }
            else if (name.StartsWith(SEARCH_PARAM_SORT + SEARCH_MODIFIERSEPARATOR))
            {
                var order = name.Substring(SEARCH_PARAM_SORT.Length + 1).ToLower();

                if (order.StartsWith("asc"))
                {
                    Sort.Add(Tuple.Create(value, SortOrder.Ascending));
                }
                else if (order.StartsWith("desc"))
                {
                    Sort.Add(Tuple.Create(value, SortOrder.Descending));
                }
                else
                {
                    throw Error.Format("Cannot parse sort order '{0}'", null, order);
                }
            }
            else if (name == SEARCH_PARAM_SUMMARY)
            {
                SummaryType st = SummaryType.False;
                if (Enum.TryParse <SummaryType>(value, ignoreCase: true, result: out st))
                {
                    Summary = st;
                }
                else
                {
                    throw Error.Format("Cannot parse summary value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_FILTER)
            {
                Filter = value;
            }
            else if (name == SEARCH_PARAM_CONTAINED)
            {
                if (SEARCH_CONTAINED_TRUE.Equals(value))
                {
                    Contained = ContainedSearch.True;
                }
                else if (SEARCH_CONTAINED_FALSE.Equals(value))
                {
                    Contained = ContainedSearch.False;
                }
                else if (SEARCH_CONTAINED_BOTH.Equals(value))
                {
                    Contained = ContainedSearch.Both;
                }
                else
                {
                    throw Error.Format("Cannot parse contained value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_CONTAINEDTYPE)
            {
                if (SEARCH_CONTAINED_TYPE_CONTAINED.Equals(value))
                {
                    ContainedType = ContainedResult.Contained;
                }
                else if (SEARCH_CONTAINED_TYPE_CONTAINER.Equals(value))
                {
                    ContainedType = ContainedResult.Container;
                }
                else
                {
                    throw Error.Format("Cannot parse containedType value '{0}'", null, value);
                }
            }
            else if (name == SEARCH_PARAM_ELEMENTS)
            {
                Elements.AddRange(value.Split(','));
            }
            else
            {
                Parameters.Add(Tuple.Create(name, value));
            }

            return(this);
        }