173 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			173 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.ComponentModel;
							 | 
						||
| 
								 | 
							
								using System.Net.Http.Headers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace WebApi.Areas.HelpPage
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /// <summary>
							 | 
						||
| 
								 | 
							
								    /// This is used to identify the place where the sample should be applied.
							 | 
						||
| 
								 | 
							
								    /// </summary>
							 | 
						||
| 
								 | 
							
								    public class HelpPageSampleKey
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Creates a new <see cref="HelpPageSampleKey"/> based on media type.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <param name="mediaType">The media type.</param>
							 | 
						||
| 
								 | 
							
								        public HelpPageSampleKey(MediaTypeHeaderValue mediaType)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (mediaType == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("mediaType");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ActionName = String.Empty;
							 | 
						||
| 
								 | 
							
								            ControllerName = String.Empty;
							 | 
						||
| 
								 | 
							
								            MediaType = mediaType;
							 | 
						||
| 
								 | 
							
								            ParameterNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Creates a new <see cref="HelpPageSampleKey"/> based on media type and CLR type.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <param name="mediaType">The media type.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="type">The CLR type.</param>
							 | 
						||
| 
								 | 
							
								        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, Type type)
							 | 
						||
| 
								 | 
							
								            : this(mediaType)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (type == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("type");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ParameterType = type;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Creates a new <see cref="HelpPageSampleKey"/> based on <see cref="SampleDirection"/>, controller name, action name and parameter names.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <param name="sampleDirection">The <see cref="SampleDirection"/>.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="controllerName">Name of the controller.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="actionName">Name of the action.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="parameterNames">The parameter names.</param>
							 | 
						||
| 
								 | 
							
								        public HelpPageSampleKey(SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (!Enum.IsDefined(typeof(SampleDirection), sampleDirection))
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new InvalidEnumArgumentException("sampleDirection", (int)sampleDirection, typeof(SampleDirection));
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (controllerName == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("controllerName");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (actionName == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("actionName");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (parameterNames == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("parameterNames");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            ControllerName = controllerName;
							 | 
						||
| 
								 | 
							
								            ActionName = actionName;
							 | 
						||
| 
								 | 
							
								            ParameterNames = new HashSet<string>(parameterNames, StringComparer.OrdinalIgnoreCase);
							 | 
						||
| 
								 | 
							
								            SampleDirection = sampleDirection;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Creates a new <see cref="HelpPageSampleKey"/> based on media type, <see cref="SampleDirection"/>, controller name, action name and parameter names.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <param name="mediaType">The media type.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="sampleDirection">The <see cref="SampleDirection"/>.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="controllerName">Name of the controller.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="actionName">Name of the action.</param>
							 | 
						||
| 
								 | 
							
								        /// <param name="parameterNames">The parameter names.</param>
							 | 
						||
| 
								 | 
							
								        public HelpPageSampleKey(MediaTypeHeaderValue mediaType, SampleDirection sampleDirection, string controllerName, string actionName, IEnumerable<string> parameterNames)
							 | 
						||
| 
								 | 
							
								            : this(sampleDirection, controllerName, actionName, parameterNames)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            if (mediaType == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                throw new ArgumentNullException("mediaType");
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            MediaType = mediaType;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Gets the name of the controller.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <value>
							 | 
						||
| 
								 | 
							
								        /// The name of the controller.
							 | 
						||
| 
								 | 
							
								        /// </value>
							 | 
						||
| 
								 | 
							
								        public string ControllerName { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Gets the name of the action.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <value>
							 | 
						||
| 
								 | 
							
								        /// The name of the action.
							 | 
						||
| 
								 | 
							
								        /// </value>
							 | 
						||
| 
								 | 
							
								        public string ActionName { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Gets the media type.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        /// <value>
							 | 
						||
| 
								 | 
							
								        /// The media type.
							 | 
						||
| 
								 | 
							
								        /// </value>
							 | 
						||
| 
								 | 
							
								        public MediaTypeHeaderValue MediaType { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Gets the parameter names.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        public HashSet<string> ParameterNames { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public Type ParameterType { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        /// <summary>
							 | 
						||
| 
								 | 
							
								        /// Gets the <see cref="SampleDirection"/>.
							 | 
						||
| 
								 | 
							
								        /// </summary>
							 | 
						||
| 
								 | 
							
								        public SampleDirection? SampleDirection { get; private set; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public override bool Equals(object obj)
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            HelpPageSampleKey otherKey = obj as HelpPageSampleKey;
							 | 
						||
| 
								 | 
							
								            if (otherKey == null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                return false;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return String.Equals(ControllerName, otherKey.ControllerName, StringComparison.OrdinalIgnoreCase) &&
							 | 
						||
| 
								 | 
							
								                String.Equals(ActionName, otherKey.ActionName, StringComparison.OrdinalIgnoreCase) &&
							 | 
						||
| 
								 | 
							
								                (MediaType == otherKey.MediaType || (MediaType != null && MediaType.Equals(otherKey.MediaType))) &&
							 | 
						||
| 
								 | 
							
								                ParameterType == otherKey.ParameterType &&
							 | 
						||
| 
								 | 
							
								                SampleDirection == otherKey.SampleDirection &&
							 | 
						||
| 
								 | 
							
								                ParameterNames.SetEquals(otherKey.ParameterNames);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        public override int GetHashCode()
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            int hashCode = ControllerName.ToUpperInvariant().GetHashCode() ^ ActionName.ToUpperInvariant().GetHashCode();
							 | 
						||
| 
								 | 
							
								            if (MediaType != null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                hashCode ^= MediaType.GetHashCode();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (SampleDirection != null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                hashCode ^= SampleDirection.GetHashCode();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (ParameterType != null)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                hashCode ^= ParameterType.GetHashCode();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            foreach (string parameterName in ParameterNames)
							 | 
						||
| 
								 | 
							
								            {
							 | 
						||
| 
								 | 
							
								                hashCode ^= parameterName.ToUpperInvariant().GetHashCode();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return hashCode;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |