| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- //----------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //----------------------------------------------------------------
- namespace System
- {
- using System.Collections.Specialized;
- using System.Runtime;
- using System.ServiceModel;
- using System.ServiceModel.Channels;
- using System.Text;
- // This represents a Query value, which can either be Empty, a Literal or a Variable
- abstract class UriTemplateQueryValue
- {
- readonly UriTemplatePartType nature;
- static UriTemplateQueryValue empty = new EmptyUriTemplateQueryValue();
- protected UriTemplateQueryValue(UriTemplatePartType nature)
- {
- this.nature = nature;
- }
- public static UriTemplateQueryValue Empty
- {
- get
- {
- return UriTemplateQueryValue.empty;
- }
- }
- public UriTemplatePartType Nature
- {
- get
- {
- return this.nature;
- }
- }
- public static UriTemplateQueryValue CreateFromUriTemplate(string value, UriTemplate template)
- {
- // Checking for empty value
- if (value == null)
- {
- return UriTemplateQueryValue.Empty;
- }
- // Identifying the type of value - Literal|Compound|Variable
- switch (UriTemplateHelpers.IdentifyPartType(value))
- {
- case UriTemplatePartType.Literal:
- return UriTemplateLiteralQueryValue.CreateFromUriTemplate(value);
- case UriTemplatePartType.Compound:
- throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(
- SR.UTQueryCannotHaveCompoundValue, template.originalTemplate)));
- case UriTemplatePartType.Variable:
- return new UriTemplateVariableQueryValue(template.AddQueryVariable(value.Substring(1, value.Length - 2)));
- default:
- Fx.Assert("Invalid value from IdentifyStringNature");
- return null;
- }
- }
- public static bool IsNullOrEmpty(UriTemplateQueryValue utqv)
- {
- if (utqv == null)
- {
- return true;
- }
- if (utqv == UriTemplateQueryValue.Empty)
- {
- return true;
- }
- return false;
- }
- public abstract void Bind(string keyName, string[] values, ref int valueIndex, StringBuilder query);
- public abstract bool IsEquivalentTo(UriTemplateQueryValue other);
- public abstract void Lookup(string value, NameValueCollection boundParameters);
- class EmptyUriTemplateQueryValue : UriTemplateQueryValue
- {
- public EmptyUriTemplateQueryValue()
- : base(UriTemplatePartType.Literal)
- {
- }
- public override void Bind(string keyName, string[] values, ref int valueIndex, StringBuilder query)
- {
- query.AppendFormat("&{0}", UrlUtility.UrlEncode(keyName, Encoding.UTF8));
- }
- public override bool IsEquivalentTo(UriTemplateQueryValue other)
- {
- return (other == UriTemplateQueryValue.Empty);
- }
- public override void Lookup(string value, NameValueCollection boundParameters)
- {
- Fx.Assert(string.IsNullOrEmpty(value), "shouldn't have a value");
- }
- }
- }
- }
|