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; | ||
|  |         } | ||
|  |     } | ||
|  | } |